📄 lmetx2.lst
字号:
0155 C3 222 div_loop: clr C ; clear carry flag
0156 E8 223 mov a, r0 ; shift the highest bit of
0157 33 224 rlc a ; the dividend into...
0158 F8 225 mov r0, a
0159 E9 226 mov a, r1
015A 33 227 rlc a
015B F9 228 mov r1, a
LMETX2 PAGE 5
015C EE 229 mov a, r6 ; ... the lowest bit of the
015D 33 230 rlc a ; partial remainder
015E FE 231 mov r6, a
015F EF 232 mov a, r7
0160 33 233 rlc a
0161 FF 234 mov r7, a
0162 EE 235 mov a, r6 ; trial subtract divisor
0163 C3 236 clr C ; from partial remainder
0164 9A 237 subb a, r2
0165 F582 238 mov dpl, a
0167 EF 239 mov a, r7
0168 9B 240 subb a, r3
0169 F583 241 mov dph, a
016B B3 242 cpl C ; complement external borrow
016C 5004 243 jnc div_1 ; update partial remainder if
244 ; borrow
016E AF83 245 mov r7, dph ; update partial remainder
0170 AE82 246 mov r6, dpl
0172 EC 247 div_1: mov a, r4 ; shift result bit into partial
0173 33 248 rlc a ; quotient
0174 FC 249 mov r4, a
0175 ED 250 mov a, r5
0176 33 251 rlc a
0177 FD 252 mov r5, a
0178 D5F0DA 253 djnz B, div_loop
017B ED 254 mov a, r5 ; put quotient in r0, and r1
017C F9 255 mov r1, a
017D EC 256 mov a, r4
017E F8 257 mov r0, a
017F EF 258 mov a, r7 ; get remainder, saved before the
0180 FB 259 mov r3, a ; last subtraction
0181 EE 260 mov a, r6
0182 FA 261 mov r2, a
0183 22 262 ret
263
0184 264 sloptabl1:
0184 FB168015 265 db 0fbh,16h,80h,15h,64h,14h,75h,13h,9ah,12h,0b5h,11h,0e7h,10h,57h,10h
0188 64147513
018C 9A12B511
0190 E7105710
0194 C10F250F 266 db 0c1h,0fh,25h,0fh,0aah,0eh,2bh,0eh,0d2h,0dh,48h,0dh,0e7h,0ch,81h,0ch
0198 AA0E2B0E
019C D20D480D
01A0 E70C810C
01A4 4D0CE00B 267 db 4dh,0ch,0e0h,0bh,0a7h,0bh,6dh,0bh,30h,0bh,0b1h,0ah,0b1h,0ah,6dh,0ah
01A8 A70B6D0B
01AC 300BB10A
01B0 B10A6D0A
01B4 250A 268 db 25h,0ah
269
01B6 270 hextobcd:
271 ; 2 BYTE HEX TO 5 DIGITS BCD
272
273
274 ;16 Bit Hex to BCD Conversion for 8051 Microcontroller
275 ; ;This routine is for 16 bit Hex to BCD conversion;;;;;;;;;;;;;;;;;;;;;
276 ;Accepts a 16 bit binary number in R1,R2 and returns 5 digit BCD in ;R7,R6,R5,R4,R3(upto 64K
)
LMETX2 PAGE 6
01B6 277 Hex2BCD: ;r1=high byte ;r7 most significant digit
278 ;R2 = LSByte
279 ;mov r1,41h
280 ;mov r2,40h
01B6 7B00 281 MOV R3,#00
01B8 7C00 282 MOV R4,#00
01BA 7D00 283 MOV R5,#00
01BC 7E00 284 MOV R6,#00
01BE 7F00 285 MOV R7,#00
01C0 75F00A 286 MOV B,#10
01C3 EA 287 MOV A,R2
01C4 84 288 DIV AB
01C5 ABF0 289 MOV R3,B ;
01C7 75F00A 290 MOV B,#10 ; R7,R6,R5,R4,R3
01CA 84 291 DIV AB
01CB ACF0 292 MOV R4,B
01CD FD 293 MOV R5,A
01CE B90002 294 CJNE R1,#0H,HIGH_BYTE ; CHECK FOR HIGH BYTE
01D1 802B 295 SJMP ENDD
01D3 7406 296 HIGH_BYTE: MOV A,#6
01D5 2B 297 ADD A,R3
01D6 75F00A 298 MOV B,#10
01D9 84 299 DIV AB
01DA ABF0 300 MOV R3,B
01DC 2405 301 ADD A,#5
01DE 2C 302 ADD A,R4
01DF 75F00A 303 MOV B,#10
01E2 84 304 DIV AB
01E3 ACF0 305 MOV R4,B
01E5 2402 306 ADD A,#2
01E7 2D 307 ADD A,R5
01E8 75F00A 308 MOV B,#10
01EB 84 309 DIV AB
01EC ADF0 310 MOV R5,B
01EE BE0002 311 CJNE R6,#00,ADD_IT
01F1 8001 312 SJMP CONTINUE
01F3 2E 313 ADD_IT: ADD A,R6
01F4 FE 314 CONTINUE: MOV R6,A
01F5 D9DC 315 DJNZ R1,HIGH_BYTE
01F7 75F00A 316 MOV B, #10
01FA 84 317 DIV AB
01FB AEF0 318 MOV R6,B
01FD FF 319 MOV R7,A
01FE 22 320 ENDD: ret
321
322 ;====================================================================
323 ; subroutine UMUL16
324 ; 16-Bit x 16-Bit to 32-Bit Product Unsigned Multiply
325 ;
326 ; input: r1, r0 = multiplicand X
327 ; r3, r2 = multiplier Y
328 ;
329 ; output: r3, r2, r1, r0 = product P = X x Y
330 ;
331 ; alters: acc, C
332 ;====================================================================
333
01FF C0F0 334 UMUL16: push b
LMETX2 PAGE 7
0201 C082 335 push dpl
0203 C083 336 push dph
0205 E8 337 mov a, r0
0206 8AF0 338 mov b, r2
0208 A4 339 mul ab ; multiply XL x YL
0209 85F082 340 mov dpl, b ; temp save XLYL h
020C C8 341 xch a, r0 ; save XLYL l, reload XL
020D 8BF0 342 mov b, r3
020F A4 343 mul ab ; multiply XL x YH
0210 2582 344 add a, dpl
0212 F582 345 mov dpl, a ; temp save XLYH l + XLYL h
0214 E4 346 clr a
0215 35F0 347 addc a, b
0217 F583 348 mov dph, a ; temp save XLYH h + C
0219 EA 349 mov a, r2
021A 89F0 350 mov b, r1
021C A4 351 mul ab ; multiply XH x YL
021D 2582 352 add a, dpl
021F F582 353 mov dpl, a ; save XLYH l + XLYL h + XHYL l
0221 E583 354 mov a, dph
0223 35F0 355 addc a, b ; (XLYH h + C) + XHYL h
0225 F583 356 mov dph, a
0227 92D5 357 mov f0, C ; save intermediate carry
0229 EB 358 mov a, r3
022A 89F0 359 mov b, r1
022C A4 360 mul ab ; multiply XH x YH
022D 2583 361 add a, dph ; (XLYH h + C) + XHYL h + XHYH l
022F FA 362 mov r2, a
0230 E4 363 clr a
0231 35F0 364 addc a, b ; XHYH h + C
0233 A2D5 365 mov C, f0 ; retrieve intermediate carry
0235 3400 366 addc a, #0
0237 FB 367 mov r3, a
0238 A982 368 mov r1, dpl
023A D083 369 pop dph
023C D082 370 pop dpl
023E D0F0 371 pop b
0240 22 372 ret
373
374 end
375
VERSION 1.2k ASSEMBLY COMPLETE, 0 ERRORS FOUND
LMETX2 PAGE 8
ADD_IT . . . . . . . . . . . . . C ADDR 01F3H
B. . . . . . . . . . . . . . . . D ADDR 00F0H PREDEFINED
BEG. . . . . . . . . . . . . . . C ADDR 0030H NOT USED
BEGINNING. . . . . . . . . . . . C ADDR 0043H NOT USED
CALC . . . . . . . . . . . . . . C ADDR 0105H
CHK. . . . . . . . . . . . . . . C ADDR 0059H
CHK2 . . . . . . . . . . . . . . C ADDR 0092H
CONTINUE . . . . . . . . . . . . C ADDR 01F4H
DELAY1 . . . . . . . . . . . . . C ADDR 00FEH
DISP1. . . . . . . . . . . . . . C ADDR 00B8H
DIS_WAIT . . . . . . . . . . . . C ADDR 00B0H
DIV_1. . . . . . . . . . . . . . C ADDR 0172H
DIV_LOOP . . . . . . . . . . . . C ADDR 0155H
DPH. . . . . . . . . . . . . . . D ADDR 0083H PREDEFINED
DPL. . . . . . . . . . . . . . . D ADDR 0082H PREDEFINED
DR . . . . . . . . . . . . . . . C ADDR 00AAH NOT USED
ENDD . . . . . . . . . . . . . . C ADDR 01FEH
F0 . . . . . . . . . . . . . . . B ADDR 00D5H PREDEFINED
HEX2BCD. . . . . . . . . . . . . C ADDR 01B6H
HEXTOBCD . . . . . . . . . . . . C ADDR 01B6H NOT USED
HIGH_BYTE. . . . . . . . . . . . C ADDR 01D3H
LEDCODE. . . . . . . . . . . . . C ADDR 00EEH
LFIND. . . . . . . . . . . . . . C ADDR 0048H NOT USED
N. . . . . . . . . . . . . . . . C ADDR 0100H
P1 . . . . . . . . . . . . . . . D ADDR 0090H PREDEFINED
P3 . . . . . . . . . . . . . . . D ADDR 00B0H PREDEFINED
PQ2. . . . . . . . . . . . . . . C ADDR 00C5H
PV3. . . . . . . . . . . . . . . C ADDR 00CBH NOT USED
REFRESH. . . . . . . . . . . . . C ADDR 00B8H NOT USED
REFRESH1 . . . . . . . . . . . . C ADDR 00C1H
ROTATE2. . . . . . . . . . . . . C ADDR 0113H
S1 . . . . . . . . . . . . . . . C ADDR 00D8H NOT USED
S3 . . . . . . . . . . . . . . . C ADDR 00D6H NOT USED
S4 . . . . . . . . . . . . . . . C ADDR 00E7H NOT USED
S5 . . . . . . . . . . . . . . . C ADDR 00E7H NOT USED
S6 . . . . . . . . . . . . . . . C ADDR 00EDH NOT USED
SEGCODE. . . . . . . . . . . . . C ADDR 00D3H NOT USED
SEGDISP. . . . . . . . . . . . . C ADDR 00CCH
SHIF . . . . . . . . . . . . . . C ADDR 0139H
SLOPTABL1. . . . . . . . . . . . C ADDR 0184H
SP . . . . . . . . . . . . . . . D ADDR 0081H PREDEFINED
START. . . . . . . . . . . . . . C ADDR 003DH
STOP2. . . . . . . . . . . . . . C ADDR 0095H NOT USED
STOPT. . . . . . . . . . . . . . C ADDR 005CH NOT USED
T1HI . . . . . . . . . . . . . . NUMB 0056H
T1LO . . . . . . . . . . . . . . NUMB 0055H
TEMP1. . . . . . . . . . . . . . NUMB 0053H
TEMP2. . . . . . . . . . . . . . NUMB 0054H
TEMP3. . . . . . . . . . . . . . NUMB 0055H
TEMP4. . . . . . . . . . . . . . NUMB 0056H
TH0. . . . . . . . . . . . . . . D ADDR 008CH PREDEFINED
TL0. . . . . . . . . . . . . . . D ADDR 008AH PREDEFINED
TMOD . . . . . . . . . . . . . . D ADDR 0089H PREDEFINED
TR0. . . . . . . . . . . . . . . B ADDR 008CH PREDEFINED
UDIV16 . . . . . . . . . . . . . C ADDR 014EH
UMUL16 . . . . . . . . . . . . . C ADDR 01FFH
WAIT1. . . . . . . . . . . . . . C ADDR 0064H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -