51单片机定时器中断Word格式.docx
- 文档编号:15494158
- 上传时间:2022-11-02
- 格式:DOCX
- 页数:7
- 大小:312.90KB
51单片机定时器中断Word格式.docx
《51单片机定时器中断Word格式.docx》由会员分享,可在线阅读,更多相关《51单片机定时器中断Word格式.docx(7页珍藏版)》请在冰豆网上搜索。
C/T=1为计数模式。
2.定时器/计数器控制寄存器控制寄存器(TCON)
该寄存器的低4位用于控制外部中断,已在前面介绍,高4位用于控制定时/计数器的启动和中断申请。
TF1:
T1溢出中断请求标志位。
T1计数溢出时由硬件自动置TF1为1。
CPU响应中断后TF1由硬件自动清0。
TR1:
T1运行控制位。
TR1置1时,T1开始工作;
TR1置0时,T1停止工作。
TR1由软件置1或清0。
所以,用软件可控制定时/计数器的启动与停止。
TF0:
T0溢出中断请求标志位,其功能与TF1类同。
TR0:
T0运行控制位,其功能与TR1类同。
3.中断允许控制寄存器(IE)
ET0:
定时/计数器T0中断允许位;
ET1:
定时/计数器T1中断允许位;
EA:
CPU中断允许(总允许)位。
二.定时器溢出中断的处理过程
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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 定时器 中断