51单片机C语言中断程序定时计数器

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

51单片机C语言中断程序定时/计数器程序一利用定时/计数器T0从P1.0输出周期为1s的方波,让发光二极管以1HZ闪烁,#includereg52.h//52单片机头文件#includeintrins.h//包含有左右循环移位子函数的库#defineuintunsignedint//宏定义#defineucharunsignedchar//宏定义sbitP1_0=P1^0;uchartt;voidmain()//主函数{TMOD=0x01;//设置定时器0为工作方式1TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;//开总中断ET0=1;//开定时器0中断TR0=1;//启动定时器0while(1);//等待中断产生}voidtimer0()interrupt1{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单片机头文件#includeintrins.h//包含有左右循环移位子函数的库#defineuintunsignedint//宏定义#defineucharunsignedchar//宏定义sbitP1_0=P1^0;uchartt,a;voidmain()//主函数{TMOD=0x01;//设置定时器0为工作方式1TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;//开总中断ET0=1;//开定时器0中断TR0=1;//启动定时器0a=0xfe;while(1);//等待中断产生}voidtimer0()interrupt1{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单片机头文件#includeintrins.h//包含有左右循环移位子函数的库#defineuintunsignedint//宏定义#defineucharunsignedchar//宏定义sbitbeep=P2^3;uchartt;uintfre,flag;voidmain()//主函数{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);//等待中断产生}voidtimer0()interrupt1//定时器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=40&&flag80){tt=0;fre=50000;beep=~beep;}if(flag=80&&flag120){tt=0;fre=10000;beep=~beep;}if(flag=120&&flag160){tt=0;fre=5000;beep=~beep;}if(flag=160&&flag200){tt=0;fre=2500;beep=~beep;}if(flag=200&&flag240){tt=0;fre=1250;beep=~beep;}if(flag=240&&flag280){tt=0;fre=625;beep=~beep;}if(flag=280&&flag320){tt=0;fre=312;beep=~beep;}if(flag=320&&flag360){tt=0;fre=156;beep=~beep;}TR0=1;}voidtimer1()interrupt3//定时器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,重复。#includereg52.h//52单片机头文件#includeintrins.h//包含有左右循环移位子函数的库#defineuintunsignedint//宏定义#defineucharunsignedchar//宏定义sbitdula=P2^6;//数码管段选锁存端sbitwela=P2^7;////数码管位选锁存端ucharnum,tt;ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};voidmain(){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;//11101010P0=0xc0;//打开六个数码管位选wela=0;while(1){if(tt==10)//每进入10次中断即为500ms,执行一次显示变化。{tt=0;num++;if(num==16)num=0;dula=1;P0=table[num];dula=0;}}}voidexter0()interrupt1//定时器0中断{TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt++;}

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功