《51单片机C语言中断程序定时计数器(共11页).doc》由会员分享,可在线阅读,更多相关《51单片机C语言中断程序定时计数器(共11页).doc(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上51单片机C语言中断程序 定时/计数器程序一利用定时/计数器T0从P1.0输出周期为1s 的方波,让发光二极管以1HZ闪烁,#include /52单片机头文件#include /包含有左右循环移位子函数的库#define uint unsigned int /宏定义#define uchar unsigned char /宏定义sbit P1_0=P10;uchar tt;void main() /主函数TMOD=0x01;/设置定时器0为工作方式1TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;/开总中断ET0=1
2、;/开定时器0中断TR0=1;/启动定时器0while(1);/等待中断产生void timer0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt+;if(tt=20)tt=0;P1_0=P1_0;程序二利用定时/计数器T1产生定时时钟,由P1口控制8个发光二极管,使8个指示灯依次一个一个闪动,闪动频率为10次/秒(8个灯依次亮一遍为一个周期),循环。#include /52单片机头文件#include /包含有左右循环移位子函数的库#define uint unsigned int /宏定义#define uchar u
3、nsigned char /宏定义sbit P1_0=P10;uchar tt,a;void main() /主函数TMOD=0x01;/设置定时器0为工作方式1TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;/开总中断ET0=1;/开定时器0中断TR0=1;/启动定时器0a=0xfe;while(1);/等待中断产生void timer0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt+;if(tt=2)tt=0;P1=a;a=_crol_(a,1);程序三同时用两个定时
4、器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔2s依次输出1,10,50,100,200,400,800,1k(hz)的方波#include /52单片机头文件#include /包含有左右循环移位子函数的库#define uint unsigned int /宏定义#define uchar unsigned char /宏定义sbit beep=P23;uchar tt;uint fre,flag;void main() /主函数fre=50000;beep=0;TMOD=0x11;/设置定时器0,定时器1为工作方式1TH0=(65536-fre)/256;TL0
5、=(65536-fre)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;/开总中断ET0=1;/开定时器0中断ET1=1;TR1=1;TR0=1;/启动定时器0while(1);/等待中断产生void timer0() interrupt 1 /定时器0中断TR0=0; /进中断后先把定时器0中断关闭,防止内部程序过多而造成中断丢失TH0=(65536-fre)/256;TL0=(65536-fre)%256;tt+;if(flag=40&flag=80&flag=120&flag=160&flag=200&flag=240&flag
6、=280&flag=320&flag360)tt=0;fre=156;beep=beep;TR0=1;void timer1() interrupt 3 /定时器1中断用来产生2秒时间定时TH1=(65536-50000)/256;TL1=(65536-50000)%256;flag+;if(flag=360) flag=0; fre=50000; 程 序四用 定时器以间隔500MS在6位数码管上依次显示0、1、2、3.C、D、E、F,重复。#include /52单片机头文件#include /包含有左右循环移位子函数的库#define uint unsigned int /宏定义#defi
7、ne uchar unsigned char /宏定义sbit dula=P26; /数码管段选锁存端sbit wela=P27; /数码管位选锁存端uchar num,tt;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void main()num=0;tt=0;TMOD=0x01;/设置定时器0为工作方式1TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;/开总中断ET0=1;/开定时器0中断TR0=1;/启动定时器0dula=1;P0=0x3f; /给段开始送显示0。dula=0;/关闭段选锁存端,防止开始时出现乱码。wela=1;/P0=0xc0; / 打开六个数码管位选wela=0;while(1)if(tt=10) /每进入10次中断即为500ms,执行一次显示变化。 tt=0;num+;if(num=16)num=0;dula=1;P0=tablenum;dula=0;void exter0() interrupt 1 / 定时器0中断TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt+;专心-专注-专业