单片机流水灯闪烁问题!急急急!

2024-12-02 16:14:17
推荐回答(3个)
回答(1):

ORG 0000H

         LJMP MAIN

         ORG 000BH

         T0MS    EQU  NOT 50000    ; 50 mS 晶振 12.000 MHz

         PJSBZ   EQU  20H

         PJSBZY  EQU  21H

PST0:    MOV     TL0, #LOW T0MS    ; T0 中断

         MOV     TH0, #HIGH T0MS

         SETB    PJSBZ             ; 50 mS 标志

         DJNZ    R6, PST02

         MOV     R6, #40           ; 50 mS * 40 = 2 S

         SETB    PJSBZY            ; 2 S  标志

PST02:   RETI

        

MAIN:    MOV     TMOD, #01H

         MOV     IE, #82H          ; 开 T0 中断

         MOV     SP, #30H

         MOV     TL0, #LOW T0MS    ; TO 50MS 中断 计时 0

         MOV     TH0, #HIGH T0MS

         SETB    TR0

         MOV     R6, #40           ; 计时初值

MAIN1:   MOV     A, #7FH

MAIN2:   JNB     PJSBZ, $          ; 50 mS

         CLR     PJSBZ

         RR      A                           ; 顺流

         MOV     P1, A

         JNB     PJSBZY, MAIN2     ; 2 S

         CLR     PJSBZY

MAIN3:   JNB     PJSBZ, $          ; 50 mS

         CLR     PJSBZ

         RL      A                            ; 逆流

         MOV     P1, A

         JNB     PJSBZY, MAIN3      ; 2 S

         CLR     PJSBZY

         AJMP    MAIN1

         END

回答(2):

又要用定时器,又要用延时程序,这不是...
----
其实,只用一个定时器,就都可以解决。

;假设在 P0 口外接 8 个 LED,输出低电平时发光。
;下面程序,已经通过了实验,符合题目的流水灯闪烁要求.

ORG 0000H
LJMP START
ORG 000BH
MOV TH0, #4CH ;50ms@11.0592MHz
CPL F0
JNB F0, EXIT_T0 ;不到100ms就退出.
XRL P0, A ;每100ms,有一个LED亮/灭一次.
DJNZ R6, EXIT_T0
MOV R6, #20
RL A
EXIT_T0:
RETI

START:
MOV TMOD, #01H ;T0定时方式1
MOV TH0, #4CH ;50ms@11.0592MHz
MOV IE, #82H ;开T0中断.
MOV R6, #20
MOV A, #1
SETB TR0
SJMP $

END

回答(3):

ncccccvnh