?? trafficlight.lst
字號:
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 + -