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

📄 trafficlight.lst

📁 51单片机应用开发实例之交通灯的控制的实例。
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  TRAFFICLIGHT                                                         06/23/2007 09:47:05 PAGE     1


MACRO ASSEMBLER A51 V7.10
OBJECT MODULE PLACED IN trafficlight.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE trafficlight.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     ;-----------------------------------
                       2     ;                   交通灯控制器实例
                       3     ;功能:使用6只LED模拟交通灯控制器
                       4     ;-----------------------------------
  0090                 5     SOUTH_RED                       EQU             P1.0
  0091                 6     SOUTH_YELLOW            EQU             P1.1
  0092                 7     SOUTH_GREEN             EQU             P1.2
  0093                 8     EAST_RED                        EQU             P1.3
  0094                 9     EAST_YELLOW             EQU             P1.4
  0095                10     EAST_GREEN                      EQU             P1.5
  0000                11     SECOND_FLAG             BIT             00H
  0030                12     TIME_COUNT0             DATA    30H
  0031                13     TIME_COUNT1             DATA    31H
  0032                14     STATUS_FLAG             DATA    32H
  0033                15     SECOND_COUNT            DATA    33H
                      16     
0000                  17     ORG     0000H                           ;伪指令,指定程序从0000H开始存放
0000 020100           18     LJMP    MAIN                            ;跳转指令,程序跳转到MAIN处
000B                  19     ORG     000BH                           ;伪指令,指定程序从T0入口地址000BH开始存放
000B 0201B4           20     LJMP    T0_INT                          ;跳转指令,程序跳转到T0_INT处
                      21     
0100                  22     ORG     0100H
0100                  23     MAIN:
0100 758160           24             MOV     SP,#60H                 ;给堆栈指针赋初值
0103 120199           25             LCALL   INIT                            ;调用状态初始化子程序
0106 1201C3           26             LCALL   T0_INIT                 ;调用定时器中断初始化子程序
0109                  27     LOOP:
0109 3000FD           28             JNB             SECOND_FLAG,LOOP        ;根据SECOND_FLAG值判断0.5秒是否到
010C 120113           29             LCALL   STATUS_CHANGE           ;每0.5秒调用交通灯状态转换子程序
010F C200             30             CLR             SECOND_FLAG             ;清零SECOND_FLAG
0111 80F6             31             SJMP    LOOP                            ;跳转,程序继续
                      32     
0113                  33     STATUS_CHANGE:
                      34     ;---------------------------------
                      35     ;     交通灯状态转换子程序
                      36     ;---------------------------------
0113 E532             37             MOV     A,STATUS_FLAG           ;根据STATUS_FLAG值进行散转
0115 2532             38             ADD             A,STATUS_FLAG
0117 90011B           39             MOV     DPTR,#STATUS_PROC_TABLE
011A 73               40             JMP             @A+DPTR
011B                  41     STATUS_PROC_TABLE:
011B 2127             42             AJMP    STATUS1
011D 2131             43             AJMP    STATUS2
011F 214A             44             AJMP    STATUS3
0121 2160             45             AJMP    STATUS4
0123 216A             46             AJMP    STATUS5
0125 2183             47             AJMP    STATUS6
                      48     
0127                  49     STATUS1:
                      50     ;---------------------------------
                      51     ;     散转子程序1
                      52     ;状态1:南北绿灯,东西红灯,持续20秒
                      53     ;然后转到状态2
                      54     ;---------------------------------
0127 D53306           55             DJNZ    SECOND_COUNT,STATUS1_EXIT
012A 753306           56             MOV     SECOND_COUNT,#6         ;20秒定时到,转换到状态2
012D 753201           57             MOV     STATUS_FLAG,#01H
0130                  58     STATUS1_EXIT:
A51 MACRO ASSEMBLER  TRAFFICLIGHT                                                         06/23/2007 09:47:05 PAGE     2

0130 22               59             RET
                      60     
0131                  61     STATUS2:
                      62     ;---------------------------------
                      63     ;     散转子程序2
                      64     ;状态2:南北绿灯闪,东西红灯,持续3秒
                      65     ;然后转到状态3
                      66     ;---------------------------------
0131 D53313           67             DJNZ    SECOND_COUNT,STATUS2_EXIT
0134 753304           68             MOV     SECOND_COUNT,#4         ;3秒定时到,转换到状态3
0137 753202           69             MOV     STATUS_FLAG,#02H
013A D290             70             SETB    SOUTH_RED                       ;南北红灯灭
013C C291             71             CLR             SOUTH_YELLOW            ;南北黄灯亮
013E D292             72             SETB    SOUTH_GREEN             ;南北绿灯灭
0140 C293             73             CLR             EAST_RED                        ;东西红灯亮
0142 D294             74             SETB    EAST_YELLOW             ;东西黄灯灭
0144 D295             75             SETB    EAST_GREEN                      ;东西绿灯灭
0146 22               76             RET
0147                  77     STATUS2_EXIT:
0147 B292             78             CPL             SOUTH_GREEN             ;南北绿灯闪
0149 22               79             RET
                      80     
014A                  81     STATUS3:
                      82     ;---------------------------------
                      83     ;     散转子程序3
                      84     ;状态3:南北黄灯,东西红灯 ,持续2秒
                      85     ;然后转到状态4
                      86     ;---------------------------------
014A D53312           87             DJNZ    SECOND_COUNT,STATUS3_EXIT
014D 753328           88             MOV     SECOND_COUNT,#40        ;2秒定时到,转换到状态4
0150 753203           89             MOV     STATUS_FLAG,#03H
0153 C290             90             CLR             SOUTH_RED                       ;南北红灯亮
0155 D291             91             SETB    SOUTH_YELLOW            ;南北黄灯灭
0157 D292             92             SETB    SOUTH_GREEN             ;南北绿灯灭
0159 D293             93             SETB    EAST_RED                        ;东西红灯灭
015B D294             94             SETB    EAST_YELLOW             ;东西黄灯灭
015D C295             95             CLR             EAST_GREEN                      ;东西绿灯亮
015F                  96     STATUS3_EXIT: 
015F 22               97             RET
                      98     
0160                  99     STATUS4:
                     100     ;---------------------------------
                     101     ;     散转子程序4
                     102     ;状态4:南北红灯,东西绿灯,持续20秒
                     103     ;然后转到状态5
                     104     ;---------------------------------                        
0160 D53306          105             DJNZ    SECOND_COUNT,STATUS4_EXIT
0163 753306          106             MOV     SECOND_COUNT,#6         ;20秒定时到,转换到状态5
0166 753204          107             MOV     STATUS_FLAG,#04H
0169                 108     STATUS4_EXIT:
0169 22              109             RET
                     110     
016A                 111     STATUS5:
                     112     ;---------------------------------
                     113     ;     散转子程序5
                     114     ;状态5:南北红灯,东西绿灯闪,持续3秒
                     115     ;然后转到状态6
                     116     ;---------------------------------
016A D53313          117             DJNZ    SECOND_COUNT,STATUS5_EXIT
016D 753304          118             MOV     SECOND_COUNT,#4         ;3秒定时到,转换到状态6
0170 753205          119             MOV     STATUS_FLAG,#05H

⌨️ 快捷键说明

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