📄 831slave.lst
字号:
=1 170
=1 171 ;____________________________________________________________________
=1 172 ; SENDCHAR
=1 173
009B =1 174 SENDCHAR: ; sends ASCII value contained in A to UART
831SLAVE PAGE 4
=1 175
009B 3099FD =1 176 JNB TI,$ ; wait til present char gone
009E C299 =1 177 CLR TI ; must clear TI
00A0 F599 =1 178 MOV SBUF,A
=1 179
00A2 22 =1 180 RET
=1 181
=1 182 ;____________________________________________________________________
=1 183 ; SENDVAL
=1 184
00A3 =1 185 SENDVAL: ; converts the hex value of A into two ASCII chars,
=1 186 ; and then spits these two characters up the UART.
=1 187 ; does not change the value of A.
=1 188
00A3 C0E0 =1 189 PUSH ACC
00A5 C4 =1 190 SWAP A
00A6 1200B7 =1 191 CALL HEX2ASCII
00A9 119B =1 192 CALL SENDCHAR ; send high nibble
00AB D0E0 =1 193 POP ACC
00AD C0E0 =1 194 PUSH ACC
00AF 1200B7 =1 195 CALL HEX2ASCII
00B2 119B =1 196 CALL SENDCHAR ; send low nibble
00B4 D0E0 =1 197 POP ACC
=1 198
00B6 22 =1 199 RET
=1 200
=1 201 ;____________________________________________________________________
=1 202 ; HEX2ASCII
=1 203
00B7 =1 204 HEX2ASCII: ; converts A into the hex character representing the
=1 205 ; value of A's least significant nibble
=1 206
00B7 540F =1 207 ANL A,#00Fh
00B9 B40A00 =1 208 CJNE A,#00Ah,$+3
00BC 4002 =1 209 JC IO0030
00BE 2407 =1 210 ADD A,#007h
00C0 2430 =1 211 IO0030: ADD A,#'0'
=1 212
00C2 22 =1 213 RET
=1 214
=1 215 ;____________________________________________________________________
=1 216 ; ASCII2HEX
=1 217
00C3 =1 218 ASCII2HEX: ; converts A from an ASCII digit ('0'-'9' or 'A'-'F')
=1 219 ; into the corresponding number (0-15). returns C=1
=1 220 ; when input is other than an ASCII digit,
=1 221 ; indicating invalid output (returned as 255).
=1 222
00C3 C3 =1 223 CLR C
00C4 9430 =1 224 SUBB A,#'0'
00C6 B40A00 =1 225 CJNE A,#10,$+3
00C9 401B =1 226 JC IO0050 ; if '0'<=char<='9', return OK
00CB B41100 =1 227 CJNE A,#17,$+3
00CE 4013 =1 228 JC IO0040 ; if '9'<char<'A', return FAIL
00D0 9407 =1 229 SUBB A,#7
00D2 B41000 =1 230 CJNE A,#10h,$+3
00D5 400F =1 231 JC IO0050 ; if 'A'<=char<='F', return OK
00D7 B42A00 =1 232 CJNE A,#42,$+3
831SLAVE PAGE 5
00DA 4007 =1 233 JC IO0040 ; if 'F'<char<'a', return FAIL
00DC 9420 =1 234 SUBB A,#20h
00DE B41000 =1 235 CJNE A,#10h,$+3
00E1 4003 =1 236 JC IO0050 ; if 'a'<=char<='f', return OK..
=1 237
00E3 C3 =1 238 IO0040: CLR C ; ..else return FAIL
00E4 74FF =1 239 MOV A,#0FFh
=1 240
00E6 B3 =1 241 IO0050: CPL C
00E7 22 =1 242 RET
=1 243
=1 244 ;____________________________________________________________________
=1 245 ; GETCHAR
=1 246
00E8 =1 247 GETCHAR: ; waits for a single ASCII character to be received
=1 248 ; by the UART. places this character into A.
=1 249
00E8 3098FD =1 250 JNB RI,$
00EB E599 =1 251 MOV A,SBUF
00ED C298 =1 252 CLR RI
=1 253
00EF 22 =1 254 RET
=1 255
=1 256 ;____________________________________________________________________
=1 257 ; GETVAL
=1 258
00F0 =1 259 GETVAL: ; waits for two ASCII hex digits to be received by
=1 260 ; the UART. returns the hex value in A.
=1 261
00F0 C0F0 =1 262 PUSH B
00F2 C000 =1 263 PUSH 0
00F4 C298 =1 264 IO0060: CLR RI
00F6 11E8 =1 265 CALL GETCHAR ; first nibble
00F8 F500 =1 266 MOV 0,A ; store received char
00FA 11C3 =1 267 CALL ASCII2HEX
00FC 40F6 =1 268 JC IO0060 ; if not '0' thru 'F', don't accept
00FE C4 =1 269 SWAP A ; swap nibbles
00FF F5F0 =1 270 MOV B,A ; store nibble in B
0101 E500 =1 271 MOV A,0 ; echo received char
0103 119B =1 272 CALL SENDCHAR
0105 C298 =1 273 IO0070: CLR RI
0107 11E8 =1 274 CALL GETCHAR ; second nibble
0109 F500 =1 275 MOV 0,A ; store received char
010B 11C3 =1 276 CALL ASCII2HEX
010D 40F6 =1 277 JC IO0070 ; if not '0' thru 'F', don't accept
010F 45F0 =1 278 ORL A,B ; combine nibbles
0111 F5F0 =1 279 MOV B,A ; store results in B
0113 E500 =1 280 MOV A,0 ; echo received char
0115 119B =1 281 CALL SENDCHAR
0117 E5F0 =1 282 MOV A,B ; final result
0119 D000 =1 283 POP 0
011B D0F0 =1 284 POP B
=1 285
011D 22 =1 286 RET
=1 287
288
289 ;____________________________________________________________________
290 ; TEXT DATA TABLES
831SLAVE PAGE 6
291
011E 0A0D00 292 SEPERATOR: DB 10,13,0
293
294 ;____________________________________________________________________
295
296 END
297
VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND
831SLAVE PAGE 7
ACC. . . . . . . . . . . . . . . D ADDR 00E0H PREDEFINED
ASCII2HEX. . . . . . . . . . . . C ADDR 00C3H
B. . . . . . . . . . . . . . . . D ADDR 00F0H PREDEFINED
EA . . . . . . . . . . . . . . . B ADDR 00AFH PREDEFINED
EX0. . . . . . . . . . . . . . . B ADDR 00A8H PREDEFINED
GETCHAR. . . . . . . . . . . . . C ADDR 00E8H
GETVAL . . . . . . . . . . . . . C ADDR 00F0H NOT USED
HEX2ASCII. . . . . . . . . . . . C ADDR 00B7H
IEIP2. . . . . . . . . . . . . . D ADDR 00A9H PREDEFINED
INPUT. . . . . . . . . . . . . . D ADDR 0060H
IO0010 . . . . . . . . . . . . . C ADDR 008AH
IO0020 . . . . . . . . . . . . . C ADDR 0096H
IO0030 . . . . . . . . . . . . . C ADDR 00C0H
IO0040 . . . . . . . . . . . . . C ADDR 00E3H
IO0050 . . . . . . . . . . . . . C ADDR 00E6H
IO0060 . . . . . . . . . . . . . C ADDR 00F4H
IO0070 . . . . . . . . . . . . . C ADDR 0105H
IT0. . . . . . . . . . . . . . . B ADDR 0088H PREDEFINED
LED. . . . . . . . . . . . . . . NUMB 00B4H
LOOP . . . . . . . . . . . . . . C ADDR 0069H
MAIN . . . . . . . . . . . . . . C ADDR 004BH
OUTPUT . . . . . . . . . . . . . D ADDR 0061H
P3 . . . . . . . . . . . . . . . D ADDR 00B0H PREDEFINED
RI . . . . . . . . . . . . . . . B ADDR 0098H PREDEFINED
SBUF . . . . . . . . . . . . . . D ADDR 0099H PREDEFINED
SCON . . . . . . . . . . . . . . D ADDR 0098H PREDEFINED
SENDCHAR . . . . . . . . . . . . C ADDR 009BH
SENDSTRING . . . . . . . . . . . C ADDR 0083H
SENDVAL. . . . . . . . . . . . . C ADDR 00A3H
SEPERATOR. . . . . . . . . . . . C ADDR 011EH
SP . . . . . . . . . . . . . . . D ADDR 0081H PREDEFINED
SPICON . . . . . . . . . . . . . D ADDR 00F8H PREDEFINED
SPIDAT . . . . . . . . . . . . . D ADDR 00F7H PREDEFINED
T3CON. . . . . . . . . . . . . . D ADDR 009EH PREDEFINED
T3FD . . . . . . . . . . . . . . D ADDR 009DH PREDEFINED
TI . . . . . . . . . . . . . . . B ADDR 0099H PREDEFINED
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -