【正确答案】①T0定时器方式3时,被拆成二个独立的8位计数器TH0、TL0,定时初值应分别计算,其中定时1ms将超出8位计数器最大计数值,可按0.5ms×2编程。
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 ;中断返回
【答案解析】