📄 adcpin.lst
字号:
=1 150 ; SENDVAL
=1 151
009F =1 152 SENDVAL: ; converts the hex value of A into two ASCII chars,
=1 153 ; and then spits these two characters up the UART.
=1 154 ; does not change the value of A.
=1 155
009F C0E0 =1 156 PUSH ACC
00A1 C4 =1 157 SWAP A
00A2 1200B3 =1 158 CALL HEX2ASCII
00A5 1197 =1 159 CALL SENDCHAR ; send high nibble
00A7 D0E0 =1 160 POP ACC
00A9 C0E0 =1 161 PUSH ACC
00AB 1200B3 =1 162 CALL HEX2ASCII
00AE 1197 =1 163 CALL SENDCHAR ; send low nibble
00B0 D0E0 =1 164 POP ACC
=1 165
00B2 22 =1 166 RET
=1 167
=1 168 ;____________________________________________________________________
=1 169 ; HEX2ASCII
=1 170
00B3 =1 171 HEX2ASCII: ; converts A into the hex character representing the
=1 172 ; value of A's least significant nibble
=1 173
00B3 540F =1 174 ANL A,#00Fh
ADCPIN PAGE 4
00B5 B40A00 =1 175 CJNE A,#00Ah,$+3
00B8 4002 =1 176 JC IO0030
00BA 2407 =1 177 ADD A,#007h
00BC 2430 =1 178 IO0030: ADD A,#'0'
=1 179
00BE 22 =1 180 RET
=1 181
=1 182 ;____________________________________________________________________
=1 183 ; ASCII2HEX
=1 184
00BF =1 185 ASCII2HEX: ; converts A from an ASCII digit ('0'-'9' or 'A'-'F')
=1 186 ; into the corresponding number (0-15). returns C=1
=1 187 ; when input is other than an ASCII digit,
=1 188 ; indicating invalid output (returned as 255).
=1 189
00BF C3 =1 190 CLR C
00C0 9430 =1 191 SUBB A,#'0'
00C2 B40A00 =1 192 CJNE A,#10,$+3
00C5 401B =1 193 JC IO0050 ; if '0'<=char<='9', return OK
00C7 B41100 =1 194 CJNE A,#17,$+3
00CA 4013 =1 195 JC IO0040 ; if '9'<char<'A', return FAIL
00CC 9407 =1 196 SUBB A,#7
00CE B41000 =1 197 CJNE A,#10h,$+3
00D1 400F =1 198 JC IO0050 ; if 'A'<=char<='F', return OK
00D3 B42A00 =1 199 CJNE A,#42,$+3
00D6 4007 =1 200 JC IO0040 ; if 'F'<char<'a', return FAIL
00D8 9420 =1 201 SUBB A,#20h
00DA B41000 =1 202 CJNE A,#10h,$+3
00DD 4003 =1 203 JC IO0050 ; if 'a'<=char<='f', return OK..
=1 204
00DF C3 =1 205 IO0040: CLR C ; ..else return FAIL
00E0 74FF =1 206 MOV A,#0FFh
=1 207
00E2 B3 =1 208 IO0050: CPL C
00E3 22 =1 209 RET
=1 210
=1 211 ;____________________________________________________________________
=1 212 ; GETCHAR
=1 213
00E4 =1 214 GETCHAR: ; waits for a single ASCII character to be received
=1 215 ; by the UART. places this character into A.
=1 216
00E4 3098FD =1 217 JNB RI,$
00E7 E599 =1 218 MOV A,SBUF
00E9 C298 =1 219 CLR RI
=1 220
00EB 22 =1 221 RET
=1 222
=1 223 ;____________________________________________________________________
=1 224 ; GETVAL
=1 225
00EC =1 226 GETVAL: ; waits for two ASCII hex digits to be received by
=1 227 ; the UART. returns the hex value in A.
=1 228
00EC C0F0 =1 229 PUSH B
00EE C000 =1 230 PUSH 0
00F0 C298 =1 231 IO0060: CLR RI
00F2 11E4 =1 232 CALL GETCHAR ; first nibble
ADCPIN PAGE 5
00F4 F500 =1 233 MOV 0,A ; store received char
00F6 11BF =1 234 CALL ASCII2HEX
00F8 40F6 =1 235 JC IO0060 ; if not '0' thru 'F', don't accept
00FA C4 =1 236 SWAP A ; swap nibbles
00FB F5F0 =1 237 MOV B,A ; store nibble in B
00FD E500 =1 238 MOV A,0 ; echo received char
00FF 1197 =1 239 CALL SENDCHAR
0101 C298 =1 240 IO0070: CLR RI
0103 11E4 =1 241 CALL GETCHAR ; second nibble
0105 F500 =1 242 MOV 0,A ; store received char
0107 11BF =1 243 CALL ASCII2HEX
0109 40F6 =1 244 JC IO0070 ; if not '0' thru 'F', don't accept
010B 45F0 =1 245 ORL A,B ; combine nibbles
010D F5F0 =1 246 MOV B,A ; store results in B
010F E500 =1 247 MOV A,0 ; echo received char
0111 1197 =1 248 CALL SENDCHAR
0113 E5F0 =1 249 MOV A,B ; final result
0115 D000 =1 250 POP 0
0117 D0F0 =1 251 POP B
=1 252
0119 22 =1 253 RET
=1 254
255 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 006AH
ASCII2HEX. . . . . . . . . . . . C ADDR 00BFH
B. . . . . . . . . . . . . . . . D ADDR 00F0H PREDEFINED
CHAN . . . . . . . . . . . . . . NUMB 0000H
DELAY. . . . . . . . . . . . . . C ADDR 0073H
DLY0 . . . . . . . . . . . . . . C ADDR 0074H
DLY1 . . . . . . . . . . . . . . C ADDR 0076H
EA . . . . . . . . . . . . . . . B ADDR 00AFH PREDEFINED
EADC . . . . . . . . . . . . . . B ADDR 00AEH PREDEFINED
GETCHAR. . . . . . . . . . . . . C ADDR 00E4H
GETVAL . . . . . . . . . . . . . C ADDR 00ECH NOT USED
HEX2ASCII. . . . . . . . . . . . C ADDR 00B3H
IO0010 . . . . . . . . . . . . . C ADDR 0086H
IO0020 . . . . . . . . . . . . . C ADDR 0092H
IO0030 . . . . . . . . . . . . . C ADDR 00BCH
IO0040 . . . . . . . . . . . . . C ADDR 00DFH
IO0050 . . . . . . . . . . . . . C ADDR 00E2H
IO0060 . . . . . . . . . . . . . C ADDR 00F0H
IO0070 . . . . . . . . . . . . . C ADDR 0101H
LED. . . . . . . . . . . . . . . NUMB 00B3H
MAIN . . . . . . . . . . . . . . C ADDR 004BH
P3 . . . . . . . . . . . . . . . D ADDR 00B0H PREDEFINED
RCAP2H . . . . . . . . . . . . . D ADDR 00CBH PREDEFINED
RCAP2L . . . . . . . . . . . . . D ADDR 00CAH PREDEFINED
RI . . . . . . . . . . . . . . . B ADDR 0098H PREDEFINED
SBUF . . . . . . . . . . . . . . D ADDR 0099H PREDEFINED
SCON . . . . . . . . . . . . . . D ADDR 0098H PREDEFINED
SENDCHAR . . . . . . . . . . . . C ADDR 0097H
SENDSTRING . . . . . . . . . . . C ADDR 007FH NOT USED
SENDVAL. . . . . . . . . . . . . C ADDR 009FH
T2CON. . . . . . . . . . . . . . D ADDR 00C8H PREDEFINED
TH2. . . . . . . . . . . . . . . D ADDR 00CDH PREDEFINED
TI . . . . . . . . . . . . . . . B ADDR 0099H PREDEFINED
TL2. . . . . . . . . . . . . . . D ADDR 00CCH PREDEFINED
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -