首页 51单片机C语言程序(二)定时计数器中断

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

举报
开通vip

51单片机C语言程序(二)定时计数器中断51单片机C语言程序(二)定时/计数器 中断         程序一 利用定时/计数器T0从P1.0输出周期为1s 的方波, 让发光二极管以1HZ闪烁, #include  //52单片机头文件 #include //包含有左右循环移位子函数的库 #define uint unsigned int    //宏定义 #define uchar unsigned char  //宏定义 sbit P1_0=P1^0; uchar tt; void main()      //主函数 { TMOD=0...

51单片机C语言程序(二)定时计数器中断
51单片机C语言程序(二)定时/计数器 中断         程序一 利用定时/计数器T0从P1.0输出周期为1s 的方波, 让发光二极管以1HZ闪烁, #include  //52单片机头文件 #include //包含有左右循环移位子函数的库 #define uint unsigned int    //宏定义 #define uchar unsigned char  //宏定义 sbit P1_0=P1^0; uchar tt; void main()      //主函数 { TMOD=0x01;//设置定时器0为工作方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;//开总中断 ET0=1;//开定时器0中断 TR0=1;//启动定时器0 while(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个灯依次亮一遍为一个周期),循环。 #include  //52单片机头文件 #include //包含有左右循环移位子函数的库 #define uint unsigned int    //宏定义 #define uchar unsigned char  //宏定义 sbit P1_0=P1^0; uchar tt,a; void main()      //主函数 { TMOD=0x01;//设置定时器0为工作方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;//开总中断 ET0=1;//开定时器0中断 TR0=1;//启动定时器0 a=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)的方波 #include  //52单片机头文件 #include //包含有左右循环移位子函数的库 #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为工作方式1 TH0=(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;//启动定时器0 while(1);//等待中断产生 } void timer0() interrupt 1   //定时器0中断 { TR0=0;    //进中断后先把定时器0中断关闭,防止内部程序过多而造成中断丢失 TH0=(65536-fre)/256; TL0=(65536-fre)%256; tt++; if(flag<40)    //以下几个if分别用来选取不同的频率 if(tt==10) { tt=0; fre=50000; beep=~beep; } if(flag>=40&&flag<80) { tt=0; fre=50000; beep=~beep;  } if(flag>=80&&flag<120) { tt=0; fre=10000; beep=~beep;  } if(flag>=120&&flag<160) { tt=0; fre=5000; beep=~beep;  } if(flag>=160&&flag<200) { tt=0; fre=2500; beep=~beep;  } if(flag>=200&&flag<240) { tt=0; fre=1250; beep=~beep;  } if(flag>=240&&flag<280) { tt=0; fre=625; beep=~beep;  } if(flag>=280&&flag<320) { tt=0; fre=312; beep=~beep;  } if(flag>=320&&flag<360) { 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    //宏定义 #define uchar unsigned char  //宏定义 sbit dula=P2^6;       //数码管段选锁存端 sbit wela=P2^7;       ////数码管位选锁存端 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为工作方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;//开总中断 ET0=1;//开定时器0中断 TR0=1;//启动定时器0 dula=1; P0=0x3f;  //给段开始送显示0。 dula=0;//关闭段选锁存端,防止开始时出现乱码。 wela=1;//11101010 P0=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;  } } } void exter0() interrupt 1    // 定时器0中断 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; tt++; }
本文档为【51单片机C语言程序(二)定时计数器中断】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_620441
暂无简介~
格式:doc
大小:18KB
软件:Word
页数:0
分类:互联网
上传时间:2019-09-11
浏览量:34