|
union {
unsigned long d;
unsigned char byte[4];
struct
{
unsigned char source;
unsigned char lo;
unsigned char mid;
unsigned char hi;
}Dec_num;
}Dat;
//Dat.Dec_num.source
//Dat.Dec_num.hi
void
BCD_shift (void)
{
unsigned char count = 8,i;
do {
for (i=1;i<4;++i)
{
if ((Dat.byte[i]&0x0F)>=0x05) Dat.byte[i]+=0x03;
if ((Dat.byte[i]&0xF0)>=0x50) Dat.byte[i]+=0x30;
}
Dat.d <<=1;
}while (--count);
}
теперь используем эти "домашние заготовки"
void
BCD_word (unsigned int data)
{
Dat.d = 0; // clear long data
Dat.byte[0] = (unsigned char)(data>>8);
BCD_shift ();
Dat.byte[0] = (unsigned char)data;
BCD_shift ();
}
E-mail: info@telesys.ru