51单片机C语言程序 定时 计数器 中断
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机C语言程序定时计数器中断51单片机C语言程序定时计数器
中断
程序一
利用定时/计数器T0从P1.0输出周期为1s的方波,让发光二极管以1HZ闪烁,
#include reg52.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为工作方式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 reg52.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为工作方式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 reg52.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;
//设置定时器0,定时器1为工作方式1 TH0=(65536-fre)/256; TMOD=0x11;
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) {