📄 21imcu.html
字号:
<p><br>;********************************************************************<br>;Name: <a name="BIN3toBCD4">BIN3toBCD4</a><br>;Func: 三字节二进制整数--->>BCD码四字节转换(Comped BCD)<br>;Input: 二进制数人低字节到高字节存放在内部RAM50H,51H,52H单元中<br>;Output: BCD码人低位到高位分别存放在内部RAM53H,54H,55H,56H单元中<br>;USE: R7-R0, 56H-50H<br>;********************************************************************<br>;PASSED<br>BIN3toBCD4:<br>LENG1 EQU 24<br>LENG2 EQU 4<br>LENG3 EQU 3<br>NUMB1 EQU 50H<br>NUMB2 EQU 53H<br> ;;;For test<br> MOV 50H, #00H<br> MOV 51H, #0FFH<br> MOV 52H, #0FFH<br> ;;;;;;;;;;<br>ACALL MUBTD<br> RET<br>;;LOOP: SJMP LOOP<br>MUBTD: MOV R0, #NUMB2<br>MOV R7, #LENG2<br>CLR A<br>LOOP1: MOV @R0, A<br>INC R0<br>DJNZ R7, LOOP1<br>MOV R7, #LENG1<br>LOOP4: MOV R1, #NUMB1<br>MOV R6, #LENG3<br>CLR C<br>LOOP2: MOV A, @R1<br>RLC A<br>MOV @R1, A<br>INC R1<br>DJNZ R6, LOOP2<br>MOV R5, #LENG2<br>MOV R0, #NUMB2<br>LOOP3: MOV A, @R0<br>ADDC A, @R0<br>DA A<br>MOV @R0, A<br>INC R0<br>DJNZ R5, LOOP3<br>DJNZ R7, LOOP4<br><br>MOV R0, 53H<br>MOV R1, 54H<br>MOV R2, 55H<br>MOV R3, 56H<br>RET ; end of BIN3toBCD4<br>;********************************************************************<br>;_____________________________________________________________________________<br>; Name: <a name="SIBITD">SIBITD</a><br>;Func: 单字节二进制整数-->>BCD码转换子程序<br>;Input: 二进制数放在内部RAM20H单元<br>;OutPut: 转换后的BCD码高位放在内部RAM22H<br>;_____________________________________________________________________________<br>LENG1 EQU 8 ;二进制数位数<br>LENG2 EQU 2 ;BCD码字节数<br>NUMB1 EQU 20H ;二进制数地址<br>NUMB2 EQU 21H ;BCD码首址<br> ORG 2000H<br> AJMP MAIN<br>MAIN: MOV R0, #NMB1<br> MOV R1, #NUMB2<br> MOV R7, #LENG1<br> ACALL SIBTD<br> SJMP $<br>SIBTD: CLR A<br> MOV 21H, A<br> MOV 22H, A<br>LOOP3: CLR C<br> MOV A, @R0<br> RLC A<br> MOV @R0, A<br> MOV R1, #NUMB2<br> MOV R6, #LENG3<br>LOOP2: MOV A, #R1<br> ADDC A, #@R1<br> DA A<br> MOV @R1, A<br> INC R1<br> DJNZ R6, LOOP2<br> DJNZ R7, LOOP3<br> RET<br>;___________________________________________________________________________<br>; 二进制数 BCD码<br>; (20H) (22H 21H)<br>; FF 2 55<br>; 7F 1 27<br>; 80 1 28<br>;____________________________________________________________________________<br><br><br>;_____________________________________________________________________________<br>; Name: <a name="ADDM1">ADDM1</a><br>;Func: 三字节加法子程序并显示和值<br>;Input: 被加数数据区首址由R0指向内部RAM20H单元.加数数据区首地址由R1指向内部RAM23单元<br>;OutPut: 和数放在被加数的数据区<br>;_____________________________________________________________________________<br>ORG 20H<br>DATA: DEFB 66H ;被加数低字节<br>DEFB 77H<br>EEFB 88H ;被加数高字节<br>DATAB: DEFB 44H ;加数低字节<br>DEFB 66H<br>DEFB 77H; ;加数高字节<br>COVNT: EQU 03H ;字节数<br>ORG DAH<br>DS: DEFS 06H; display BUF<br>ORG 2000H<br>AJMP MAIN<br>MAIN: MOV R3, #COVNT<br>MOV R0, #DATA<br>MOV R1, #DATB<br>ACALL ADDM1<br>ACALL DSVP0<br>LOOP0: SJMP LOOP0<br>ADDM1: CLR A<br>LOOP: MOV A, @R0<br>ADDC A, @R1<br>MOV @R0, A<br>INC R0<br>INC R1<br>DJNZ R3, LOOP1<br>RET<br>DSUP0: MOV R0, #DS+5<br>MOV A, DATA<br>ACALL PTDS<br>MOV A, DATA+1<br>ACALL PTDS<br>MOV A, DATA+2<br>ACALL PTDS<br>MOV R0, #DS<br>MOV R2, #20H<br>MOV R3, #00H<br>MOV DPTR, #SEGPT<br>DSVP1: MOV A, #0FFH<br>MOV R1, #0E3H<br>MOVX @R1, A<br>MOVX A, @R0<br>MOVC A, @A+DPTR<br>MOV R1, #0E1H<br>MOVX @R, A<br>MOV A, R2<br>MOV R1, #0E3H<br>MOVX @R1, A<br>DSVP2: DJNZ R3, DSVP2<br>INC R0<br>CLR C<br>MOV A, R2<br>RRC A<br>MOV R2, A<br>JNZ A, DSVP1<br>LJMP DSVP0<br>RET<br>PTDS: MOV R1, A<br>ACALL PTDS1<br>MOV A, P1<br>SWAP<br>PTDS1: ANL A, #0FH<br>MOV @R0, A<br>DEC R0<br>RET<br>SEGPT: DEFB 0C0H, 0F9H<br> DEFB 0A4H, 0B0H<br> DEFB 99H, 92H<br> DEFB 82H, 0F8H<br> DEFB 80H, 90H<br> DEFB 88H, 83H<br> DEFB 0C6H, 0A1H<br> DEFB 86H, 8EH<br> END<br>;__________________________________________________________________________<br>; 被加数 加数 和数<br>; 22H21H20H 25H24H23H 22H21H20H<br>; 88 77 66 77 66 44 FF DD AA<br>; 78 65 44 77 65 98 F0 00 00<br>;__________________________________________________________________________<br><br>;_____________________________________________________________________________<br>;Name: <a name="SUBM">SUBM</a><br>;Func: 多字节减法子程序<br>;Input: 被减数数据区首址由R0指向内部RAM20H单元.减数数据区首地址由R1指向内部RAM23单元<br>;OutPut: 差数放在被减数的数据区<br>;_____________________________________________________________________________<br><br>ORG 20H<br>DATA: DEFB 0FFH ;被减数低字节<br>DEFB 0FFH<br>DEFB 0FFH <br>DEFB 0FFH ;被减数高字节<br>DATB: DEFB 55H ;减数低字节<br>DEFB 55H <br>DEFB 55H<br>DEFB 55H ;减数高字节<br>COVNT: EQU 04H ;字节数<br>ORG 2000H<br>AJMP MAIN<br>MAIN: MOV R3, #COVNT<br>MOV R0, #DATA<br>MOV R1, #DATB<br>ACALL SUBM<br>LOOP: SJMP LOOP<br>SUMB: CLR C<br>CLR A<br>LOOP1: MOV A, @R0<br>SUBB A, @R1<br>MOV @R0, A<br>INC R0<br>INC R1<br>DJNZ R3, LOOP1<br>RET<br>END<br>;__________________________________________________________________________<br>; 被减数 减数 差数<br>; 23H22H21H20H 27H26H25H24H 23H22H21H20H<br>; FF FF FF FF 55 55 55 55 AA AA AA AA <br>; AA AA AA AA 55 55 55
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -