打印

求汇编高手看看交通灯的程序,帮我改正。。。。。。

[复制链接]
4284|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
泗一起|  楼主 | 2013-4-25 20:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 泗一起 于 2013-4-25 21:02 编辑

AGO EQU 30H
AGD EQU 31H
BRD EQU 32H
BGO EQU 33H
ARD EQU 34H
BGD EQU 35H
GF EQU 36H
YF EQU 37H
YD EQU 38H
RF EQU 39H
INI EQU 40H

WAITO BIT 41H
URGENCYO BIT 42H
ADSU BIT 43H
CTRL BIT P3.6
SPK BIT P3.7

ORG        0000H
        LJMP START
ORG 0003H
        LJMP INTT0                        ;转向紧急车辆中服程序
ORG 0013H
        LJMP INTT1

;*******************************************************************************
;*                                                                                主程序
;*******************************************************************************

ORG        0100H
START:        MOV AGO,#52                                        ;初始化数据
                MOV BGO,#32
                MOV GF,#3
                MOV YF,#5
                MOV RF,#5
                MOV YD,#4
                LCALL INI_DATA                                ;数据处理

                MOV SP,#40H
                MOV IE,#83H                                        ;使能INT0,INT1
                MOV TCON,#01H
                MOV TCON,#05H                                ;INT0,INT1下降沿触发
                MOV IP,#01H                                        ;中断0优先
               
                MOV R1,#6                                        ;初始化检测 交通灯闪烁,数码管显示8并闪烁
M1:                MOV P0,#0FFH        
            MOV P1,#0FFH
            MOV P2,#0F0H
            LCALL DELAY
            LCALL DELAY
            MOV P0,#00H
            MOV P2,#0FH
            LCALL DELAY
            LCALL DELAY
            DJNZ R1,M1
            
MAIN:        
               
                LCALL STATE1                                ;状态0,A道绿灯亮(AGO)s 闪烁(AGF)s
                                                                        ;                B道红灯亮(AR0)s
                                                                        
                LCALL STATE2                                ;状态1,A道黄灯闪烁(AY)s
                                                                        ;                B道红灯闪烁(ARF)s
                                                                        
                LCALL STATE3                                ;状态2,A道红灯亮(ARO)s
                                                                        ;                B道绿灯亮(AGO)s 闪烁(AGF)s
                                                                        
                LCALL STATE4                                ;状态3,A道红灯闪烁(ARF)s
                                                                        ;                B道黄灯闪烁(AY)s
                AJMP MAIN

;状态1        A道绿灯通行,B道红灯禁止
STATE1:        MOV        P0,#0CCH                                ;(1100 1100)B  A道绿灯,B道红灯
                ORL P2,#0F0H                                ;人行道灯关
                ANL P2,#6FH                                        ;(0110 1111)B  人行道灯显示
                MOV        R0,AGO                                        ;A道绿灯亮 52s
                MOV R1,AGD                                        ;A道数码管倒计时55s
                MOV R2,BRD                                        ;B道数码管倒计时60s
ST1:        LCALL DIS1S                                        ;A、B道数码管分别显示
                ACALL DE
                DJNZ R0,ST1                                        ;52s未到 循环
               
                MOV        R0,GF                                        ;A道绿灯闪烁3s
FLASH1:        CPL P0.2                                       
              LCALL DIS
              CPL P0.2
              LCALL DIS
              ACALL DE
              DJNZ R0,FLASH1                                ;3s未到 循环
              RET
              
;状态2         A道黄灯提醒,B道红灯禁止            
STATE2:        MOV P0,#0CAH                                ;(1100 1010)B  A道黄灯,B道红灯
                MOV        R0,YF                                        ;闪烁定时 5s
                MOV R1,YD                                        ;A道数码管倒计时5s,B道数码管继续计时
FLASH2:        CPL P0.1                                        ;A道黄灯闪烁
                CPL P0.3                                        ;B道红灯闪烁
                CPL P2.5                                        ;A道人行道绿灯闪烁
                CPL P2.6                                        ;B道人行道红灯闪烁
                LCALL DIS                                        ;数码管显示(0.5s)
                CPL P0.1
                CPL P0.3
                CPL P2.5
                CPL P2.6
                LCALL DIS
                ACALL DE                                        ;减一
                DJNZ R0,FLASH2                                ;5s未到 循环
                RET
               
;状态3        A道红灯禁止,B道绿灯亮通行
STATE3:        MOV P0,#0E1H                                ;(1110 0001)B  A道红灯,B道绿灯
                ORL P2,#0F0H                                ;(1111 0000)B  人行道灯关
                ANL P2,#9FH                                        ;(1001 1111)B  人行道灯显示
                MOV R0,BGO                                        ;B道绿灯亮 32s
                MOV R1,ARD                                        ;A道数码管倒计时40s
                MOV R2,BGD                                        ;B道数码管倒计时45s
