/*----------------------------------------------------------------------
TMOD (89H)
T1 T0
GATE C/T` M1 M0 GATE C/T` M1 M0
------------------------------------------------------------------------
GATE=0時,TR0=1,T0就開始定時/計數(shù)
GATE=1時,TR0=1,INT0`=1,T0才開始定時/計數(shù)
C/T`=0,計數(shù);C/T`=1,定時
M1 M0 工作方式 功能說明
0 0 方式0 13位定時/計數(shù)器(0~8192)
0 1 方式1 16位定時/計數(shù)器(0~65536)
1 0 方式2 可自動重載的8位定時/計數(shù)器(0~256)
1 1 方式3 定時/計數(shù)器0分為兩個8位的計數(shù)器,關(guān)閉T1
------------------------------------------------------------------------
TCON (88H)
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
8FH 8EH 8DH 8CH 8BH 8AH 89H 88H
------------------------------------------------------------------------
TF0/TF1=1,定時/計數(shù)器T0/T1溢出
TR0/TR1=0,定時/計數(shù)器T0/T1停止計數(shù)
TR0/TR1=1,GATE=0,定時/計數(shù)器T0/T1開始計數(shù)
TR0/TR1=1,GATE=1,INT0`=1/INT1`=1,定時/計數(shù)器T0/T1開始計數(shù)
IT0/IT1=1,外部中斷INT0`/INT1`為邊沿觸發(fā)
IT0/IT1=0,外部中斷INT0`/INT1`為低電平觸發(fā)
IE0/IE1,外部中斷INT0`/INT1`有中斷請求信號時,置1
------------------------------------------------------------------------
IE (A8H)
EA - - ES ET1 EX1 ET0 EX0
AFH AEH ADH ACH ABH AAH A9H A8H
EA=1:允許所有中斷 EA=0:禁止所有中斷
ES=1:允許串行口中斷 ES=0:禁止串行口中斷
ET1=1:允許T1中斷 ET1=0:禁止T1中斷
EX1=1:允許INT1`中斷 EX1=0:禁止INT1`中斷
ET0=1:允許T0中斷 ET0=0:禁止T0中斷
EX0=1:允許INT0`中斷 EX0=0:禁止INT0`中斷
----------------------------------------------------------------------*/
/*---------------------------------------------------------
定時器初始化程序
-----------------------------------------------------------*/
void Init_Timer()
{
TMOD |= 0x01;
/* ---------------------------------------------------------------------------------
工作方式0 工作方式1 工作方式2 工作方式3
定時器0選用 0x00 0x01 0x02 0x03
定時器1選用 0x00 0x10 0x20 0x30
計數(shù)器0選用 0x04 0x05 0x06 0x07
計數(shù)器1選用 0x40 0x50 0x60 0x70
---------------------------------------------------------------------------------*/
TH0=0x00; //16位:(65536-X)/256 13位:(8192-X)/256
TL0=0x00; //16位:(65536-X)%256 13位:(8192-X)%256
EA=1; //總中斷打開
ET0=1; //定時器0中斷打開
TR0=1; //定時器0開關(guān)打開
}
/*---------------------------------------------------------
定時器中斷子程序
interrupt 0 指明是外部中斷0 using 0 是第0組寄存器
interrupt 1 指明是定時器中斷0 using 1 是第1組寄存器
interrupt 2 指明是外部中斷1 using 2 是第2組寄存器
interrupt 3 指明是定時器中斷1 using 3 是第3組寄存器
interrupt 4 指明是串行口中斷
---------------------------------------------------------*/
void Timer_isr() interrupt 1 using 1
{
TH0=0x00; //需重新賦值,除工作方式2外
TL0=0x00;
}