TL0初值=28-400μs/2μs=256-200=56=38H
TH0初值=28-500μs/2μs=256-250=6
②TMOD=00000011B
③編制程序如下:
ORG 0000H ;復位地址
UMP STAT ;轉初始化程序
ORG 000BH ;T0中斷入口地址
LJMP IT0 ;轉T0中斷服務程序
ORG 001BH ;T1中斷入口地址(被TH0借用)
LJMP IT1 ;轉T1中斷服務程序
ORG 1000H ;初始化程序首地址
STAT:CLR P1.0 ;P1.0輸出低電平
CLR P1.1 ;P1.1輸出低電平
MOV TMOD,#03H ;置T0定時器方式3
MOV TL0,#38H ;置TL0初值,定時400μs
MOV TH0,#06H ;置TH0初值,定時500μs
MOV IP,#00001010B ;置T0、T1為高優先級
SETB TR0 ;T0啟動
SETB P1.0 ;輸出高電平
SETB TR1 ;T1啟動(被TH0借用)
SETB P1.1 ;輸出高電平
SETB F0 ;置1ms標誌
MOV IE,#10001010B ;T0、T1開中
LJMP MAIN ;轉主程序,並等待中斷
ORG 2000H ;T0中斷服務子程序首地址
IT0:MOV TL0,#38H ;重置TL0初值400μs
CPL P1.0 ;輸出波形取反
RET1 ;中斷返回
ORG 2100H ;T1中斷服務子程序首地址
IT1:MOV TH0,#06H ;重置TH0初值500μs
CPL F0 ;1ms標誌取反
JNB F0,IT01 ;無1ms標誌,轉返回
CPL P1.1 ;有1ms標誌,輸出波形取反
IT01:RETI ;中斷返回