ST2:        LCALL DIS1S                                        ;数码管显示(1s)
                LCALL DE
                DJNZ R0,ST2                                        ;32s未到 循环
               
                MOV R0,GF                                        ;B道绿灯闪烁3s
FLASH3:        CPL P0.5                                       
                LCALL DIS                                        ;数码管显示(0.5s)
                CPL P0.5
                LCALL DIS
                LCALL DE
                DJNZ R0,FLASH3                                ;3s未到 循环
                RET
              
;状态4        A道红灯禁止,B道黄灯提醒
STATE4:        MOV P0,#0D1H                                ;(1101 0001)B  A道红灯,B道黄灯
                MOV R0,YF                                       
                MOV R2,YD                                        ;B道数码管倒计时5s,A道数码管继续倒计时
FLASH4:        CPL P0.0
                CPL P0.4
                CPL P2.4
                CPL P2.7
                LCALL DIS
                CPL P0.0
                CPL P0.4
                CPL P2.4
                CPL P2.7
                LCALL DIS
                LCALL DE
                DJNZ R0,FLASH4
                RET

;*******************************************************************************
;*                                                                                初始化程序
;*******************************************************************************
INI_DATA:
                MOV A,AGO                        
                SWAP A
                ANL A,#0FH
                MOV INI,A
                MOV A,AGO
INI_DATA1:
                ADD A,#6
                DA A
                DJNZ INI,INI_DATA1        ;将#AGO转换为16进制数
                ADD A,#2
                DA A
                MOV AGD,A                        ;A路数码管显示数字
                ADD A,#5
                DA A
                MOV BRD,A                        ;B路数码管显示数字
               
                MOV A,BGO                        ;
                SWAP A
                ANL A,#0FH
                MOV INI,A
                MOV A,BGO
INI_DATA2:               
                ADD A,#6
                DA A
                DJNZ INI,INI_DATA2        ;将#BGO转换为16进制数
                ADD A,#2
                DA A
                MOV BGD,A                        ;B路数码管显示数字
                ADD A,#5
                DA A
                MOV ARD,A                        ;A路数码管显示数字

                RET

;*******************************************************************************
;*                                                                                延时程序
;*******************************************************************************

DY1MS:        MOV        R6, #02H                                ;1ms延时程序
DL1:        MOV        R7, #0FAH
DL2:        DJNZ R7, DL2
                DJNZ R6, DL1
                RET
               
DELAY:        MOV R5,#250                                        ;0.5s延时程序
DL3:        ACALL DY1MS
                ACALL DY1MS
                DJNZ R5,DL3
                RET
                                
;*******************************************************************************
;*                                                                        减法调整程序
;*******************************************************************************
                                                                        ;R1=R1-1
                                                                        ;R2=R2-1
DE:                CLR C                                                
                MOV A,#9AH
                DEC A
                ADD A,R1
                DA A
                MOV R1,A

                CLR C
                MOV A,#9AH
                DEC A
                ADD A,R2
                DA A
                MOV R2,A
               
                RET
               
;*******************************************************************************
;*                                                                                显示程序
;*******************************************************************************
               
DIS:        MOV R3,#01H                        ;0.5s为一个周期
                AJMP DIS1                                       
DIS1S:        MOV R3,#2                        ;1s为一个周期
               
DIS1:        MOV R4,#125
DIS2:        ACALL DISPLAY
                DJNZ R4,DIS2
                DJNZ R3,DIS1
                RET

DISPLAY:
                MOV        A,R1                        
                ANL A,#0FH                        
                CLR P2.0                        ;P2.0选通A道的低位
                ACALL LED                        ;显示
                SETB P2.0
                MOV A,R1                        
                SWAP A                                
                ANL A,#0FH                        
                CLR P2.1                        ;P2.1选通A道高位
                ACALL LED                        ;显示
                SETB P2.1
               
                MOV        A,R2                        
                ANL A,#0FH                        
                CLR P2.2                        ;P2.2选通B道的低位
                ACALL LED                        ;显示
                SETB P2.2
                MOV A,R2                        
                SWAP A                                
                ANL A,#0FH                        
                CLR P2.3                        ;P2.3选通B道高位
                ACALL LED                        ;显示
                SETB P2.3
                RET
               
LED:        MOV        DPTR,#TABLE
                MOVC A,@A+DPTR
                MOV        P1,A                        ;P1口输出到数码管显示
                ACALL DY1MS
                RET

;*******************************************************************************
;*                                                                        中服程序
;*******************************************************************************


INTT0:        CLR EA                                ;关中断
                PUSH ACC                        ;P0口数据压栈保护
                PUSH PSW        
                SETB EA
                JNB P3.0,CONTROL                ;控制
                JNB P3.1,ADDSUBB1        ;
                AJMP EXIT1
               
