void send_data( long data)
{
SBUF=data;
while (TI== 0 );
TI= 0 ;
}
data是一个16位数,这个程序发送有问题吗?
这样怎么行啊。SBUF是8位的你发16位的。。。建议你分两次发,首先发高8位,然后发低八位,接收到后吧高8位向左移8位即A<<8。。。B是低8位这样就出来了DATA=A<<8|B.
有问题 SBUF寄存器是8位的 分2次才可以
一般来说你何必要这么发送呢,采用一个char型的8位数不是更好吗?
但是不一定出错,很多单片机都提供了促发传送的功能,也就是说,有一个FIFO队列,你可以一次写入2个或4个字节,这样的话就可以提高传送的效率和速度了,现在的单片机一般都带这个功能,所以说对于错很麻烦,光看这点东西是不行的
相当有问题,这么一来data的高8位被自动截掉了,确实得要分两次 ,如:对于1000,0XE8---低8位,0X03---高8位!
U8 a,b;
U16 c;
a = c|0x00ff;
c >>= 8;
b = c|0x00ff;
00000011 :高位 十六进制:3 十进制:3
11111101 :地位 十六进制:FD 十进制:253
十六进制的高位+十六进制的低位 = 3FD ===》转为:十进制等于:1021
1021/2047*70-10 = 24.91450903度
temp_value_height = ((temp_value >> 8) & 0xff) &0x7;
解释:
回忆未来(372647693) 19:09:29
我学php的。哈哈
石涛(47957728) 19:09:36
temp_value >> 8, 将高八位移位到低八位
回忆未来(372647693) 19:09:50
那低八位到哪儿去了?
石涛(47957728) 19:09:59
那个你就不用管了
石涛(47957728) 19:10:03
因为你不需要
回忆未来(372647693) 19:10:10
嗯,然后呢?
回忆未来(372647693) 19:10:30
& 0xff ??
石涛(47957728) 19:10:31
& 0xff是将现在的数值的高8位清0
石涛(47957728) 19:11:01
& 0x7,就是取现在的数的低3位
回忆未来(372647693) 19:11:03
也就是刚才高八位移到低8位后高还是有东西的?
石涛(47957728) 19:11:56
因为移位之后是将原来的24~16位的移位到8~15了
石涛(47957728) 19:12:18
如果你的temp_value是个32位数的话
http://zhidao.baidu.com/question/110038192.html
{
SBUF=data;
while (TI== 0 );
TI= 0 ;
}
data是一个16位数,这个程序发送有问题吗?
这样怎么行啊。SBUF是8位的你发16位的。。。建议你分两次发,首先发高8位,然后发低八位,接收到后吧高8位向左移8位即A<<8。。。B是低8位这样就出来了DATA=A<<8|B.
有问题 SBUF寄存器是8位的 分2次才可以
一般来说你何必要这么发送呢,采用一个char型的8位数不是更好吗?
但是不一定出错,很多单片机都提供了促发传送的功能,也就是说,有一个FIFO队列,你可以一次写入2个或4个字节,这样的话就可以提高传送的效率和速度了,现在的单片机一般都带这个功能,所以说对于错很麻烦,光看这点东西是不行的
相当有问题,这么一来data的高8位被自动截掉了,确实得要分两次 ,如:对于1000,0XE8---低8位,0X03---高8位!
U8 a,b;
U16 c;
a = c|0x00ff;
c >>= 8;
b = c|0x00ff;
00000011 :高位 十六进制:3 十进制:3
11111101 :地位 十六进制:FD 十进制:253
十六进制的高位+十六进制的低位 = 3FD ===》转为:十进制等于:1021
1021/2047*70-10 = 24.91450903度
temp_value_height = ((temp_value >> 8) & 0xff) &0x7;
解释:
回忆未来(372647693) 19:09:29
我学php的。哈哈
石涛(47957728) 19:09:36
temp_value >> 8, 将高八位移位到低八位
回忆未来(372647693) 19:09:50
那低八位到哪儿去了?
石涛(47957728) 19:09:59
那个你就不用管了
石涛(47957728) 19:10:03
因为你不需要
回忆未来(372647693) 19:10:10
嗯,然后呢?
回忆未来(372647693) 19:10:30
& 0xff ??
石涛(47957728) 19:10:31
& 0xff是将现在的数值的高8位清0
石涛(47957728) 19:11:01
& 0x7,就是取现在的数的低3位
回忆未来(372647693) 19:11:03
也就是刚才高八位移到低8位后高还是有东西的?
石涛(47957728) 19:11:56
因为移位之后是将原来的24~16位的移位到8~15了
石涛(47957728) 19:12:18
如果你的temp_value是个32位数的话
http://zhidao.baidu.com/question/110038192.html
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2870/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2010-3-28 19:09
评论列表