⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hex to bcd 的算法程序.txt

📁 c51经典子程序代码全集
💻 TXT
字号:
一个 hex to bcd 的算法程序 [xiaoqi.] [77次] 2001-2-10 20:08:52
HEX_BCD:CLR A
        MOV 30H,A
        MOV 31H,A
        MOV 32H,A
        MOV R2,#15
H_B0:   MOV A,R1
        RLC A
        MOV R1,A
        MOV A,R0
        RLC A
        MOV R0,A
        MOV A,32H
        RLC A
        ACALL BCD_ADJ
        MOV 32H,A
        MOV A,31H
        RLC A
        ACALL BCD_ADJ
        MOV 31H,A
        MOV A,30H
        RLC A
        ACALL BCD_ADJ
        MOV 30H,A
        DJNZ R2,H_B0
        MOV A,R0
        RLC A
        MOV A,32H
        RLC A
        MOV 32H,A
        MOV A,31H
        RLC A
        MOV 31H,A
        MOV A,30H
        RLC A
        MOV 30H,A
        RET
BCD_ADJ:PUSH PSW
        PUSH ACC
        CJNE A,#50H,$+2
        JC B1
        POP ACC
        ADD A,#30H
        PUSH ACC
  B1:   ANL A,#0FH
        CJNE A,#5,$+2
        JC B2
        POP ACC
        ADD A,#3
        PUSH ACC
  B2:   POP ACC
        POP PSW
        RET 
周立功的。 

看我的ltoa() [KK] [59次] 2001-2-11 1:21:24 
;无符号长型转换成压缩BCD码
;输入参数: 转换后BCD码存储指针 无符号长型值
;void ltoa(unsigned char data *BCDptr, unsigned long value);
; BCD_ptr = R7  value = ?_LTOA?BYTE
_LTOA:  
        MOV     R6,AR7
        MOV     R7,#24
        MOV     R1,#00H
        MOV     R2,#00H
        MOV     R3,#00H
        MOV     R4,#00H
        MOV     A,?_LTOA?BYTE+4
        JNZ     ?L00001
        MOV     A,?_LTOA?BYTE+3
        JNZ     ?L00001
        MOV     A,?_LTOA?BYTE+2
        JNZ     ?L00001
        SJMP    ?L0000A
?L00001:
        CLR     C
        MOV     A,?_LTOA?BYTE+4
        RLC     A
        MOV     ?_LTOA?BYTE+4,A
        MOV     A,?_LTOA?BYTE+3
        RLC     A
        MOV     ?_LTOA?BYTE+3,A
        MOV     A,?_LTOA?BYTE+2
        RLC     A
        MOV     ?_LTOA?BYTE+2,A
        MOV     A,R1
        ADDC    A,R1
        DA      A
        MOV     R1,A
        MOV     A,R2
        ADDC    A,R2
        DA      A
        MOV     R2,A
        MOV     A,R3
        ADDC    A,R3
        DA      A
        MOV     R3,A
        MOV     A,R4
        ADDC    A,R4
        DA      A
        MOV     R4,A
        DJNZ    R7,?L00001
?L0000A:
        MOV     R0,AR6
;        MOV     R7,AR4
;        LCALL   BCD_TO_ASC       ; No:12
        MOV     R7,AR3
        LCALL   BCD_TO_ASC       ; No:34
        MOV     R7,AR2
        LCALL   BCD_TO_ASC       ; No:56
        MOV     R7,AR1
        LCALL   BCD_TO_ASC       ; No:78
        MOV     R5,#5            ; Test first 6 bit
        MOV     R0,AR6
?L00002:        
        MOV     A,@R0
        JNZ     ?L00003
        MOV     @R0,#0AH  
        INC     R0
        DJNZ    R5,?L00002
?L00003:
        RET



能不能把C程序放到上面来! [逆风飞扬] [17次] 2001-2-11 15:41:19 
让大伙也学学! 

这是一个调用外部汇编的例子 [KK] [31次] 2001-2-11 20:05:37 
只需在应用文件中定义ltoa的函数声明,然后直接使用即可,不要忘了加入Bl51连接
中。 

用C编的,很粗糙。测试成功的。 [方塘] [5次] 01-6-5 下午 01:07:29 
#define uchar unsigned char
void hex2bcd(uchar xhex,uchar data *BCDptr)
{
   BCDptr[0] = xhex/100;         //百位
   BCDptr[1] = (((xhex%100)/10)<<4)|((xhex%100)%10); //十个位
}
      

 
点击这里回复这篇贴子>>
_____________________________________________________________________________
Copyright?,C51BBS论坛 2000-2001 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -