📄 spifram.lst
字号:
00F2 3099FD =1 151 JNB TI,$ ; wait til present char gone
00F5 C299 =1 152 CLR TI ; must clear TI
00F7 F599 =1 153 MOV SBUF,A
=1 154
00F9 22 =1 155 RET
=1 156
=1 157 ;____________________________________________________________________
=1 158 ; SENDVAL
=1 159
00FA =1 160 SENDVAL: ; converts the hex value of A into two ASCII chars,
=1 161 ; and then spits these two characters up the UART.
=1 162 ; does not change the value of A.
=1 163
00FA C0E0 =1 164 PUSH ACC
00FC C4 =1 165 SWAP A
00FD 12010E =1 166 CALL HEX2ASCII
0100 11F2 =1 167 CALL SENDCHAR ; send high nibble
0102 D0E0 =1 168 POP ACC
0104 C0E0 =1 169 PUSH ACC
0106 12010E =1 170 CALL HEX2ASCII
0109 11F2 =1 171 CALL SENDCHAR ; send low nibble
010B D0E0 =1 172 POP ACC
=1 173
010D 22 =1 174 RET
SPIFRAM PAGE 4
=1 175
=1 176 ;____________________________________________________________________
=1 177 ; HEX2ASCII
=1 178
010E =1 179 HEX2ASCII: ; converts A into the hex character representing the
=1 180 ; value of A's least significant nibble
=1 181
010E 540F =1 182 ANL A,#00Fh
0110 B40A00 =1 183 CJNE A,#00Ah,$+3
0113 4002 =1 184 JC IO0030
0115 2407 =1 185 ADD A,#007h
0117 2430 =1 186 IO0030: ADD A,#'0'
=1 187
0119 22 =1 188 RET
=1 189
=1 190 ;____________________________________________________________________
=1 191 ; ASCII2HEX
=1 192
011A =1 193 ASCII2HEX: ; converts A from an ASCII digit ('0'-'9' or 'A'-'F')
=1 194 ; into the corresponding number (0-15). returns C=1
=1 195 ; when input is other than an ASCII digit,
=1 196 ; indicating invalid output (returned as 255).
=1 197
011A C3 =1 198 CLR C
011B 9430 =1 199 SUBB A,#'0'
011D B40A00 =1 200 CJNE A,#10,$+3
0120 401B =1 201 JC IO0050 ; if '0'<=char<='9', return OK
0122 B41100 =1 202 CJNE A,#17,$+3
0125 4013 =1 203 JC IO0040 ; if '9'<char<'A', return FAIL
0127 9407 =1 204 SUBB A,#7
0129 B41000 =1 205 CJNE A,#10h,$+3
012C 400F =1 206 JC IO0050 ; if 'A'<=char<='F', return OK
012E B42A00 =1 207 CJNE A,#42,$+3
0131 4007 =1 208 JC IO0040 ; if 'F'<char<'a', return FAIL
0133 9420 =1 209 SUBB A,#20h
0135 B41000 =1 210 CJNE A,#10h,$+3
0138 4003 =1 211 JC IO0050 ; if 'a'<=char<='f', return OK..
=1 212
013A C3 =1 213 IO0040: CLR C ; ..else return FAIL
013B 74FF =1 214 MOV A,#0FFh
=1 215
013D B3 =1 216 IO0050: CPL C
013E 22 =1 217 RET
=1 218
=1 219 ;____________________________________________________________________
=1 220 ; GETCHAR
=1 221
013F =1 222 GETCHAR: ; waits for a single ASCII character to be received
=1 223 ; by the UART. places this character into A.
=1 224
013F 3098FD =1 225 JNB RI,$
0142 E599 =1 226 MOV A,SBUF
0144 C298 =1 227 CLR RI
=1 228
0146 22 =1 229 RET
=1 230
=1 231 ;____________________________________________________________________
=1 232 ; GETVAL
SPIFRAM PAGE 5
=1 233
0147 =1 234 GETVAL: ; waits for two ASCII hex digits to be received by
=1 235 ; the UART. returns the hex value in A.
=1 236
0147 C0F0 =1 237 PUSH B
0149 C000 =1 238 PUSH 0
014B C298 =1 239 IO0060: CLR RI
014D 313F =1 240 CALL GETCHAR ; first nibble
014F F500 =1 241 MOV 0,A ; store received char
0151 311A =1 242 CALL ASCII2HEX
0153 40F6 =1 243 JC IO0060 ; if not '0' thru 'F', don't accept
0155 C4 =1 244 SWAP A ; swap nibbles
0156 F5F0 =1 245 MOV B,A ; store nibble in B
0158 E500 =1 246 MOV A,0 ; echo received char
015A 11F2 =1 247 CALL SENDCHAR
015C C298 =1 248 IO0070: CLR RI
015E 313F =1 249 CALL GETCHAR ; second nibble
0160 F500 =1 250 MOV 0,A ; store received char
0162 311A =1 251 CALL ASCII2HEX
0164 40F6 =1 252 JC IO0070 ; if not '0' thru 'F', don't accept
0166 45F0 =1 253 ORL A,B ; combine nibbles
0168 F5F0 =1 254 MOV B,A ; store results in B
016A E500 =1 255 MOV A,0 ; echo received char
016C 11F2 =1 256 CALL SENDCHAR
016E E5F0 =1 257 MOV A,B ; final result
0170 D000 =1 258 POP 0
0172 D0F0 =1 259 POP B
=1 260
0174 22 =1 261 RET
=1 262
263 end
VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND
SPIFRAM PAGE 6
ACC. . . . . . . . . . . . . . . D ADDR 00E0H PREDEFINED
ASCII2HEX. . . . . . . . . . . . C ADDR 011AH
B. . . . . . . . . . . . . . . . D ADDR 00F0H PREDEFINED
CFG814 . . . . . . . . . . . . . D ADDR 009CH PREDEFINED
EXIT . . . . . . . . . . . . . . C ADDR 00D8H NOT USED
GETCHAR. . . . . . . . . . . . . C ADDR 013FH
GETVAL . . . . . . . . . . . . . C ADDR 0147H NOT USED
HEX2ASCII. . . . . . . . . . . . C ADDR 010EH
IO0010 . . . . . . . . . . . . . C ADDR 00E1H
IO0020 . . . . . . . . . . . . . C ADDR 00EDH
IO0030 . . . . . . . . . . . . . C ADDR 0117H
IO0040 . . . . . . . . . . . . . C ADDR 013AH
IO0050 . . . . . . . . . . . . . C ADDR 013DH
IO0060 . . . . . . . . . . . . . C ADDR 014BH
IO0070 . . . . . . . . . . . . . C ADDR 015CH
ISPI . . . . . . . . . . . . . . B ADDR 00FFH PREDEFINED
LOOP . . . . . . . . . . . . . . C ADDR 0099H
LOOP2. . . . . . . . . . . . . . C ADDR 00C7H
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 00F2H
SENDSTRING . . . . . . . . . . . C ADDR 00DAH NOT USED
SENDVAL. . . . . . . . . . . . . C ADDR 00FAH
SPICON . . . . . . . . . . . . . D ADDR 00F8H PREDEFINED
SPIDAT . . . . . . . . . . . . . D ADDR 00F7H PREDEFINED
SS . . . . . . . . . . . . . . . NUMB 00B5H
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 + -