结构推理 已知fosc=6MHz,试编写程序,利用T0工作在方式3,使P1.0和P1.1分别输出400μs和1ms方波。
【正确答案】①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                ;中断返回
【答案解析】