51单片机定时器中断Word文档格式.docx
《51单片机定时器中断Word文档格式.docx》由会员分享,可在线阅读,更多相关《51单片机定时器中断Word文档格式.docx(5页珍藏版)》请在冰点文库上搜索。
即此时定时器的启动条件,加上了INT0/1引脚为高电平这一条件。
C/T:
定时/计数模式选择位。
C/T=0为定时模式;
C/T=1为计数模式。
二.定时器溢出中断的处理过程
1、设置定时器工作方式
2、为定时器装入初值
3、定时器中断允许位置为1
4、开总中断
5、开定时器,等待产生溢出中断请求
三.实现简单时钟
说明:
1.使用动态数码管显示
2.选择工作方式1,以16位的定时器0进行工作,即TMOD=0x01,中断编号为1;
3.定时50ms,即每隔50ms产生一次中断:
TH0=(65536-50000)/256;
//16位定时器的高8位
TL0=(65536-50000)%256;
//16位定时器的低8位
具体的时间与单片机的晶振有关,请了解机器周期、指令周期、时钟周期等相关知识。
#include<
reg51.h>
#defineucharunsignedchar#defineuintunsignedint
ucharhour,min,sec;
ucharcodewei[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//共阴极数码管位选编码
ucharcodeduan[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x01};
//共阴极数码管段选编码
voiddelay(uintz)
{
uinti,j;
for(i=z;
i>
0;
i--)
for(j=110;
j>
j--);
}
voidtimer0_init()
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
EA=1;
voidmain()
{
uchari;
timer0_init();
while
(1)
{
num[0]=duan[hour/10];
num[1]=duan[hour%10];
num[2]=0x40;
//显示一横
num[3]=duan[min/10];
num[4]=duan[min%10];
num[5]=0x40;
num[6]=duan[sec/10];
num[7]=duan[sec%10];
for(i=0;
i<
8;
i++)//显示部分
P0=wei[i];
//位选
P1=num[i];
//段选
delay
(2);
P1=0x00;
//消隐
}
}/*启动定时器后,没次计数溢出就会进入中断服务函数,重新赋初值,再进行计数,来达到定时的效果*/voidtimer0()interrupt1//定时器中断服务函数
t++;
if(hour==24)
hour=0;
if(min==60)
{
hour++;
min=0;
if(sec==60)
min++;
sec=0;
}
if(t==20)
sec++;
t=0;