僅適用於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