📄 842slave.lst
字号:
=1 170 ; SENDCHAR
=1 171
009E =1 172 SENDCHAR: ; sends ASCII value contained in A to UART
=1 173
009E 3099FD =1 174 JNB TI,$ ; wait til present char gone
842SLAVE PAGE 4
00A1 C299 =1 175 CLR TI ; must clear TI
00A3 F599 =1 176 MOV SBUF,A
=1 177
00A5 22 =1 178 RET
=1 179
=1 180 ;____________________________________________________________________
=1 181 ; SENDVAL
=1 182
00A6 =1 183 SENDVAL: ; converts the hex value of A into two ASCII chars,
=1 184 ; and then spits these two characters up the UART.
=1 185 ; does not change the value of A.
=1 186
00A6 C0E0 =1 187 PUSH ACC
00A8 C4 =1 188 SWAP A
00A9 1200BA =1 189 CALL HEX2ASCII
00AC 119E =1 190 CALL SENDCHAR ; send high nibble
00AE D0E0 =1 191 POP ACC
00B0 C0E0 =1 192 PUSH ACC
00B2 1200BA =1 193 CALL HEX2ASCII
00B5 119E =1 194 CALL SENDCHAR ; send low nibble
00B7 D0E0 =1 195 POP ACC
=1 196
00B9 22 =1 197 RET
=1 198
=1 199 ;____________________________________________________________________
=1 200 ; HEX2ASCII
=1 201
00BA =1 202 HEX2ASCII: ; converts A into the hex character representing the
=1 203 ; value of A's least significant nibble
=1 204
00BA 540F =1 205 ANL A,#00Fh
00BC B40A00 =1 206 CJNE A,#00Ah,$+3
00BF 4002 =1 207 JC IO0030
00C1 2407 =1 208 ADD A,#007h
00C3 2430 =1 209 IO0030: ADD A,#'0'
=1 210
00C5 22 =1 211 RET
=1 212
=1 213 ;____________________________________________________________________
=1 214 ; ASCII2HEX
=1 215
00C6 =1 216 ASCII2HEX: ; converts A from an ASCII digit ('0'-'9' or 'A'-'F')
=1 217 ; into the corresponding number (0-15). returns C=1
=1 218 ; when input is other than an ASCII digit,
=1 219 ; indicating invalid output (returned as 255).
=1 220
00C6 C3 =1 221 CLR C
00C7 9430 =1 222 SUBB A,#'0'
00C9 B40A00 =1 223 CJNE A,#10,$+3
00CC 401B =1 224 JC IO0050 ; if '0'<=char<='9', return OK
00CE B41100 =1 225 CJNE A,#17,$+3
00D1 4013 =1 226 JC IO0040 ; if '9'<char<'A', return FAIL
00D3 9407 =1 227 SUBB A,#7
00D5 B41000 =1 228 CJNE A,#10h,$+3
00D8 400F =1 229 JC IO0050 ; if 'A'<=char<='F', return OK
00DA B42A00 =1 230 CJNE A,#42,$+3
00DD 4007 =1 231 JC IO0040 ; if 'F'<char<'a', return FAIL
00DF 9420 =1 232 SUBB A,#20h
842SLAVE PAGE 5
00E1 B41000 =1 233 CJNE A,#10h,$+3
00E4 4003 =1 234 JC IO0050 ; if 'a'<=char<='f', return OK..
=1 235
00E6 C3 =1 236 IO0040: CLR C ; ..else return FAIL
00E7 74FF =1 237 MOV A,#0FFh
=1 238
00E9 B3 =1 239 IO0050: CPL C
00EA 22 =1 240 RET
=1 241
=1 242 ;____________________________________________________________________
=1 243 ; GETCHAR
=1 244
00EB =1 245 GETCHAR: ; waits for a single ASCII character to be received
=1 246 ; by the UART. places this character into A.
=1 247
00EB 3098FD =1 248 JNB RI,$
00EE E599 =1 249 MOV A,SBUF
00F0 C298 =1 250 CLR RI
=1 251
00F2 22 =1 252 RET
=1 253
=1 254 ;____________________________________________________________________
=1 255 ; GETVAL
=1 256
00F3 =1 257 GETVAL: ; waits for two ASCII hex digits to be received by
=1 258 ; the UART. returns the hex value in A.
=1 259
00F3 C0F0 =1 260 PUSH B
00F5 C000 =1 261 PUSH 0
00F7 C298 =1 262 IO0060: CLR RI
00F9 11EB =1 263 CALL GETCHAR ; first nibble
00FB F500 =1 264 MOV 0,A ; store received char
00FD 11C6 =1 265 CALL ASCII2HEX
00FF 40F6 =1 266 JC IO0060 ; if not '0' thru 'F', don't accept
0101 C4 =1 267 SWAP A ; swap nibbles
0102 F5F0 =1 268 MOV B,A ; store nibble in B
0104 E500 =1 269 MOV A,0 ; echo received char
0106 119E =1 270 CALL SENDCHAR
0108 C298 =1 271 IO0070: CLR RI
010A 11EB =1 272 CALL GETCHAR ; second nibble
010C F500 =1 273 MOV 0,A ; store received char
010E 11C6 =1 274 CALL ASCII2HEX
0110 40F6 =1 275 JC IO0070 ; if not '0' thru 'F', don't accept
0112 45F0 =1 276 ORL A,B ; combine nibbles
0114 F5F0 =1 277 MOV B,A ; store results in B
0116 E500 =1 278 MOV A,0 ; echo received char
0118 119E =1 279 CALL SENDCHAR
011A E5F0 =1 280 MOV A,B ; final result
011C D000 =1 281 POP 0
011E D0F0 =1 282 POP B
=1 283
0120 22 =1 284 RET
=1 285
286
287 ;____________________________________________________________________
288 ; TEXT DATA TABLES
289
0121 0A0D00 290 SEPERATOR: DB 10,13,0
842SLAVE PAGE 6
291
292 ;____________________________________________________________________
293
294 END
295
VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND
842SLAVE PAGE 7
ACC. . . . . . . . . . . . . . . D ADDR 00E0H PREDEFINED
ASCII2HEX. . . . . . . . . . . . C ADDR 00C6H
B. . . . . . . . . . . . . . . . D ADDR 00F0H PREDEFINED
EA . . . . . . . . . . . . . . . B ADDR 00AFH PREDEFINED
EX0. . . . . . . . . . . . . . . B ADDR 00A8H PREDEFINED
GETCHAR. . . . . . . . . . . . . C ADDR 00EBH
GETVAL . . . . . . . . . . . . . C ADDR 00F3H NOT USED
HEX2ASCII. . . . . . . . . . . . C ADDR 00BAH
IEIP2. . . . . . . . . . . . . . D ADDR 00A9H PREDEFINED
INPUT. . . . . . . . . . . . . . D ADDR 0060H
IO0010 . . . . . . . . . . . . . C ADDR 008DH
IO0020 . . . . . . . . . . . . . C ADDR 0099H
IO0030 . . . . . . . . . . . . . C ADDR 00C3H
IO0040 . . . . . . . . . . . . . C ADDR 00E6H
IO0050 . . . . . . . . . . . . . C ADDR 00E9H
IO0060 . . . . . . . . . . . . . C ADDR 00F7H
IO0070 . . . . . . . . . . . . . C ADDR 0108H
IT0. . . . . . . . . . . . . . . B ADDR 0088H PREDEFINED
LED. . . . . . . . . . . . . . . NUMB 00B4H
LOOP . . . . . . . . . . . . . . C ADDR 006CH
MAIN . . . . . . . . . . . . . . C ADDR 004BH
OUTPUT . . . . . . . . . . . . . D ADDR 0061H
P3 . . . . . . . . . . . . . . . D ADDR 00B0H PREDEFINED
PLLCON . . . . . . . . . . . . . D ADDR 00D7H PREDEFINED
RI . . . . . . . . . . . . . . . B ADDR 0098H PREDEFINED
SBUF . . . . . . . . . . . . . . D ADDR 0099H PREDEFINED
SCON . . . . . . . . . . . . . . D ADDR 0098H PREDEFINED
SENDCHAR . . . . . . . . . . . . C ADDR 009EH
SENDSTRING . . . . . . . . . . . C ADDR 0086H
SENDVAL. . . . . . . . . . . . . C ADDR 00A6H
SEPERATOR. . . . . . . . . . . . C ADDR 0121H
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 + -