关于AT89c51单片机定时器实现延时子程序的问题
用汇编代码设计程序,完成8个LED灯的循环闪烁:LED1亮,其余灭->LED2亮,其余灭……,如此循环5次后,进行全灭->全亮闪烁,时间间隔为500ms用p0口控制org...
用汇编代码设计程序,完成8个LED灯的循环闪烁:
LED1亮,其余灭->LED2亮,其余灭……,如此循环5次后,进行全灭->全亮闪烁,时间间隔为500ms用p0口控制
org 0000h
RESET: LJMP MAIN
ORG 000BH
LJMP IT0P
ORG 1000H MAIN: MOV A,#01H
MOV R1,#28H LOOP: MOV P0,A
RLC A
ACALL DELAY
DJNZ R1,LOOP
MOV A,#0FFH LOOP1: MOV P0,A
CPL A
ACALL DELAY
LJMP LOOP1 DELAY: MOV SP,#60H
MOV B,#1AH
MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#3CH
SETB TR0
SETB ET0
SETB EA
HERE: SJMP HERE IT0P: MOV TL0,#0B0H
DJNZ B,LOOP2
CLR TR0
LOOP2: RETI
END
这是我的代码,为什么起不到延时的作用 展开
LED1亮,其余灭->LED2亮,其余灭……,如此循环5次后,进行全灭->全亮闪烁,时间间隔为500ms用p0口控制
org 0000h
RESET: LJMP MAIN
ORG 000BH
LJMP IT0P
ORG 1000H MAIN: MOV A,#01H
MOV R1,#28H LOOP: MOV P0,A
RLC A
ACALL DELAY
DJNZ R1,LOOP
MOV A,#0FFH LOOP1: MOV P0,A
CPL A
ACALL DELAY
LJMP LOOP1 DELAY: MOV SP,#60H
MOV B,#1AH
MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#3CH
SETB TR0
SETB ET0
SETB EA
HERE: SJMP HERE IT0P: MOV TL0,#0B0H
DJNZ B,LOOP2
CLR TR0
LOOP2: RETI
END
这是我的代码,为什么起不到延时的作用 展开
3个回答
展开全部
;用汇编代码设计程序,完成8个LED灯的循环闪烁:
;LED1亮,其余灭->LED2亮,其余灭……,如此循环5次后,
;进行全灭->全亮闪烁,时间间隔为500ms用p0口控制
下列程序已经测试通过
;----------------------
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0_INT
MAIN:
SETB TR0 ;T0定时方式0
MOV SP, #60H
MOV IE, #82H
MOV B, #61 ;定时500ms,500 000 / 8192 = 61
;-----------------------
MOV A, #127
MOV R1, #40
LP0:MOV P0, A
JBC F0, $ + 5
SJMP $ - 3
RR A
DJNZ R1, LP0
;-----------------------
CLR A
LP1:MOV P0, A
JBC F0, $ + 5
SJMP $ - 3
CPL A
LJMP LP1
;-----------------------
T0_INT: ;自动重新装入0
DJNZ B, T0_END
MOV B, #61
SETB F0
T0_END:
RETI
;-----------------------
END
;LED1亮,其余灭->LED2亮,其余灭……,如此循环5次后,
;进行全灭->全亮闪烁,时间间隔为500ms用p0口控制
下列程序已经测试通过
;----------------------
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0_INT
MAIN:
SETB TR0 ;T0定时方式0
MOV SP, #60H
MOV IE, #82H
MOV B, #61 ;定时500ms,500 000 / 8192 = 61
;-----------------------
MOV A, #127
MOV R1, #40
LP0:MOV P0, A
JBC F0, $ + 5
SJMP $ - 3
RR A
DJNZ R1, LP0
;-----------------------
CLR A
LP1:MOV P0, A
JBC F0, $ + 5
SJMP $ - 3
CPL A
LJMP LP1
;-----------------------
T0_INT: ;自动重新装入0
DJNZ B, T0_END
MOV B, #61
SETB F0
T0_END:
RETI
;-----------------------
END
展开全部
你在定时中断里执行了CLR TR0,把定时器停下了,一次中断后,不会再有中断了
更多追问追答
追问
如何更改呀,如何反复调用定时器延时程序,再跳转至主程序中执行 SETB TR0
为何定时器没有再次启动
追答
可以把这条指令删了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询