3477|4

91

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

新手求指点关于UART的小程序 [复制链接]

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

最新回复

具体过程没有仔细研究,因为我一直用汇编。 应该是先将8位数据装入Rxx再移位  详情 回复 发表于 2010-6-10 19:28
 
点赞 关注

回复
举报

66

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
是我描述的不清楚吗,还是问题太简单了。
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
如果Ulen是16位的呢?
执行ReceiveBUFF[2]<<8) + ReceiveBUFF[3]之后,那不就是将接收的两个8位的字节组合成一个16位的数据了吗?
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用:

如果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型,只有八位啊,那么不就溢出了吗。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

5
 
具体过程没有仔细研究,因为我一直用汇编。
应该是先将8位数据装入Rxx再移位
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表