定时器中断

在写单片机的定时器程序时,在程序开始处需要对定时器及中断寄存器做初始化设置:
【1】对TMOD赋值,以确定T0和T1的工作方式 【2】计算初值,并将值写入TH0、TL0和TH1、TL1
【3】中断方式时,则对IE赋值,开放中断
【4】使TR0或TR1置位,启动定时器/计数器定时或计数
 
51单片机一般有两个定时器/计数器T0和T1,每个定时器由两个8位的寄存器(高8位和低8位)组成,分别为TH0/TL0和TH1和TL0
 
定时器/计数器有4种工作方式

M1 M0 工作方式
0 0 方式0,为13位定时器/计数器
0 1 方式1,为16位定时器/计数器
1 0 方式2,8位初值自动重装的8位定时器/计数器
1 1 方式3,仅适用于T0,分成两个8位计数器,T1停止计数

其中M1、M0由TMOD寄存器控制  
TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。—-> 控制哪个定时器工作 TF1/TF0 : 定时器1或0溢出标志位  —> 中断发生
TR1/TR0 : 定时器1或0运行控制  —> 控制哪个定时器运行
 
中断允许寄存器IE: 用来设定各个中断源的打开和关闭 EA:全局中断允许位
ET2:定时器2中断允许位
ES:串口中断允许位
ET1:定时器1中断允许位
EX1:外部中断1中断允许位
ET0:定时器0中断允许位
EX0:外部中断0中断允许位
 
 
中断流程的具体代码:
 

void main()
{
    TMOD = 0x01; // 设定定时器0工作方式1
    TH0 = (65535-45872)/256; // 装初值 11.0592M晶振定时50ms数为45872
    TL0 = (65525-45872)%256; 
    EA = 1; // 开总中断
    ET0 = 1; // 开定时器0中断
    TR0 = 1; // 启动定时器0
    while(1);
}

 
中断服务程序

void FunName() interrupt 中断号 
{
 // coding ....
} 

发表评论