📄 adcpin.lst
字号:
=1 147 ; SENDVAL
=1 148
0096 =1 149 SENDVAL: ; converts the hex value of A into two ASCII chars,
=1 150 ; and then spits these two characters up the UART.
=1 151 ; does not change the value of A.
=1 152
0096 C0E0 =1 153 PUSH ACC
0098 C4 =1 154 SWAP A
0099 1200AA =1 155 CALL HEX2ASCII
009C 118E =1 156 CALL SENDCHAR ; send high nibble
009E D0E0 =1 157 POP ACC
00A0 C0E0 =1 158 PUSH ACC
00A2 1200AA =1 159 CALL HEX2ASCII
00A5 118E =1 160 CALL SENDCHAR ; send low nibble
00A7 D0E0 =1 161 POP ACC
=1 162
00A9 22 =1 163 RET
=1 164
=1 165 ;____________________________________________________________________
=1 166 ; HEX2ASCII
=1 167
00AA =1 168 HEX2ASCII: ; converts A into the hex character representing the
=1 169 ; value of A's least significant nibble
=1 170
00AA 540F =1 171 ANL A,#00Fh
00AC B40A00 =1 172 CJNE A,#00Ah,$+3
00AF 4002 =1 173 JC IO0030
00B1 2407 =1 174 ADD A,#007h
ADCPIN PAGE 4
00B3 2430 =1 175 IO0030: ADD A,#'0'
=1 176
00B5 22 =1 177 RET
=1 178
=1 179 ;____________________________________________________________________
=1 180 ; ASCII2HEX
=1 181
00B6 =1 182 ASCII2HEX: ; converts A from an ASCII digit ('0'-'9' or 'A'-'F')
=1 183 ; into the corresponding number (0-15). returns C=1
=1 184 ; when input is other than an ASCII digit,
=1 185 ; indicating invalid output (returned as 255).
=1 186
00B6 C3 =1 187 CLR C
00B7 9430 =1 188 SUBB A,#'0'
00B9 B40A00 =1 189 CJNE A,#10,$+3
00BC 401B =1 190 JC IO0050 ; if '0'<=char<='9', return OK
00BE B41100 =1 191 CJNE A,#17,$+3
00C1 4013 =1 192 JC IO0040 ; if '9'<char<'A', return FAIL
00C3 9407 =1 193 SUBB A,#7
00C5 B41000 =1 194 CJNE A,#10h,$+3
00C8 400F =1 195 JC IO0050 ; if 'A'<=char<='F', return OK
00CA B42A00 =1 196 CJNE A,#42,$+3
00CD 4007 =1 197 JC IO0040 ; if 'F'<char<'a', return FAIL
00CF 9420 =1 198 SUBB A,#20h
00D1 B41000 =1 199 CJNE A,#10h,$+3
00D4 4003 =1 200 JC IO0050 ; if 'a'<=char<='f', return OK..
=1 201
00D6 C3 =1 202 IO0040: CLR C ; ..else return FAIL
00D7 74FF =1 203 MOV A,#0FFh
=1 204
00D9 B3 =1 205 IO0050: CPL C
00DA 22 =1 206 RET
=1 207
=1 208 ;____________________________________________________________________
=1 209 ; GETCHAR
=1 210
00DB =1 211 GETCHAR: ; waits for a single ASCII character to be received
=1 212 ; by the UART. places this character into A.
=1 213
00DB 3098FD =1 214 JNB RI,$
00DE E599 =1 215 MOV A,SBUF
00E0 C298 =1 216 CLR RI
=1 217
00E2 22 =1 218 RET
=1 219
=1 220 ;____________________________________________________________________
=1 221 ; GETVAL
=1 222
00E3 =1 223 GETVAL: ; waits for two ASCII hex digits to be received by
=1 224 ; the UART. returns the hex value in A.
=1 225
00E3 C0F0 =1 226 PUSH B
00E5 C000 =1 227 PUSH 0
00E7 C298 =1 228 IO0060: CLR RI
00E9 11DB =1 229 CALL GETCHAR ; first nibble
00EB F500 =1 230 MOV 0,A ; store received char
00ED 11B6 =1 231 CALL ASCII2HEX
00EF 40F6 =1 232 JC IO0060 ; if not '0' thru 'F', don't accept
ADCPIN PAGE 5
00F1 C4 =1 233 SWAP A ; swap nibbles
00F2 F5F0 =1 234 MOV B,A ; store nibble in B
00F4 E500 =1 235 MOV A,0 ; echo received char
00F6 118E =1 236 CALL SENDCHAR
00F8 C298 =1 237 IO0070: CLR RI
00FA 11DB =1 238 CALL GETCHAR ; second nibble
00FC F500 =1 239 MOV 0,A ; store received char
00FE 11B6 =1 240 CALL ASCII2HEX
0100 40F6 =1 241 JC IO0070 ; if not '0' thru 'F', don't accept
0102 45F0 =1 242 ORL A,B ; combine nibbles
0104 F5F0 =1 243 MOV B,A ; store results in B
0106 E500 =1 244 MOV A,0 ; echo received char
0108 118E =1 245 CALL SENDCHAR
010A E5F0 =1 246 MOV A,B ; final result
010C D000 =1 247 POP 0
010E D0F0 =1 248 POP B
=1 249
0110 22 =1 250 RET
=1 251
252 END
VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND
ADCPIN PAGE 6
ACC. . . . . . . . . . . . . . . D ADDR 00E0H PREDEFINED
ADCCON1. . . . . . . . . . . . . D ADDR 00EFH PREDEFINED
ADCCON2. . . . . . . . . . . . . D ADDR 00D8H PREDEFINED
ADCDATAH . . . . . . . . . . . . D ADDR 00DAH PREDEFINED
ADCDATAL . . . . . . . . . . . . D ADDR 00D9H PREDEFINED
AGAIN. . . . . . . . . . . . . . C ADDR 0061H
ASCII2HEX. . . . . . . . . . . . C ADDR 00B6H
B. . . . . . . . . . . . . . . . D ADDR 00F0H PREDEFINED
CHAN . . . . . . . . . . . . . . NUMB 0000H
DELAY. . . . . . . . . . . . . . C ADDR 006AH
DLY0 . . . . . . . . . . . . . . C ADDR 006BH
DLY1 . . . . . . . . . . . . . . C ADDR 006DH
EA . . . . . . . . . . . . . . . B ADDR 00AFH PREDEFINED
EADC . . . . . . . . . . . . . . B ADDR 00AEH PREDEFINED
GETCHAR. . . . . . . . . . . . . C ADDR 00DBH
GETVAL . . . . . . . . . . . . . C ADDR 00E3H NOT USED
HEX2ASCII. . . . . . . . . . . . C ADDR 00AAH
IO0010 . . . . . . . . . . . . . C ADDR 007DH
IO0020 . . . . . . . . . . . . . C ADDR 0089H
IO0030 . . . . . . . . . . . . . C ADDR 00B3H
IO0040 . . . . . . . . . . . . . C ADDR 00D6H
IO0050 . . . . . . . . . . . . . C ADDR 00D9H
IO0060 . . . . . . . . . . . . . C ADDR 00E7H
IO0070 . . . . . . . . . . . . . C ADDR 00F8H
LED. . . . . . . . . . . . . . . NUMB 00B4H
MAIN . . . . . . . . . . . . . . C ADDR 004BH
P3 . . . . . . . . . . . . . . . D ADDR 00B0H PREDEFINED
RI . . . . . . . . . . . . . . . B ADDR 0098H PREDEFINED
SBUF . . . . . . . . . . . . . . D ADDR 0099H PREDEFINED
SCON . . . . . . . . . . . . . . D ADDR 0098H PREDEFINED
SENDCHAR . . . . . . . . . . . . C ADDR 008EH
SENDSTRING . . . . . . . . . . . C ADDR 0076H NOT USED
SENDVAL. . . . . . . . . . . . . C ADDR 0096H
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 + -