⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xc.asm

📁 实现交通灯功能的汇编程序.
💻 ASM
字号:
BUSCZG DATA 22H   ;倒计时初值个位寄存器
BUSCZS DATA 23H   ;倒计时初值十位寄存器
BUSG   DATA 20H   ;LED显示个位缓冲器
BUSS   DATA 21H   ;LED显示十位缓冲器
JCW    DATA 25H   ;定义标志寄存器
JCW1   BIT  JCW.0 ;判断修改后的初值是否小于20S自检标志位,小于则赋20S给缓冲器
ADDH   EQU  00H   ;将修改后倒计初值送显示缓冲器程序高八位地址
ADDL   EQU  80H   ;将修改后倒计初值送显示缓冲器程序低八位地址
STAT1  EQU  0F3H  ;状态1红绿灯值
STAT2  EQU  0F5H  ;状态2红绿灯值
STAT3  EQU  0EDH  ;状态3红绿灯值
STAT4  EQU  0DEH  ;状态4红绿灯值
STAT5  EQU  0EEH  ;状态5红绿灯值
STAT6  EQU  0EDH  ;状态6红绿灯值
GWWX   EQU  0F5H  ;个位位选
SWWX   EQU  0FAH   ;十位位选
BDDH   EQU  00H   ;当修改后的初值少于20S,将修改后倒计初值送显示缓冲器程序高八位地址
BDDL   EQU  92H   ;当修改后的初值少于20S,将修改后倒计初值送显示缓冲器程序低八位地址
ORG 000H
JMP START
ORG 03H
JMP JPZDCX
ORG 0BH
JMP TIM0
ORG 0012H
START:  MOV TMOD,#01H
        MOV TH0,#0BDH
        MOV TL0,#0C0H
        MOV IE,#82H
        MOV SP,#60H
        MOV R0,#0
        MOV R1,#0FFH
        MOV R2,#255
        MOV R3,#0FFH
        MOV R4,#90H
        MOV R5,#3
        CLR JCW1
        CLR F0
        LCALL ZJ
        ;检查红灯倒记时处值是否被修改,否则赋初值为60s
        SETB EX0
START1: JB JCW1,GO0
        JB F0,GO1
        MOV BUSG,#06
        MOV BUSS,#04
        JMP GO2
        ORG  0080H
GO1:    CLR A
        MOV A,BUSCZG
        MOV BUSG,A
        MOV A,BUSCZS
        MOV BUSS,A
        JMP GO2
        ORG 0092H
GO0:    MOV BUSCZG,#01
        MOV BUSG,BUSCZG
        MOV BUSCZS,#03
        MOV BUSS,BUSCZS
GO2:    MOV R7,#16
        CLR TR0
        LCALL A1   ;程序一开始显示倒数初值
        SETB TR0
        LCALL A0   ;首先为南北通(A)为绿灯,东西(B)止为红灯
        LCALL A3    ;A绿灯闪烁3S ,B为红灯
        LCALL A4    ;亮A黄灯3S,B仍为红灯
        LCALL A5    ;B通绿灯,A止红灯
        LCALL A6    ;B绿灯闪烁3S ,A仍为红灯
        LCALL A7    ;B亮黄灯3S  ,A仍为红灯
        LCALL JPZDCX
        JMP START1



     ;硬件自检程序过程子程序
ZJ:     MOV BUSG,R0
        MOV BUSS,R0
        MOV P0,#00H
        LCALL A1
        DJNZ R3,ZJ
        MOV R3,#0FFH
        INC R0
        MOV A,R0
        CJNE A,#11 ,ZJ
        MOV R0,#00H
        CLR A
        NOP
        NOP
        RET


        ;状态1
        ;首先为南北通(A)为绿灯
        ;东西(B)止为红灯
A0:     MOV P0,#STAT1
        LCALL A1
        MOV A,#07
        CJNE A,BUSG,A0
        MOV A,#01
        CJNE A,BUSS,A0
        NOP
        NOP
        RET


        ;状态2
        ;A绿灯闪烁3S ,B仍为红灯
A3:     MOV P0,#STAT2
        LCALL A1
        DJNZ R1,A3
        MOV R1,#0FFH
A31:    MOV P0,#STAT1
        LCALL A1
        DJNZ R1,A31
        MOV R1,#0FFH
        MOV A,#04
        CJNE A,BUSG,A3
        NOP
        NOP
        RET

        ;状态3
        ;亮A黄灯3S,B仍为红灯
A4:     MOV P0,#STAT3
        LCALL A1
        MOV A,#01
        CJNE A,BUSG,A4
        NOP
        NOP
        RET


        ;状态4
        ;B通绿灯,A止红灯
A5:     MOV P0,#STAT4
        LCALL A1
        MOV A,#07
        CJNE A,BUSG,A5
        MOV A,#01
        CJNE A,BUSS,A5
        NOP
        NOP
        RET


        ;状态5
        ;B绿灯闪烁3S ,A仍为红灯
A6:     MOV P0,#STAT5
        LCALL A1
        DJNZ R1,A6
        MOV R1,#0FFH
A61:    MOV P0,#STAT4
        LCALL A1
        DJNZ R1,A61
        MOV R1,#0FFH
        MOV A,#04
        CJNE A,BUSG,A6
        NOP
        NOP
        RET


        ;状态6
       ;B亮黄灯3S  ,A仍为红灯
