📄 zhujiasm.lst
字号:
A51 MACRO ASSEMBLER ZHUJIASM 01/24/2008 12:06:00 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN zhujiasm.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE zhujiasm.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
0097 1 T_RSTATE EQU P1.7
0000 2 ORG 0000H
0000 020100 3 LJMP START
0100 4 ORG 0100H
5 ;**********************************************************
6 ;
7 ;系统初始化
8 ;
9 ;**********************************************************
0100 758920 10 START:MOV TMOD,#20H
0103 758DFD 11 MOV TH1,#0FDH
0106 758BFD 12 MOV TL1,#0FDH
0109 D28E 13 SETB TR1
010B 7598D0 14 MOV SCON,#0D0H
010E 758780 15 MOV PCON,#80H
0111 31C2 16 ACALL INIT_LCD
0113 31E5 17 ACALL SCAN_SENSOR
0115 5157 18 ACALL STRING_DISPLAY
19 ;**********************************************************
20 ;
21 ;发送请求信号
22 ;
23 ;**********************************************************
0117 24 MAIN_LOOP:
0117 D297 25 STEP1:SETB T_RSTATE
0119 B80042 26 CJNE R0,#00H,MODE_1;是否选择模式0(循环显示模式)
011C 09 27 INC R1;循环模式的从机号
011D E9 28 MOV A,R1
011E B53802 29 CJNE A,38H,MODE_0
0121 7900 30 MOV R1,#00H
0123 31 MODE_0:
32 ; MOV A,R1;从机号加一
33 ; ANL A,#03H;预设有4个从机
34 ; MOV R1,A
0123 D29B 35 SETB TB8;表明传送的是地址数据
0125 8999 36 MOV SBUF,R1
0127 3099FD 37 JNB TI,$;等待发送完成
012A C299 38 CLR TI
012C C297 39 CLR T_RSTATE
012E 3098FD 40 JNB RI,$;等待从机应答
0131 C298 41 CLR RI
0133 D297 42 SETB T_RSTATE
0135 E599 43 MOV A,SBUF
0137 8939 44 MOV 39H,R1
0139 B53915 45 CJNE A,39H,RESET1
013C C29B 46 CLR TB8
013E 759900 47 MOV SBUF,#00H
0141 3099FD 48 JNB TI,$
0144 C299 49 CLR TI
0146 C297 50 CLR T_RSTATE
0148 3098FD 51 JNB RI,$
014B C298 52 CLR RI
014D AB99 53 MOV R3,SBUF
014F 21A0 54 AJMP STEP2
0151 55 RESET1:
0151 7599FF 56 MOV SBUF,#0FFH
0154 3099FD 57 JNB TI,$
0157 C299 58 CLR TI
A51 MACRO ASSEMBLER ZHUJIASM 01/24/2008 12:06:00 PAGE 2
0159 753A01 59 MOV 3AH,#01H;40H为显示错误状态的标志
015C 21A0 60 AJMP STEP2
015E 61 MODE_1:
015E C3 62 CLR C;清借位
015F E538 63 MOV A,38H
0161 14 64 DEC A
0162 9A 65 SUBB A,R2;比较从机数和选择的机号的大小
0163 4038 66 JC INPUT_ERROR;若从机数小于选择的机号,就跳转
0165 D29B 67 SETB TB8;表明传送的是地址数据
0167 8A99 68 MOV SBUF,R2;将自选模式的从机号发出
0169 3099FD 69 JNB TI,$;等待发送完成
016C C299 70 CLR TI
016E C297 71 CLR T_RSTATE
0170 3098FD 72 JNB RI,$
0173 C298 73 CLR RI
0175 D297 74 SETB T_RSTATE
0177 EA 75 MOV A,R2
0178 B59915 76 CJNE A,SBUF,RESET2;若接收到的地址不符合发送地址,则发送复位
017B C29B 77 CLR TB8
017D 759900 78 MOV SBUF,#00H
0180 3099FD 79 JNB TI,$
0183 C299 80 CLR TI
0185 C297 81 CLR T_RSTATE
0187 3098FD 82 JNB RI,$
018A C298 83 CLR RI
018C AB99 84 MOV R3,SBUF
018E 21A0 85 AJMP STEP2
0190 86 RESET2:
0190 7599FF 87 MOV SBUF,#0FFH
0193 3099FD 88 JNB TI,$
0196 C299 89 CLR TI
0198 753A01 90 MOV 3AH,#01H
019B 21A0 91 AJMP STEP2
019D 92 INPUT_ERROR:
019D 753A01 93 MOV 3AH,#01H
94 ;**********************************************************
95 ;
96 ;接收数据并显示
97 ;
98 ;**********************************************************
01A0 99 STEP2:
01A0 51CF 100 ACALL DISPLAY_NO;显示接收的数据
01A2 7F02 101 MOV R7,#02H
01A4 31B3 102 ACALL DELAY_S;延迟2秒
01A6 2117 103 AJMP MAIN_LOOP
104 ;**********************************************************
105 ;
106 ;延时子程序
107 ;
108 ;**********************************************************
01A8 109 DELAY_MS:
01A8 110 DEL_MS2:
01A8 7537F9 111 MOV 37H,#0F9H
01AB 112 DEL_MS1:
01AB 00 113 NOP
01AC 00 114 NOP
01AD D537FB 115 DJNZ 37H,DEL_MS1
01B0 DDF6 116 DJNZ R5,DEL_MS2
01B2 22 117 RET
118
01B3 119 DELAY_S:
01B3 120 DEL_S2:
01B3 75360A 121 MOV 36H,#0AH
01B6 122 DEL_S1:
01B6 7D64 123 MOV R5,#64H
01B8 31A8 124 ACALL DELAY_MS
A51 MACRO ASSEMBLER ZHUJIASM 01/24/2008 12:06:00 PAGE 3
01BA 7138 125 ACALL SCAN_KEYBOARD
01BC D536F7 126 DJNZ 36H,DEL_S1
01BF DFF2 127 DJNZ R7,DEL_S2
01C1 22 128 RET
129 ;**********************************************************
130 ;
131 ;液晶初始化子程序
132 ;
133 ;**********************************************************
01C2 134 INIT_LCD:
01C2 7DFA 135 MOV R5,#0FAH
01C4 31A8 136 ACALL DELAY_MS;延时,等待液晶进入工作状态
01C6 753101 137 MOV 31H,#01H
01C9 5194 138 ACALL WRITE_COMM;显示清零
01CB 753102 139 MOV 31H,#02H
01CE 5194 140 ACALL WRITE_COMM;光标复位
01D0 753138 141 MOV 31H,#38H
01D3 5194 142 ACALL WRITE_COMM;设置显示状态
01D5 75310C 143 MOV 31H,#0CH
01D8 5194 144 ACALL WRITE_COMM;开显示,无光标
01DA 753118 145 MOV 31H,#18H
01DD 5194 146 ACALL WRITE_COMM;移动显示的文字
01DF 753101 147 MOV 31H,#01H
01E2 5194 148 ACALL WRITE_COMM;显示清零
01E4 22 149 RET
150 ;**********************************************************
151 ;
152 ;从机存在扫描子程序
153 ;
154 ;**********************************************************
01E5 155 SCAN_SENSOR:
01E5 753186 156 MOV 31H,#86H
01E8 5194 157 ACALL WRITE_COMM
01EA 753206 158 MOV 32H,#06H;字符串长度为6个字节
01ED 753300 159 MOV 33H,#00H;设置字符串中指针
01F0 160 DISPLAY_LOOP1:
01F0 E533 161 MOV A,33H
01F2 900245 162 MOV DPTR,#STRING_SYSTEM
01F5 93 163 MOVC A,@A+DPTR
01F6 F531 164 MOV 31H,A
01F8 51A2 165 ACALL WRITE_DATA
01FA 0533 166 INC 33H
01FC D532F1 167 DJNZ 32H,DISPLAY_LOOP1
01FF 7531C2 168 MOV 31H,#0C2H
0202 5194 169 ACALL WRITE_COMM
0204 75320C 170 MOV 32H,#0CH;字符串长度为12个字节
0207 753300 171 MOV 33H,#00H;设置字符串中指针
020A 172 DISPLAY_LOOP2:
020A E533 173 MOV A,33H
020C 90024B 174 MOV DPTR,#STRING_INITIALIZE
020F 93 175 MOVC A,@A+DPTR
0210 F531 176 MOV 31H,A
0212 51A2 177 ACALL WRITE_DATA
0214 0533 178 INC 33H
0216 D532F1 179 DJNZ 32H,DISPLAY_LOOP2
0219 D29B 180 SETB TB8
021B 753301 181 MOV 33H,#01H
021E 182 SCAN:
021E 853299 183 MOV SBUF,32H;32H作为扫描发出的从机号
0221 3099FD 184 JNB TI,$
0224 C299 185 CLR TI
0226 7D01 186 MOV R5,#01H
0228 31A8 187 ACALL DELAY_MS
022A 309808 188 JNB RI,OUT_SCAN
022D 0532 189 INC 32H
022F C298 190 CLR RI
A51 MACRO ASSEMBLER ZHUJIASM 01/24/2008 12:06:00 PAGE 4
0231 E533 191 MOV A,33H
0233 8008 192 SJMP JUDGE_SCAN
0235 193 OUT_SCAN:
0235 853238 194 MOV 38H,32H;将从机数保存在38H中
0238 753300 195 MOV 33H,#00H;33H作为结束扫描的标志
023B E533 196 MOV A,33H
023D 197 JUDGE_SCAN:
023D B400DE 198 CJNE A,#00H,SCAN
0240 7F02 199 MOV R7,#02H
0242 31B3 200 ACALL DELAY_S
0244 22 201 RET
0245 53595354 202 STRING_SYSTEM:DB 'S','Y','S','T','E','M'
0249 454D
024B 494E4954 203 STRING_INITIALIZE:DB 'I','N','I','T','I','A','L','I','Z','I','N','G'
024F 49414C49
0253 5A494E47
204 ;**********************************************************
205 ;
206 ;显示字符串子程序
207 ;
208 ;**********************************************************
0257 209 STRING_DISPLAY:
0257 753101 210 MOV 31H,#01H
025A 5194 211 ACALL WRITE_COMM;显示清零
025C 753180 212 MOV 31H,#80H
025F 5194 213 ACALL WRITE_COMM;设置输入字符串的首地址
0261 753210 214 MOV 32H,#10H;字符串长度为16个字节
0264 753300 215 MOV 33H,#00H;设置字符串中指针
0267 216 DISPLAY_LOOP3:
0267 E533 217 MOV A,33H
0269 900284 218 MOV DPTR,#STRING
026C 93 219 MOVC A,@A+DPTR
026D F531 220 MOV 31H,A
026F 51A2 221 ACALL WRITE_DATA
0271 0533 222 INC 33H
0273 D532F1 223 DJNZ 32H,DISPLAY_LOOP3
0276 753187 224 MOV 31H,#87H
0279 5194 225 ACALL WRITE_COMM
027B E538 226 MOV A,38H
027D 2430 227 ADD A,#30H;将从机数转化为相应的ASCII码
027F F531 228 MOV 31H,A
0281 51A2 229 ACALL WRITE_DATA
0283 22 230 RET
0284 4E4F2020 231 STRING:DB 'N','O',' ',' ','o','f',' ',' ',' ','s','e','n','s','o','r','s'
0288 6F662020
028C 2073656E
0290 736F7273
232 ;**********************************************************
233 ;
234 ;液晶显示调用子程序库
235 ;
236 ;**********************************************************
0294 237 WRITE_COMM:
0294 853180 238 MOV P0,31H
0297 C294 239 CLR P1.4
0299 C293 240 CLR P1.3
029B C292 241 CLR P1.2
029D 51B0 242 ACALL READ_BUSY
029F D292 243 SETB P1.2
02A1 22 244 RET
02A2 245 WRITE_DATA:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -