为何在51单片机中写A=SBUF;SBUF=A;串口不会将收到的A重新发回去呢?

貌似不使用中断子程序就无法实现,原因不清楚,有可能是两个SBUF寄存器之间切换的问题,单独发送可以,单独接受也可以,就是刚发送完立刻要求返回数据不行。非常感谢大家的帮助。... 貌似不使用中断子程序就无法实现,原因不清楚,有可能是两个SBUF寄存器之间切换的问题,单独发送可以,单独接受也可以,就是刚发送完立刻要求返回数据不行。非常感谢大家的帮助。使用中断子程序就没有问题了。 展开
 我来答
goldjohnson
2012-09-28 · 超过35用户采纳过TA的回答
知道答主
回答量:115
采纳率:0%
帮助的人:62.2万
展开全部
发送需要专门一个发送子函数,要对寄存器操作;而不是赋值,SBUF只是一个存放数据的地方,它不会自动发送,也不会自动接受。你找找看有没有receive或者send之类的函数。
追问
可是郭天祥的教程中写的是,a=SBUF,SBUF=a就是发送和接受数据的关键语句,单片机会自动读取和发送的,我在程序中也用过,没有问题,只是将A=SBUF;SBUF=A写在一起时就不能执行了。不知道是为什么。用的是c语言
追答
需要等待接收数据完成,才能再发送,要在a=SBUF之间加入一个语句,判断串口寄存器中的接收标志位置位后,才能执行SBUF=a。格式参考:
while( ! (寄存器的标志位) );
seuzhouww
2012-09-29 · TA获得超过1386个赞
知道小有建树答主
回答量:658
采纳率:0%
帮助的人:299万
展开全部
A被编译器认为是ACC了?仿真时查看一下具体的内容。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ywhjp
2012-09-28 · TA获得超过1299个赞
知道小有建树答主
回答量:1002
采纳率:60%
帮助的人:427万
展开全部
发送前TI 必须先清零,关中断才行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式