📄 adcsingl.lst
字号:
=1 151 ;____________________________________________________________________
=1 152 ; SENDVAL
=1 153
00B0 =1 154 SENDVAL: ; converts the hex value of A into two ASCII chars,
=1 155 ; and then spits these two characters up the UART.
=1 156 ; does not change the value of A.
=1 157
00B0 C0E0 =1 158 PUSH ACC
00B2 C4 =1 159 SWAP A
00B3 1200C4 =1 160 CALL HEX2ASCII
00B6 11A8 =1 161 CALL SENDCHAR ; send high nibble
00B8 D0E0 =1 162 POP ACC
00BA C0E0 =1 163 PUSH ACC
00BC 1200C4 =1 164 CALL HEX2ASCII
00BF 11A8 =1 165 CALL SENDCHAR ; send low nibble
00C1 D0E0 =1 166 POP ACC
=1 167
00C3 22 =1 168 RET
=1 169
=1 170 ;____________________________________________________________________
=1 171 ; HEX2ASCII
=1 172
00C4 =1 173 HEX2ASCII: ; converts A into the hex character representing the
=1 174 ; value of A's least significant nibble
ADCSINGL PAGE 4
=1 175
00C4 540F =1 176 ANL A,#00Fh
00C6 B40A00 =1 177 CJNE A,#00Ah,$+3
00C9 4002 =1 178 JC IO0030
00CB 2407 =1 179 ADD A,#007h
00CD 2430 =1 180 IO0030: ADD A,#'0'
=1 181
00CF 22 =1 182 RET
=1 183
=1 184 ;____________________________________________________________________
=1 185 ; ASCII2HEX
=1 186
00D0 =1 187 ASCII2HEX: ; converts A from an ASCII digit ('0'-'9' or 'A'-'F')
=1 188 ; into the corresponding number (0-15). returns C=1
=1 189 ; when input is other than an ASCII digit,
=1 190 ; indicating invalid output (returned as 255).
=1 191
00D0 C3 =1 192 CLR C
00D1 9430 =1 193 SUBB A,#'0'
00D3 B40A00 =1 194 CJNE A,#10,$+3
00D6 401B =1 195 JC IO0050 ; if '0'<=char<='9', return OK
00D8 B41100 =1 196 CJNE A,#17,$+3
00DB 4013 =1 197 JC IO0040 ; if '9'<char<'A', return FAIL
00DD 9407 =1 198 SUBB A,#7
00DF B41000 =1 199 CJNE A,#10h,$+3
00E2 400F =1 200 JC IO0050 ; if 'A'<=char<='F', return OK
00E4 B42A00 =1 201 CJNE A,#42,$+3
00E7 4007 =1 202 JC IO0040 ; if 'F'<char<'a', return FAIL
00E9 9420 =1 203 SUBB A,#20h
00EB B41000 =1 204 CJNE A,#10h,$+3
00EE 4003 =1 205 JC IO0050 ; if 'a'<=char<='f', return OK..
=1 206
00F0 C3 =1 207 IO0040: CLR C ; ..else return FAIL
00F1 74FF =1 208 MOV A,#0FFh
=1 209
00F3 B3 =1 210 IO0050: CPL C
00F4 22 =1 211 RET
=1 212
=1 213 ;____________________________________________________________________
=1 214 ; GETCHAR
=1 215
00F5 =1 216 GETCHAR: ; waits for a single ASCII character to be received
=1 217 ; by the UART. places this character into A.
=1 218
00F5 3098FD =1 219 JNB RI,$
00F8 E599 =1 220 MOV A,SBUF
00FA C298 =1 221 CLR RI
=1 222
00FC 22 =1 223 RET
=1 224
=1 225 ;____________________________________________________________________
=1 226 ; GETVAL
=1 227
00FD =1 228 GETVAL: ; waits for two ASCII hex digits to be received by
=1 229 ; the UART. returns the hex value in A.
=1 230
00FD C0F0 =1 231 PUSH B
00FF C000 =1 232 PUSH 0
ADCSINGL PAGE 5
0101 C298 =1 233 IO0060: CLR RI
0103 11F5 =1 234 CALL GETCHAR ; first nibble
0105 F500 =1 235 MOV 0,A ; store received char
0107 11D0 =1 236 CALL ASCII2HEX
0109 40F6 =1 237 JC IO0060 ; if not '0' thru 'F', don't accept
010B C4 =1 238 SWAP A ; swap nibbles
010C F5F0 =1 239 MOV B,A ; store nibble in B
010E E500 =1 240 MOV A,0 ; echo received char
0110 11A8 =1 241 CALL SENDCHAR
0112 C298 =1 242 IO0070: CLR RI
0114 11F5 =1 243 CALL GETCHAR ; second nibble
0116 F500 =1 244 MOV 0,A ; store received char
0118 11D0 =1 245 CALL ASCII2HEX
011A 40F6 =1 246 JC IO0070 ; if not '0' thru 'F', don't accept
011C 45F0 =1 247 ORL A,B ; combine nibbles
011E F5F0 =1 248 MOV B,A ; store results in B
0120 E500 =1 249 MOV A,0 ; echo received char
0122 11A8 =1 250 CALL SENDCHAR
0124 E5F0 =1 251 MOV A,B ; final result
0126 D000 =1 252 POP 0
0128 D0F0 =1 253 POP B
=1 254
012A 22 =1 255 RET
=1 256
257 END
VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND
ADCSINGL 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 0067H
ASCII2HEX. . . . . . . . . . . . C ADDR 00D0H
B. . . . . . . . . . . . . . . . D ADDR 00F0H PREDEFINED
CHAN . . . . . . . . . . . . . . NUMB 0000H
DELAY. . . . . . . . . . . . . . C ADDR 0084H
DLY0 . . . . . . . . . . . . . . C ADDR 0085H
DLY1 . . . . . . . . . . . . . . C ADDR 0087H
EA . . . . . . . . . . . . . . . B ADDR 00AFH PREDEFINED
EADC . . . . . . . . . . . . . . B ADDR 00AEH PREDEFINED
GETCHAR. . . . . . . . . . . . . C ADDR 00F5H
GETVAL . . . . . . . . . . . . . C ADDR 00FDH NOT USED
HEX2ASCII. . . . . . . . . . . . C ADDR 00C4H
IO0010 . . . . . . . . . . . . . C ADDR 0097H
IO0020 . . . . . . . . . . . . . C ADDR 00A3H
IO0030 . . . . . . . . . . . . . C ADDR 00CDH
IO0040 . . . . . . . . . . . . . C ADDR 00F0H
IO0050 . . . . . . . . . . . . . C ADDR 00F3H
IO0060 . . . . . . . . . . . . . C ADDR 0101H
IO0070 . . . . . . . . . . . . . C ADDR 0112H
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
SCONV. . . . . . . . . . . . . . B ADDR 00DCH PREDEFINED
SENDCHAR . . . . . . . . . . . . C ADDR 00A8H
SENDSTRING . . . . . . . . . . . C ADDR 0090H NOT USED
SENDVAL. . . . . . . . . . . . . C ADDR 00B0H
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 + -