- 7
- 0
- 约3.34千字
- 约 11页
- 2016-09-19 发布于重庆
- 举报
51单片机C语言中断程序定时计数器
51单片机C语言中断程序 定时/计数器?
程序一
利用定时/计数器T0从P1.0输出周期为1s 的方波,让发光二极管以1HZ闪烁,#includereg52.h? //52单片机头文件#include intrins.h //包含有左右循环移位子函数的库#define uint unsigned int??? //宏定义#define uchar unsigned char? //宏定义sbit P1_0=P1^0;uchar tt;void main()????? //主函数{TMOD=0x01;//设置定时器0为工作方式1TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;//开总中断ET0=1;//开定时器0中断TR0=1;//启动定时器0while(1);//等待中断产生}
void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt++;if(tt==20){?tt=0;?P1_0=~P1_0;}}
?
程序二
利用定时/计数器T1产生定时时钟,由P1口控制8个发光二极管,使8个指示灯依次一个一个闪动,闪动频率为10次/秒(8个灯依次亮一遍为一个周期),循环。#includereg52.h? //52单片机头文件#include intrins.h //包含有左右循环移位子函数的库#define uint unsigned int??? //宏定义#define uchar unsigned char? //宏定义sbit P1_0=P1^0;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 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt++;if(tt==2){?tt=0;?P1=a;?a=_crol_(a,1);}}
?
程序三
?同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔2s依次输出1,10,50,100,200,400,800,1k(hz)的方波
#includereg52.h? //52单片机头文件#include intrins.h //包含有左右循环移位子函数的库#define uint unsigned int??? //宏定义#define uchar unsigned char? //宏定义sbit beep=P2^3;uchar tt;uint fre,flag;
void main()????? //主函数{fre=50000;beep=0;TMOD=0x11;//设置定时器0,定时器1为工作方式1TH0=(65536-fre)/256;TL0=(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(flag40)??? //以下几个if分别用来选取不同的频率?if(tt==10)??{???tt=0;???fre=50000;???beep=~beep;??}if(flag=40flag80)?{??tt=0;??fre=50000;??beep=~beep;??}if(flag=80flag120)?{??tt=0;??fre=10000;??beep=~beep;??}if(flag=120flag160)?{??tt=0;??fre=5000;??beep=~beep;??}if(flag=160flag200)?{??tt=0;??fre=25
原创力文档

文档评论(0)