【正确答案】本题有4组定时:1ms、10ms和1s、60s。1ms用T0方式1;10ms用1ms计数10次;1s用T1方式1定时50ms计数20次;60s用1s计数60次。基本定时是1ms和50ms。
①计算定时/计数器初值:
T0初值=216-1000μs/1μs=65536-1000=64536=FC18H
T1初值=216-50000μs/1μs=65536-50000=15536=3CB0H
②设置TMOD:TMOD=00010001B
③编制程序如下:
ORG 0000H ;复位地址
LJMP STAT ;转初始化程序
ORG 000BH ;T0中断入口地址
LJMP IT0 ;转T0中断服务程序
ORG 001BH ;T1中断入口地址
LJMP IT1 ;转T1中断服务程序
ORG 0100H ;初始化程序首地址
STAT:MOV SP,#60H ;置堆栈
MOV TMOD,#11H ;置T0、T1定时器方式1
MOV TH0,#0FCH ;置T0初值,定时1ms
MOV TL0,#18H ;
MOV TH1,#3CH ;置T1初值,定时50ms
MOV TL1,#0B0H ;
MOV IP,#00000010B;置T0为高优先级
MOV IE,#10001010B;T0、T1开中
SETB TR1 ;T1启动
MOV R5,#10 ;置10ms计数器初值
MOV R6,#20 ;置1s计数器初值
MOV R7,#60 ;置60s计数器初值
CLR F0 ;清10ms脉冲标志
CLR P1.0 ;P1.0取低
MP MAIN ;转主程序,并等待中断
ORG 0200H ;T1中断服务程序首地址
IT1:MOV TH1,#3CH ;重置T1初值50ms
MOV TL1,#0B0H ;
DJNZ R6,IT11 ;判1s到否?未到转返回
SETB P1.0 ;1s到,P1.0输出脉冲
SETB TR0 ;T0启动,定时1ms
MOV R6,#20 ;重置1s计数器初值
DJNZ R7,IT11 ;判60s到否?未到转返回
MOV R7,#60 ;60s到,重置60s计数器初值
SETB F0 ;置10ms脉冲标志
IT11:RETI ;T1中断返回
0RG 0300H ;T0中断服务程序首地址
IT0:MOV TH1,#0FCH ;有10ms脉冲标志,重置T0初值1ms
MOV TL1,#18H ;
JNB F0,IT01 ;无10ms脉冲标志,输出1ms脉冲
DJNZ R5,IT02 ;判10ms到否?未到转返回
MOV R5,#10 ;10ms到,重置10ms计数器初值
CLR F0 ;清10ms脉冲标志
IT01:CLR TR0 ;T0停
CLR P1.0 ;停输出脉冲
IT02:RETI ;T0中断返回
【答案解析】