
单片机数据的高字节和低字节怎样倒过来排列?
请教大家一个问题,一个数A=D7D6D5D4D3D2D10D0八位,单片机串口发送数据的时候从D0-D7这样发,即从低到高,但是现在需要把这个数重新排列,使得先从高字节发...
请教大家一个问题,一个数 A=D7 D6 D5 D4 D3 D2 D10 D0八位,单片机串口发送数据的时候 从D0-D7这样发 ,即从低到高,但是现在需要把 这个数重新排列,使得先从高字节发送,即把高位放大低位来,使得A=D0 D1 D2 D3 D4 D5 D6 D7 ,就是把最高位放在最低位的位置,发送的时候还是从低位发,怎样重新排列A这个数?单片机是STC89C54RD,程序是C语言的,谢了
展开
推荐于2017-09-06
展开全部
写个函数把要发送的字节反转就行啦
unsigned char ReverseChar(unsigned char old_char)
{
unsigned char new_char=0;
unsigned char i;
for(i=0;i<8;i++)
{
new_char=new_char<<1;
if(old_char%2==1)
new_char=new_char+1;
else ;
old_char=old_char>>1;
}
return new_char;
}
unsigned char ReverseChar(unsigned char old_char)
{
unsigned char new_char=0;
unsigned char i;
for(i=0;i<8;i++)
{
new_char=new_char<<1;
if(old_char%2==1)
new_char=new_char+1;
else ;
old_char=old_char>>1;
}
return new_char;
}
展开全部
#include<reg52.h>
void main()
{
unsigned char i,a,b;
b=0x00;
a=0x01;
for(i=1;i<=8;i++)
{b=b<<1;
b=a&0x01|b;
a=a>>1;
}
while(1);
}
这样能实现你说的功能,执行完之后,b中的数据就是a反过来的数据
void main()
{
unsigned char i,a,b;
b=0x00;
a=0x01;
for(i=1;i<=8;i++)
{b=b<<1;
b=a&0x01|b;
a=a>>1;
}
while(1);
}
这样能实现你说的功能,执行完之后,b中的数据就是a反过来的数据
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
c语言里,这个很好实现呀,你在程序里,另开辟一个数组,重新放数据。然后再发这组新数据。
或者,你在程序头定义一下。按照你的要求来定义。
或者,你在程序头定义一下。按照你的要求来定义。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
unsigned char reverse(unsigned char old)
{
unsigned char temp_char=0,i=8;
while(i--)
{
if(old&0x80)
{
temp_char|=0x80;temp_char>>1;
}
old<<1;
}
return temp_char;
}
在单片机C51里,这种 与 或 运算,效率要高得多,转到汇编代码直接就是循环移位的指令。
{
unsigned char temp_char=0,i=8;
while(i--)
{
if(old&0x80)
{
temp_char|=0x80;temp_char>>1;
}
old<<1;
}
return temp_char;
}
在单片机C51里,这种 与 或 运算,效率要高得多,转到汇编代码直接就是循环移位的指令。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询