📄 bin2bcd.c
字号:
/*************************************************************************************/
unsigned char AsmParam1 _at_ 0x20;
unsigned char AsmParam2 _at_ 0x21;
unsigned char AsmParam3 _at_ 0x22;
//------------------------------------------------------------------------------------
void LongToBcd(void)
{
#pragma asm
MOV A,20H ;
MOV R7,A
MOV A,21H ;
MOV R5,A
MOV A,R7
MOV R1,A ;LongData ADDRESS:R1(Hsb)
MOV A,R5
MOV R0,A ;LongData ADDRESS:R0(Hsb)
MOV A,@R1 ;LongData:H R2 R3 R4 R5 L
MOV R2,A
INC R1
MOV A,@R1
MOV R3,A
INC R1
MOV A,@R1
MOV R4,A
INC R1
MOV A,@R1
MOV R5,A
CLR A ;CLEAR BCD_Data
MOV @R0,A
INC R0
MOV @R0,A
INC R0
MOV @R0,A
INC R0
MOV @R0,A
INC R0
MOV @R0,A ;BCD_Data ADDRESS:R0 OR R7(Lsb)
MOV A,R0
MOV R7,A
MOV R1,#32 ;R2:SHIFT COUNT
F4Bin2BCDLP2:
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
JC F4Bin2BCDLP3
DJNZ R1,F4Bin2BCDLP2
F4Bin2BCDLP4:
RET
F4Bin2BCDLP3:
MOV A,#1
MOV @R0,A
MOV A,R1
CLR C
SUBB A,#1
JZ F4Bin2BCDLP4
MOV R1,A
F4Bin2BCDLP1:
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,@R0
ADDC A,ACC
DA A
MOV @R0,A
DEC R0
MOV A,@R0
ADDC A,ACC
DA A
MOV @R0,A
DEC R0
MOV A,@R0
ADDC A,ACC
DA A
MOV @R0,A
DEC R0
MOV A,@R0
ADDC A,ACC
DA A
MOV @R0,A
DEC R0
MOV A,@R0
ADDC A,ACC
DA A
MOV @R0,A
MOV A,R7
MOV R0,A
DJNZ R1,F4Bin2BCDLP1
#pragma endasm
}
//------------------------------------------------------------------------------------
void WordToBcd(void)
{
#pragma asm
MOV A,20H
MOV R7,A
MOV A,21H
MOV R5,A
MOV A, R7
MOV R0,A
MOV A,R5
MOV R1,A
MOV A,@R0
MOV R6,A
INC R0
MOV A,@R0
MOV R7,A
CLR A
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H
HBCD20: MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
DA A
MOV R3,A
DJNZ R2,HBCD20
MOV A,R3
MOV @R1,A
INC R1
MOV A,R4
MOV @R1,A
INC R1
MOV A,R5
MOV @R1,A
#pragma endasm
}
/*************************** The End ********************************************/
//------------------------------------------------------------------------------------
void KeilWordToBcd(unsigned char idata *pWord,unsigned char idata *pBcd)
{
AsmParam1=pWord;
AsmParam2=pBcd;
WordToBcd();
}
//-------------------------------------------------------------------------------------
void KeilLongToBcd(unsigned char idata *pLong,unsigned char idata *pBcd)
{
AsmParam1=pLong;
AsmParam2=pBcd;
LongToBcd();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -