收获日掠夺音乐:我是初学c51的,有个数据问题不解请高手指点多谢了!

来源:百度文库 编辑:高考问答 时间:2024/04/28 18:13:34
void main(void)///////////通讯程序//////////////////////////
{
unsigned char data m,n,h;
TMOD=0x20;///定时1,方式2。
SCON=0x50;///串口方式1,
PCON=0x80;///波特率加倍
TH1=0xFA;///9600波特率
TL1=0xFA;///9600波特率
TR1=1;///////////////串口配置
TI=0;
RI=0;
while(RI==0);
RI=0;
m=SBUF;
if (m==0xAA)//验证是不是AA
{
for(n=0;n<2;++n)//显示AA
{
shu=disbuf1[10];//显示AA
P26=d1;//数据
P27=0;//时钟
P27=1;
for(m=0;m<7;++m)
{
shu=(shu>>1);
P26=d1;
P27=0;
P27=1;
}
}

for(h=0;h<8;++h)//
{
P26=1;
P27=0;
P27=1;
}
deyms();
P23=0;
P24=0;
SBUF=0x55;
}
else
SBUF=0xaa;
}

/////////////////////////////////////////
void wendu(void)
{
unsigned char data k,v,m,h;
RI=0;
while(RI==0);
RI=0;
m=SBUF;!!!!!我从串口接收下来的数据,怎样才能转换成十进制。
}

十进制数表示即BCD表示法,因为一个字节最大表示十进制数255,所以你需要两个字节表示最终转换的结果。看下列函数:
void HexToBCD (unsigned char *p)
{
unsigned char i;
*(p+1) = *p / 100;
*p %= 100;
i = (*p / 10) << 4;
*p = i + *p % 10;
}

调用该函数的例子:
void main (void)
{
unsigned char r[2];
r[0]=SBUF;
HexToBCD(r);//结果在r中,其中r[1]是高位
}