📄 交通灯设计.lst
字号:
A51 MACRO ASSEMBLER 交蚠灯蒧计 04/06/2009 15:45:00 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN 交通灯设计.OBJ
ASSEMBLER INVOKED BY: D:\C51\BIN\A51.EXE 交通灯设计.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
0000 1 ORG 0000H ;主程序的入口地址
0000 020013 2 LJMP MAIN ;跳转到主程序的开始处
0003 3 ORG 0003H ;外部中断0的中断程序入口地址
000B 4 ORG 000BH ;定时器0的中断程序入口地址
000B 0200BE 5 LJMP T0_INT ;跳转到中断服务程序处
0013 6 ORG 0013H ;外部中断1的中断程序入口地址
0013 758150 7 MAIN : MOV SP,#50H
0016 75A88E 8 MOV IE,#8EH ;CPU开中断,允许T0中断,T1中断和外部中断1中断
0019 758951 9 MOV TMOD,#51H ;设置T1为计数方式,T0为定时方式,且都工作于模式1
001C 758D00 10 MOV TH1,#00H ;T1计数器清零
001F 758B00 11 MOV TL1,#00H
0022 D28E 12 SETB TR1 ;启动T1计时器
0024 D2AA 13 SETB EX1 ;允许INT1中断
0026 D28A 14 SETB IT1 ;选择边沿触发方式
0028 900003 15 MOV DPTR ,#0003H
002B 7480 16 MOV A, #80H ;给8255赋初值,8255工作于方式0
002D F0 17 MOVX @DPTR, A
002E 20B121 18 AGAIN: JB P3.1,N0 ;判断是否要设定东西方向红绿灯时间的初值,若P3.1为1 则跳转
0031 E590 19 MOV A,P1
0033 20970C 20 JB P1.7,RED ;判断P1.7是否为1,若为1则设定红灯时间,否则设定绿灯时间
0036 7800 21 MOV R0,#00H ;R0清零
0038 F8 22 MOV R0,A ;存入东西方向绿灯初始时间
0039 FB 23 MOV R3,A
003A 1200D3 24 LCALL DISP1
003D 120141 25 LCALL DELAY
0040 012E 26 AJMP AGAIN
0042 E590 27 RED: MOV A,P1
0044 547F 28 ANL A,#7FH ;P1.7置0
0046 7F00 29 MOV R7,#00H ;R7清零
0048 FF 30 MOV R7,A ;存入东西方向红灯初始时间
0049 FB 31 MOV R3,A
004A 1200D3 32 LCALL DISP1
004D 120141 33 LCALL DELAY
0050 012E 34 AJMP AGAIN
35 ;-------------------------------------------
0052 D28C 36 N0: SETB TR0 ;启动T0计时器
0054 8F76 37 MOV 76H,R7 ;红灯时间存入76H
0056 E576 38 N00: MOV A,76H ;东西方向禁止,南北方向通行
0058 FB 39 MOV R3,A
0059 900000 40 MOV DPTR,#0000H ;置8255A口,东西方向红灯亮,南北方向绿灯亮
005C 74DD 41 MOV A,#0DDH
005E F0 42 MOVX @DPTR, A
005F 20A04F 43 N01: JB P2.0,B0
0062 D2B0 44 N02: SETB P3.0
0064 BB00F8 45 CJNE R3,#00H,N01 ;比较R3中的值是否为0,不为0转到当前指令处执行
46 ;------黄灯闪烁5秒程序------
0067 D2B0 47 N1: SETB P3.0
0069 7B05 48 MOV R3,#05H
006B 900000 49 MOV DPTR,#0000H ;置8255A口,东西,南北方向黄灯亮
006E 74D4 50 MOV A,#0D4H
0070 F0 51 MOVX @DPTR,A
0071 7C00 52 N11: MOV R4,#00H
0073 BC7DFD 53 N12: CJNE R4,#7DH,$ ;黄灯持续亮0.5秒
0076 900000 54 N13: MOV DPTR,#0000H ; 置8255A口,南北方向黄灯灭
0079 74DD 55 MOV A,#0DDH
007B F0 56 MOVX @DPTR,A
007C 7C00 57 N14: MOV R4,#00H
007E BC7DFD 58 CJNE R4,#7DH,$ ;黄灯持续灭0.5秒
A51 MACRO ASSEMBLER 交蚠灯蒧计 04/06/2009 15:45:00 PAGE 2
0081 BB00E3 59 CJNE R3,#00H,N1 ;闪烁时间达5秒则退出
60 ;------------------------------------------------------------
0084 7F00 61 N2: MOV R7,#00H
0086 E8 62 MOV A,R0 ;东西通行,南北禁止
0087 FB 63 MOV R3,A
0088 900000 64 MOV DPTR,#0000H ; 置8255A口,东西方向绿灯亮,南北方向红灯亮
008B 74EB 65 MOV A,#0EBH
008D F0 66 MOVX @DPTR,A
008E 20A070 67 N21: JB P2.0,T03
68
0091 BB00FA 69 N22: CJNE R3,#00H,N21
70 ;------黄灯闪烁5秒程序------
0094 7B05 71 N3: MOV R3,#05H
0096 900000 72 MOV DPTR,#0000H ;置8255A口,东西,南北方向黄灯亮
0099 74E2 73 MOV A,#0E2H
009B F0 74 MOVX @DPTR,A
009C 7C00 75 N31: MOV R4,#00H
009E BC7DFD 76 CJNE R4,#7DH,$ ;黄灯持续亮0.5秒
00A1 900000 77 N32: MOV DPTR,#0000H ; 置8255A口,南北方向黄灯灭
00A4 74EB 78 MOV A,#0EBH
00A6 F0 79 MOVX @DPTR,A
00A7 7C00 80 N33: MOV R4,#00H
00A9 BC7DFD 81 CJNE R4,#7DH,$ ;黄灯持续灭0.5秒
00AC BB00E5 82 CJNE R3,#00H,N3 ;闪烁时间达5秒则退出
00AF 80A5 83 SJMP N00
84 ;------闯红灯报警程序------
00B1 7A03 85 B0: MOV R2,#03H ;报警持续时间3秒
00B3 EB 86 B01: MOV A,R3
00B4 60B1 87 JZ N1 ;若倒计时完毕,不再报警
00B6 C2B0 88 CLR P3.0 ;报警
00B8 BA00F8 89 CJNE R2,#00H,B01 ;判断3秒是否结束
00BB 80A5 90 SJMP N02
91 ;------1秒延时子程序-------
00BD 32 92 N7: RETI
00BE 758A9A 93 T0_INT:MOV TL0,#9AH ;给定时器T0送定时10ms的初值
00C1 758CF1 94 MOV TH0,#0F1H
00C4 0C 95 INC R4
00C5 0D 96 INC R5
00C6 BDFA04 97 CJNE R5,#0FAH,T01 ;判断延时是否够一秒,不够则调用显示子程序
00C9 7D00 98 MOV R5,#00H ;R5清零
00CB 1B 99 DEC R3 ;倒计时初值减一
00CC 1A 100 DEC R2 ;报警初值减一
00CD 11D0 101 T01: ACALL DISP ;调用显示子程序
00CF 32 102 RETI ;中断返回
103 ;------显示子程序------
00D0 30A43E 104 DISP: JNB P2.4,T02
00D3 75F00A 105 DISP1: MOV B,#0AH
00D6 EB 106 MOV A,R3 ;R3中值二转十显示转换
00D7 84 107 DIV AB
00D8 F579 108 MOV 79H,A
00DA 85F07A 109 MOV 7AH,B
00DD E579 110 DIS: MOV A,79H ;显示十位
00DF 90014B 111 MOV DPTR,#TAB
00E2 93 112 MOVC A,@A+DPTR
00E3 900002 113 MOV DPTR,#0002H
00E6 F0 114 MOVX @DPTR,A
00E7 900001 115 MOV DPTR,#0001H
00EA 74F7 116 MOV A,#0F7H
00EC F0 117 MOVX @DPTR,A
00ED 120141 118 LCALL DELAY
00F0 E57A 119 DS2: MOV A,7AH ;显示个位
00F2 90014B 120 MOV DPTR,#TAB
00F5 93 121 MOVC A,@A+DPTR
00F6 900002 122 MOV DPTR,#0002H
00F9 F0 123 MOVX @DPTR,A
00FA 900001 124 MOV DPTR,#0001H
A51 MACRO ASSEMBLER 交蚠灯蒧计 04/06/2009 15:45:00 PAGE 3
00FD 74FB 125 MOV A,#0FBH
00FF F0 126 MOVX @DPTR,A
0100 22 127 RET
128 ;------东西方向车流量检测程序------
0101 EB 129 T03: MOV A,R3
0102 9400 130 SUBB A,#00H ;若绿灯倒计时完毕,不再检测车流量
0104 608E 131 JZ N3
0106 20A0F8 132 JB P2.0,T03
0109 0F 133 INC R7
010A BF6402 134 CJNE R7,#64H,E1
010D 7F00 135 MOV R7,#00H ;中断到100次则清零
010F 8080 136 E1: SJMP N22
137 ;------东西方向车流量显示程序------
0111 75F00A 138 T02: MOV B,#0AH
0114 EF 139 MOV A,R7 ;R7中值二转十显示转换
0115 84 140 DIV AB
0116 F579 141 MOV 79H,A
0118 85F07A 142 MOV 7AH,B
011B E579 143 DIS3: MOV A,79H ;显示十位
011D 90014B 144 MOV DPTR,#TAB
0120 93 145 MOVC A,@A+DPTR
0121 900002 146 MOV DPTR,#0002H
0124 F0 147 MOVX @DPTR,A
0125 900001 148 MOV DPTR,#0001H
0128 74F7 149 MOV A,#0F7H
012A F0 150 MOVX @DPTR,A
012B 120141 151 LCALL DELAY
012E E57A 152 DS4: MOV A,7AH ;显示个位
0130 90014B 153 MOV DPTR,#TAB
0133 93 154 MOVC A,@A+DPTR
0134 900002 155 MOV DPTR,#0002H
0137 F0 156 MOVX @DPTR,A
0138 900001 157 MOV DPTR,#0001H
013B 74FB 158 MOV A,#0FBH
013D F0 159 MOVX @DPTR,A
013E 0200BD 160 LJMP N7
161 ;------延时4MS子程序----------
0141 790A 162 DELAY: MOV R1,#0AH
0143 7E64 163 LOOP: MOV R6,#64H
0145 00 164 NOP
0146 DEFE 165 LOOP1: DJNZ R6,LOOP1
0148 D9F9 166 DJNZ R1,LOOP
014A 22 167 RET
168 ;------字符表------
014B 3F065B4F 169 TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
014F 666D7D07
0153 7F6F
170 END
A51 MACRO ASSEMBLER 交蚠灯蒧计 04/06/2009 15:45:00 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
AGAIN. . . . . . . C ADDR 002EH A
B. . . . . . . . . D ADDR 00F0H A
B0 . . . . . . . . C ADDR 00B1H A
B01. . . . . . . . C ADDR 00B3H A
DELAY. . . . . . . C ADDR 0141H A
DIS. . . . . . . . C ADDR 00DDH A
DIS3 . . . . . . . C ADDR 011BH A
DISP . . . . . . . C ADDR 00D0H A
DISP1. . . . . . . C ADDR 00D3H A
DS2. . . . . . . . C ADDR 00F0H A
DS4. . . . . . . . C ADDR 012EH A
E1 . . . . . . . . C ADDR 010FH A
EX1. . . . . . . . B ADDR 00A8H.2 A
IE . . . . . . . . D ADDR 00A8H A
IT1. . . . . . . . B ADDR 0088H.2 A
LOOP . . . . . . . C ADDR 0143H A
LOOP1. . . . . . . C ADDR 0146H A
MAIN . . . . . . . C ADDR 0013H A
N0 . . . . . . . . C ADDR 0052H A
N00. . . . . . . . C ADDR 0056H A
N01. . . . . . . . C ADDR 005FH A
N02. . . . . . . . C ADDR 0062H A
N1 . . . . . . . . C ADDR 0067H A
N11. . . . . . . . C ADDR 0071H A
N12. . . . . . . . C ADDR 0073H A
N13. . . . . . . . C ADDR 0076H A
N14. . . . . . . . C ADDR 007CH A
N2 . . . . . . . . C ADDR 0084H A
N21. . . . . . . . C ADDR 008EH A
N22. . . . . . . . C ADDR 0091H A
N3 . . . . . . . . C ADDR 0094H A
N31. . . . . . . . C ADDR 009CH A
N32. . . . . . . . C ADDR 00A1H A
N33. . . . . . . . C ADDR 00A7H A
N7 . . . . . . . . C ADDR 00BDH A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
P3 . . . . . . . . D ADDR 00B0H A
RED. . . . . . . . C ADDR 0042H A
SP . . . . . . . . D ADDR 0081H A
T01. . . . . . . . C ADDR 00CDH A
T02. . . . . . . . C ADDR 0111H A
T03. . . . . . . . C ADDR 0101H A
T0_INT . . . . . . C ADDR 00BEH A
TAB. . . . . . . . C ADDR 014BH A
TH0. . . . . . . . D ADDR 008CH A
TH1. . . . . . . . D ADDR 008DH A
TL0. . . . . . . . D ADDR 008AH A
TL1. . . . . . . . D ADDR 008BH A
TMOD . . . . . . . D ADDR 0089H A
TR0. . . . . . . . B ADDR 0088H.4 A
TR1. . . . . . . . B ADDR 0088H.6 A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -