已知fosc=12MHz 试编制程序:使T0每计满500个外部输入脉冲(设10ms内 外部输入脉冲数少于500个)后 在P1.0输出

大学 脉冲,程序 已帮助 人

已知fosc=12MHz,试编制程序:使T0每计满500个外部输入脉冲(设10ms内,外部输入脉冲数少于500个)后,在P1.0输出一个脉宽10ms(由T1定时)的正脉冲。

热搜:12mhz晶振的单片机在定时工作方式下

答案解析

难度★★☆ 搜索
  • 根据题目要求,将T0用作计数器方式1,T1用作定时器方式1。
       ①计算定时/计数器初值
       T0初值=216-500=65536-500=65036=FE0CH
       T1初值=216-10000μs/1μs=65536-10000=55536=D8F0H
       ②设置TMOD:TMOD=00010101B
       ③编制程序如下:
           ORG   0000H      ;复位地址
           LJMP  STAT       ;转初始化
           ORG   000BH      ;10中断入口地址
           LJMP  IT0        ;转T0中断服务程序
           ORG   001BH      ;T1中断入口地址
           LJMP  IT1        ;转T1中断服务程序
           ORG   0100H      ;初始化程序首地址
       STAT:MOV  SP,#60H    ;置堆栈
           MOV   TMOD,#15H  ;置T0计数器方式1,T1定时器方式1
           MOV   TH0,#0FEH  ;置T0初值,计数500
           MOV   TL0,#0CH   ;
           MOV   TH1,#0D8H  ;置T1初值,定时10ms        MOV   TL1,#0F0H  ;
           SETB  PT0            ;置T0为高优先级
           MOV   IE,#10001010B  ;T0、T1开中
           SETB  TR0            ;T0启动
           CLR   P1.0           ;P1.0输出低电平
           LJMP  MAIN           ;转主程序,并等待中断
           ORG   0200H          ;T0中断服务程序
       IT0:SETB  P1.0           ;P1.0输出正脉冲
           SETB  TR1            ;启动T1定时10ms
           MOV   TH0,#0FEH      ;重置T0初值,计数500
           MOV   TL1,#0CH       ;
           RETI                 ;T0中断返回
           ORG   0300H          ;T1中断服务程序首地址
       IT1:CLR   P1.0           ;停输出脉冲
           CLR   TR1            ;T1停
           MOV   TH0,#0D8H      ;重置T1初值,定时10ms
           MOV   TL1,#0F0H      ;
           RETI                 ;T1中断返回