CONTROL:
                CPL CTRL
                AJMP EXIT1
ADDSUBB1:
                CPL ADSU
               
EXIT1:        CLR EA
                POP PSW                        ;退栈 恢复现场
                POP ACC
                SETB EA
                RETI                        ;返回主程序
                           
                           
INTT1:        CLR EA                                ;关中断
                PUSH ACC                        ;P0口数据压栈保护
                PUSH PSW
                PUSH P0
                PUSH P2        
                SETB EA
               
                JNB CTRL,ADDSUBB2
                JNB P3.4,WAI
                JNB P3.5,URG
                AJMP EXIT2
               
ADDSUBB2:
                JNB P3.4,ADSU1
                JNB ADSU,ADD5S
                LCALL BAD5S
                AJMP EXIT2
ADD5S:        LCALL AAD5S               
                AJMP EXIT2
ADSU1:        JNB ADSU,SUBB5S
                LCALL BSUB5S
SUBB5S:        LCALL ASUB5S
                AJMP EXIT2
               
WAI:        LCALL WAIT
                AJMP EXIT2
               
URG:        LCALL URGENCY                        
               
EXIT2:        CLR EA
                POP P2
                POP P0
                POP PSW                        ;退栈 恢复现场
                POP ACC
                SETB EA
                RETI                        ;返回主程序
               
BAD5S:        MOV A,BGO
                ADD A,#5
                MOV BGO,A
                LCALL INI_DATA
                LCALL DIS1S
                LCALL DELAY
                LCALL DELAY
                RET
               
AAD5S:        MOV A,AGO
                ADD A,#5
                MOV AGO,A
                LCALL INI_DATA
                LCALL DIS1S
                LCALL DELAY
                LCALL DELAY
                RET

BSUB5S:        MOV A,BGO
                SUBB A,#5
                MOV BGO,A
                LCALL INI_DATA
                LCALL DIS1S
                LCALL DELAY
                LCALL DELAY
                RET
               
ASUB5S:        MOV A,AGO
                SUBB A,#5
                MOV AGO,A
                LCALL INI_DATA
                LCALL DIS1S
                LCALL DELAY
                LCALL DELAY
                RET

WAIT:        MOV P1,#3FH                        ;数码管显示'0'
DEY0:        MOV P0,#12H                        ;A、B道均黄灯 1100 0000
                MOV P2,#50H                        ;0101 0000
                LCALL DELAY
                LCALL DELAY
                MOV P0,#00H
                MOV P2,#0FH                        ;0000 1111
                LCALL DELAY
                LCALL DELAY
                JNB CTRL,RET1
                AJMP DEY0
RET1:        RET
               
URGENCY:
                MOV P1,#7FH                        ;数码管显示'8'
DEY1:        MOV P0,#09H                        ;两路红灯亮
                MOV P2,#50H                        ;0101 0000人行道红灯亮,并显示数码
                ACALL DELAY
                ACALL DELAY
                MOV P0,#00H
                MOV P2,#0FH
                ACALL DELAY
                ACALL DELAY
                JNB CTRL,RET2
                AJMP DEY1
RET2:        RET

TABLE:        DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;0,1,2,3,4,5,6,7,8,9
                END 新建 好压 RAR 压缩文件.rar (25.81 KB)

相关帖子

沙发
wape271| | 2013-4-26 08:05 | 只看该作者
又是汇编呀

使用特权

评论回复
板凳
浅唱246| | 2013-4-26 08:42 | 只看该作者
我有一个交通灯的程序你要不要看看啊

使用特权

评论回复
地板
泗一起|  楼主 | 2013-4-26 11:06 | 只看该作者
浅唱246 发表于 2013-4-26 08:42
我有一个交通灯的程序你要不要看看啊

好啊

使用特权

评论回复
5
NE5532| | 2013-4-26 11:12 | 只看该作者
做作业要靠自己,高手连里想做什么,遇到的问题是什么都不知道,怎么接手啊?网上只能帮你解决确定的一个两个点的问题,你这样全盘扔上来是没人管滴。

使用特权

评论回复
6
lxz117| | 2014-3-15 08:00 | 只看该作者
用的是哪一个芯片啊

使用特权

评论回复
7
lirunze| | 2014-3-15 10:22 | 只看该作者
2014了,还用汇编啊!

使用特权

评论回复
8
yixiao2000| | 2014-3-15 10:49 | 只看该作者
太长了,还是汇编,看不下去

使用特权

评论回复
9
很忙| | 2014-3-15 11:16 | 只看该作者
NE5532 发表于 2013-4-26 11:12
做作业要靠自己,高手连里想做什么,遇到的问题是什么都不知道,怎么接手啊?网上只能帮你解决确定的一个两 ...

同意斑竹看法。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

38

帖子

0

粉丝