仅适用于STC89C52系列芯片。
中断:
通过配置IE中断允许寄存器以及TCON来使用中断 这个寄存器可以进行位寻址操作及直接EA = 1;
EA为中断总开关。
芯片有三个定时器中断入口:
ET1是定时器T1溢出中断允许位。
ET0是定时器T0溢出中断允许位。
ET2是定时器T2溢出中断允许位。
ES是串口中断允许位。
EX1是外部中断1允许位
EX0是外部中断0允许位
外部中断2 3同理
IE1是外部中断1请求源标志,当IE1 = 1时外部中断向单片机请求中断,当单片机相应中断,由硬件置0.
IE0、IE2、IE3同理。
配置外部中断时需要配置TCON以及XICON来配置外部中断触发的方式:
IT1和IT0控制外部中断1、0的触发方式是低电平还是下降沿。
IT2、IT3同理。
串口中断还需要配置SCON寄存器(可以位寻址)
定时器:
通过配置TCON寄存器来使用定时器
TR0是定时器T0的运行控制位
TR1是定时器T1的运行控制位
TF0是定时器0的溢出中断标志,当计数最高位超出65535时TF0被硬件置1需要手动清零
TF1是定时器1的溢出中断标志,当计数最高位超出65535时TF1被硬件置1需要手动清零
在配置完TCON后还需要配置TMOD来配置定时器的工作模式 TMOD不可以位寻址
当配置TMOD = 0x01时即为定时器工作模式1,16位定时模式
定时器计时示例:
void timer0Init()
{
TR0 = 1; //启动定时器0
TMOD = 0X01; //定时器工作模式1,16位定时器计数模式
TH0 = 0x4b;
TL0 = 0xfd; //定时50ms
}
在使用定时器中断的时候同时需要配置定时器:
下面是定时器中断示例:
void timer0Init() //timer0中断初始化
{
EA = 1; //打开总中断
ET0 = 1; //打开定时器0中断
TR0 = 1; //启动定时器0
TMOD = 0X01; //定时器工作模式1,16位定时模式
TH0 = 0xED;
TL0 = 0xFF; //定时5ms
}
void timer0() interrupt 1 //中断服务函数
{
TH0 = 0xED;
TL0 = 0xFF; //定时5ms
display(num); //数码管显示函数
}
关于定时器的赋值:
以定时50ms为例:
先转换位um
50000um
50000/1.085 = 46082
TH0 = (65535 - 46082)/ 256
TL0 = (65535 - 46082)% 256