关于51单片机SBUF的理解 10
voidmain(){chushi();while(1){if(flag){ES=0;//标志位确定是否收到数据flag=0;for(i=0;i<6;i++){SBUF=...
void main()
{
chushi();
while(1)
{
if(flag)
{
ES=0; //标志位确定是否收到数据
flag=0;
for(i=0;i<6;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
SBUF=a[j++];
while(!TI);
TI=0;
SBUF=' ';
while(!TI);
TI=0;
ES=1;
}
这是通讯程序的一部分,我有不理解是SUBF只能存一个字节,那么FOR循环怎么把多个字节存进去了. 到底SBUF里面能存多少个字节,它接收数据时是一次性只能收一个字节还是批量性的接收,只是接收时是一个字节一个字节的收,等一个字符串都接收完.那它把数据存到哪里去呢???? 不懂,望高手指点 展开
{
chushi();
while(1)
{
if(flag)
{
ES=0; //标志位确定是否收到数据
flag=0;
for(i=0;i<6;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
SBUF=a[j++];
while(!TI);
TI=0;
SBUF=' ';
while(!TI);
TI=0;
ES=1;
}
这是通讯程序的一部分,我有不理解是SUBF只能存一个字节,那么FOR循环怎么把多个字节存进去了. 到底SBUF里面能存多少个字节,它接收数据时是一次性只能收一个字节还是批量性的接收,只是接收时是一个字节一个字节的收,等一个字符串都接收完.那它把数据存到哪里去呢???? 不懂,望高手指点 展开
2个回答
2012-09-26
展开全部
SBUF实际上是两个部分组成的,一个是这能读的接收字节,一个直只能写的发射字节,由于一个只能读一个只能写,所以在串口通信时使用的是同一个地址。串口通信接收时当接收到一个完整字节时会产生一个接收中断标志,即RI自动硬件置1,此时可以读出该字节,读出之后存放的位置是有程序设计人员自己决定的,如果不管新的数据将覆盖旧的数据,即数据丢失了。发送是,当向SBUF写入一个字节之后,硬件开始自动发送,当8位发送完成,将产生一个发射中断标志,即TI由硬件自动置1。你写入SBUF的数据是无法重新读出的,而只有当发送完成之后才会有一个标志产生。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
呵呵,SBUF得到数据后就发出去了啊,所以可以说他能存无数个字节。你小子上课时候都干嘛去了,
追问
大哥,接收到数据时SBUF是只存一个字节,那么通过上述程序的FOR循环把字符连续接收后再打开中断,那么超过一个字节那其余都放在哪了呢? 另外我上课都特别认真! --------放在其它方面,呵呵,所以没办法,再补回来吧
追答
从本质上来讲,他就是一个8位寄存器,你开不开中断跟他没关系,他该干嘛就在干嘛,就算你没开中断,向他写入数据,他还是发送出去了,你不是还有个 while(!TI); 吗 ,这个就是用来检测写入数据是否发送完毕的,看来你对这些东东的理解还有问题啊,
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询