A7:     MOV P0,#STAT6
        LCALL A1
        MOV A,#01
        CJNE A,BUSG,A7
        NOP
        NOP
        RET


        ;显示子程序
        ;其中A1为供主循环程序显示用
A1:     MOV A,BUSG
        MOV DPTR,#TABLE
        MOVC A,@A+DPTR
        MOV DPTR,#DM
        MOVC A,@A+DPTR
        MOV P3,#GWWX
        MOV P1,A
        LCALL DELAY
        ORL P3,#0FFH
        MOV A,BUSS
        MOV DPTR,#TABLE
        MOVC A,@A+DPTR
        MOV DPTR,#DM
        MOVC A,@A+DPTR
        MOV P3,#SWWX
        MOV P1,A
        LCALL DELAY
        MOV P3,#0FFH
        NOP
        NOP
        RET
        ;以下的A10和A11供初值修改显示用
A10:    ORL P3,#0FFH
        MOV A,BUSG
        MOV DPTR,#TABLE
        MOVC A,@A+DPTR
        MOV DPTR,#DM
        MOVC A,@A+DPTR
        MOV P3,#GWWX
        MOV P1,A
        LCALL DELAY
        ORL P3,#0FFH
        NOP
        NOP
        RET
A11:    ORL P3,#0FFH
        MOV A,BUSS
        MOV DPTR,#TABLE
        MOVC A,@A+DPTR
        MOV DPTR,#DM
        MOVC A,@A+DPTR
        MOV P3,#SWWX
        MOV P1,A
        LCALL DELAY
        ORL P3,#0FFH
        NOP
        NOP
        RET


        ;定时中断0子程序
        ;此程序段完成倒计减一
TIM0:   DJNZ R7,A2
        MOV TH0,#0BDH
        MOV TL0,#0C0H
        MOV R7,#16
        DJNZ BUSG,A2
        MOV BUSG,#10
        DJNZ BUSS,A2
        JNB F0 ,BGCZ
        MOV A,BUSCZG
        MOV BUSG,A
        MOV A,BUSCZS
        MOV BUSS,A
        JMP A2
BGCZ:   MOV BUSG,#06
        MOV BUSS,#04
        NOP
        NOP
A2:     RETI


        ;外部中断0,键盘程序段
        ;其用于修改倒计时的初值
JPZDCX: CLR EX0
        SETB F0
        SETB F0
        MOV P3,#0FFH
        MOV P0,#0FFH
        MOV BUSG,#01
        MOV BUSS,#01
KEY1:   JB P2.0,KEY2
        MOV P0,#0F6H
K1:     LCALL DELAY
        LCALL A10
        DJNZ R2,K1
        MOV R2,#255
        INC 20H
        MOV A,BUSG
        MOV BUSCZG,A
        MOV A,BUSG
        CJNE A,#11,KEY10
        MOV BUSG,#01
KEY10:  LCALL A10
        LCALL DELAY
        DJNZ R2,KEY10
        MOV R2,#255
        JB P2.0,KEY2
        INC 20H
        MOV A,BUSG
        MOV BUSCZG,A
        MOV A,BUSG
        CJNE A,#11,K10
        MOV BUSG,#01
K10:    LCALL A10
        JMP KEY10
KEY2:   JB P2.1,KEY3
        MOV P0,#0FFH
        MOV P0,#0DBH
K2:     LCALL DELAY
        LCALL A11
        DJNZ R2,K2
        MOV R2,#255
        INC 21H
        MOV A,BUSS
        MOV BUSCZS,A
        MOV A,BUSS
        CJNE A,#11,KEY20
        MOV BUSS,#01
KEY20:  LCALL A11
        LCALL DELAY
        DJNZ R2,KEY20
        MOV R2,#255
        JB P2.1,KEY3
        INC 21H
        MOV A,BUSS
        MOV BUSCZS,A
        MOV A,BUSS
        CJNE A,#11,K20
        MOV BUSS,#01
K20:    LCALL A11
        JMP KEY20
KEY3:   JNB P2.2,K3
        MOV P0,#0FFH
        MOV P0,#00H
        JMP KEY1          ;RETI
K3:     LCALL A1
        DJNZ R2,K3
        MOV R2,#255
        MOV A,BUSG
        MOV BUSCZG,A
        MOV BUSCZG,A
        MOV A,BUSS
        MOV BUSCZS,A
        MOV BUSCZS,A
        SETB EX0
        SETB F0
        SETB F0
        CLR C
        ANL A,#0FH
        SUBB A,#03H
        JB CY,TD
        NOP
        NOP
        PUSH ADDL
        PUSH ADDH
        RETI
TD:     SETB JCW1
        NOP
        NOP
        PUSH BDDL
        PUSH BDDH
        RETI
        
        ;延时0.5ms子程序
DELAY:  MOV R6,#248
        DJNZ R6,$
        NOP
        NOP
        RET

       ;减一数码查询表
TABLE:  DB 00H,00H,01H,02H,03H,04H
        DB 05H,06H,07H,08H,09H

       ;显示段码查询表
DM:     DB 03FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,67H
       END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -