标题: 这个在单片机p1.1接一个了led怎么不闪烁? [打印本页]

作者: 老Tom    时间: 2019-12-11 22:18
标题: 这个在单片机p1.1接一个了led怎么不闪烁?
假定P1.0每秒产生一个机器周期的正脉冲,P1.1每分钟产生一个机器周期的正脉冲。
单片机是89C51。
ORG    0000H
       AJMP   START
       ORG    000BH              ;定时器0中断入口.
       AJMP   SERVE
START:
       MOV TMOD, #01H           ;T0定时方式0
       MOV TH0, #3CH            ;定时
       MOV TL0, #0B0H
       SETB TR0                  ;启动.
       SETB ET0                  ;允许中断.
       SETB EA
       MOV R2, #20             ;秒.
       MOV R3, #60             ;分.
       CLR P1.0                 ;开始时,输出低电平.
       CLR P1.1
       SJMP $                   ;等待中断.
;--------------------------------------------
SERVE:                           ;50ms执行一次本中断程序.
       MOV TL0, #0B0H           ;重新送入初始值.
       MOV TH0, #3CH            ;定时
       DJNZ R2, T0_END          ;不到20次转移.
       SETB P1.0                 ;到了20次,就是到了1秒,输出正脉冲.
       CLR P1.0                 ;马上就恢复为0,这就是1个机器周期.
       MOV R2, #20
       DJNZ R3, T0_END          ;不到60秒转移.
       SETB P1.1                 ;到了60秒,输出正脉冲.
       CLR P1.1                 ;马上就恢复为0,这就是1个机器周期.
       MOV R3, #60
T0_END:
       RETI
;--------------------------------------------
END


作者: csmyldl    时间: 2019-12-12 00:24
中断程序应该改一下,1个机器大约1us左右,无法点亮LED
SERVE:                           ;50ms执行一次本中断程序.
       MOV TL0, #0B0H           ;重新送入初始值.
       MOV TH0, #3CH            ;定时
       DJNZ R2, T0_END          ;不到20次转移.
       CPL      P1.0                 ;到了20次,1秒钟翻转一次
       MOV R2, #20
       DJNZ R3, T0_END          ;不到60秒转移.
       CPL      P1.1                 ;到了60秒,LED亮灭翻转
       MOV R3, #60
       MOV R2,#20
T0_END:
       RETI
作者: gb302    时间: 2019-12-12 08:01
输出高电平时间太短了,微妙级,LED估计都反映不过来,而且人眼也看不到




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1