结构推理 试用定时/计数器T1,编程实现延时1小时后从P1.0输出高电平。(已知fosc=6MHz)
【正确答案】定时/计数器4种工作方式中,方式1定时时间最长。fosc=6MHz时,最大定时时间为65536×2μs≈131ms,取整数为100ms。
   1)计算定时初值:T1初值=216-100ms/2μs=65536-50000=15536=3CB0H。
   2)设置100ms计数器循环次数:N=1小时/100ms=36000,需分二重循环,内循环R2=200,外循环R3=180,200×180=36000。
   编程如下:
       ORG   0000H      ;复位地址
       LJMP  STAT       ;转复位初始化
       ORG   001BH      ;T1中断入口地址
       LJMP  IT1        ;转T1中断服务程序
       ORG   1000H      ;初始化程序首地址
   STAT:MOV  SP,#60H    ;置堆栈
       MOV   TMOD,#10H  ;置T1定时器,方式1
       MOV   IP,#08H    ;置T1高优先级
       MOV   TH1,#3CH   ;置T1初值,定时100ms
       MOV   TL1,#0B0H  ;
       MOV   TL1,#0B0H  ;
       SETB  TR1        ;T1运行
       MOV   IE,#88H    ;T1开中
       MOV   R2,#200    ;置1小时延时内循环初值
       MOV   R3,#180    ;置1小时延时外循环初值
       LJMP  MAIN       ;转主程序,并等待中断
       ORG   2000H      ;T1中断服务子程序首地址
   IT1:MOV   TH1,#3CH   ;重置T1定时初值100ms
       MOV   TL1,#0B0H  ;
       DJNZ  R2,IT10    ;判内循环,未满转中断返回
       MOV   R2,#200    ;重置内循环初值
       DJNZ  R3,IT10    ;判外循环,未满转中断返回
       SETB  P1.0       ;延时1小时满,从P1.0输出高电平
       CLR   TR1        ;T1停
       CLR   ET1        ;T1禁中
       IT10:RETI        ;中断返回
【答案解析】