📄 adcsingl.lst
字号:
=1 145
009E =1 146 SENDVAL: ; converts the hex value of A into two ASCII chars,
=1 147 ; and then spits these two characters up the UART.
=1 148 ; does not change the value of A.
=1 149
009E C0E0 =1 150 PUSH ACC
00A0 C4 =1 151 SWAP A
00A1 1200B2 =1 152 CALL HEX2ASCII
00A4 1196 =1 153 CALL SENDCHAR ; send high nibble
00A6 D0E0 =1 154 POP ACC
00A8 C0E0 =1 155 PUSH ACC
00AA 1200B2 =1 156 CALL HEX2ASCII
00AD 1196 =1 157 CALL SENDCHAR ; send low nibble
00AF D0E0 =1 158 POP ACC
=1 159
00B1 22 =1 160 RET
=1 161
=1 162 ;____________________________________________________________________
=1 163 ; HEX2ASCII
=1 164
00B2 =1 165 HEX2ASCII: ; converts A into the hex character representing the
=1 166 ; value of A's least significant nibble
=1 167
00B2 540F =1 168 ANL A,#00Fh
00B4 B40A00 =1 169 CJNE A,#00Ah,$+3
00B7 4002 =1 170 JC IO0030
00B9 2407 =1 171 ADD A,#007h
00BB 2430 =1 172 IO0030: ADD A,#'0'
=1 173
00BD 22 =1 174 RET
ADCSINGL PAGE 4
=1 175
=1 176 ;____________________________________________________________________
=1 177 ; ASCII2HEX
=1 178
00BE =1 179 ASCII2HEX: ; converts A from an ASCII digit ('0'-'9' or 'A'-'F')
=1 180 ; into the corresponding number (0-15). returns C=1
=1 181 ; when input is other than an ASCII digit,
=1 182 ; indicating invalid output (returned as 255).
=1 183
00BE C3 =1 184 CLR C
00BF 9430 =1 185 SUBB A,#'0'
00C1 B40A00 =1 186 CJNE A,#10,$+3
00C4 401B =1 187 JC IO0050 ; if '0'<=char<='9', return OK
00C6 B41100 =1 188 CJNE A,#17,$+3
00C9 4013 =1 189 JC IO0040 ; if '9'<char<'A', return FAIL
00CB 9407 =1 190 SUBB A,#7
00CD B41000 =1 191 CJNE A,#10h,$+3
00D0 400F =1 192 JC IO0050 ; if 'A'<=char<='F', return OK
00D2 B42A00 =1 193 CJNE A,#42,$+3
00D5 4007 =1 194 JC IO0040 ; if 'F'<char<'a', return FAIL
00D7 9420 =1 195 SUBB A,#20h
00D9 B41000 =1 196 CJNE A,#10h,$+3
00DC 4003 =1 197 JC IO0050 ; if 'a'<=char<='f', return OK..
=1 198
00DE C3 =1 199 IO0040: CLR C ; ..else return FAIL
00DF 74FF =1 200 MOV A,#0FFh
=1 201
00E1 B3 =1 202 IO0050: CPL C
00E2 22 =1 203 RET
=1 204
=1 205 ;____________________________________________________________________
=1 206 ; GETCHAR
=1 207
00E3 =1 208 GETCHAR: ; waits for a single ASCII character to be received
=1 209 ; by the UART. places this character into A.
=1 210
00E3 3098FD =1 211 JNB RI,$
00E6 E599 =1 212 MOV A,SBUF
00E8 C298 =1 213 CLR RI
=1 214
00EA 22 =1 215 RET
=1 216
=1 217 ;____________________________________________________________________
=1 218 ; GETVAL
=1 219
00EB =1 220 GETVAL: ; waits for two ASCII hex digits to be received by
=1 221 ; the UART. returns the hex value in A.
=1 222
00EB C0F0 =1 223 PUSH B
00ED C000 =1 224 PUSH 0
00EF C298 =1 225 IO0060: CLR RI
00F1 11E3 =1 226 CALL GETCHAR ; first nibble
00F3 F500 =1 227 MOV 0,A ; store received char
00F5 11BE =1 228 CALL ASCII2HEX
00F7 40F6 =1 229 JC IO0060 ; if not '0' thru 'F', don't accept
00F9 C4 =1 230 SWAP A ; swap nibbles
00FA F5F0 =1 231 MOV B,A ; store nibble in B
00FC E500 =1 232 MOV A,0 ; echo received char
ADCSINGL PAGE 5
00FE 1196 =1 233 CALL SENDCHAR
0100 C298 =1 234 IO0070: CLR RI
0102 11E3 =1 235 CALL GETCHAR ; second nibble
0104 F500 =1 236 MOV 0,A ; store received char
0106 11BE =1 237 CALL ASCII2HEX
0108 40F6 =1 238 JC IO0070 ; if not '0' thru 'F', don't accept
010A 45F0 =1 239 ORL A,B ; combine nibbles
010C F5F0 =1 240 MOV B,A ; store results in B
010E E500 =1 241 MOV A,0 ; echo received char
0110 1196 =1 242 CALL SENDCHAR
0112 E5F0 =1 243 MOV A,B ; final result
0114 D000 =1 244 POP 0
0116 D0F0 =1 245 POP B
=1 246
0118 22 =1 247 RET
=1 248
249 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
ADCI . . . . . . . . . . . . . . B ADDR 00DFH PREDEFINED
AGAIN. . . . . . . . . . . . . . C ADDR 005AH
ASCII2HEX. . . . . . . . . . . . C ADDR 00BEH
B. . . . . . . . . . . . . . . . D ADDR 00F0H PREDEFINED
CHAN . . . . . . . . . . . . . . NUMB 0000H
DELAY. . . . . . . . . . . . . . C ADDR 0072H
DLY0 . . . . . . . . . . . . . . C ADDR 0073H
DLY1 . . . . . . . . . . . . . . C ADDR 0075H
GETCHAR. . . . . . . . . . . . . C ADDR 00E3H
GETVAL . . . . . . . . . . . . . C ADDR 00EBH NOT USED
HEX2ASCII. . . . . . . . . . . . C ADDR 00B2H
IO0010 . . . . . . . . . . . . . C ADDR 0085H
IO0020 . . . . . . . . . . . . . C ADDR 0091H
IO0030 . . . . . . . . . . . . . C ADDR 00BBH
IO0040 . . . . . . . . . . . . . C ADDR 00DEH
IO0050 . . . . . . . . . . . . . C ADDR 00E1H
IO0060 . . . . . . . . . . . . . C ADDR 00EFH
IO0070 . . . . . . . . . . . . . C ADDR 0100H
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
SCONV. . . . . . . . . . . . . . B ADDR 00DCH PREDEFINED
SENDCHAR . . . . . . . . . . . . C ADDR 0096H
SENDSTRING . . . . . . . . . . . C ADDR 007EH NOT USED
SENDVAL. . . . . . . . . . . . . C ADDR 009EH
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 + -