新手求指点关于UART的小程序

yang_0799   2010-6-10 10:55 楼主
我刚接触单片机不久,还在看别人写的程序,现在关于单片机与PC通信的程序没大看懂,希望前辈能指点下,不胜感激
上面程序 ULen = (ReceiveBUFF[2]<<8) + ReceiveBUFF[3],其中“ReceiveBUFF[2]<<8”,之前定义的是char ReceiveBUFF[20]; char ULen,这里ReceiveBUFF[2]向左移8位,那不是都移出去了吗,不是就变成00000000了,这句话到底什么意思啊,有什么作用?

回复评论 (4)

是我描述的不清楚吗,还是问题太简单了。
点赞  2010-6-10 16:31
如果Ulen是16位的呢?
执行ReceiveBUFF[2]<<8) + ReceiveBUFF[3]之后,那不就是将接收的两个8位的字节组合成一个16位的数据了吗?
点赞  2010-6-10 17:07
引用:

如果Ulen是16位的呢?
执行ReceiveBUFF[2]<<8) + ReceiveBUFF[3]之后,那不就是将接收的两个8位的字节组合成一个16位的数??...
十分感谢。。。。。。但我还有点不明白,ReceiveBUFF[2]本身是八位的,左移时数据不会丢失是吗?UART这里的寄存器不是都是八位吗,程序“ULen = (ReceiveBUFF[2]<<8) + ReceiveBUFF[3];”

其中如果定义了ULen为int型,那么假设ReceiveBUFF[2]=0x01,那么左移八位后再加上ReceiveBUFF[3],ULen肯定要大于0xFF,这样的话(ReceiveCounter >= (ULen + 2));那么ReceiveCounter也大于0xFF,而ReceiveCounter是char型,只有八位啊,那么不就溢出了吗。
点赞  2010-6-10 17:12
具体过程没有仔细研究,因为我一直用汇编。
应该是先将8位数据装入Rxx再移位
点赞  2010-6-10 19:28
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复