关于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-17
展开全部
SBUF是单片机硬件的串口接收、发送缓存器,软件往SBUF写入数据后,会自动触发单片机硬件的数据发送,发送完毕后硬件将TI 置1,软件等到TI为1后将其清0,并进行下次发送,即再次写入SBUF。
接收数据时,硬件将接收到的数据放入SBUF,并置为SI标志位,软件可使用中断触发或轮询机制发现SI的变化,将数据从SBUF读出,存入设计的目标存储单元。
具体可参考单片机串口部分的手册。
接收数据时,硬件将接收到的数据放入SBUF,并置为SI标志位,软件可使用中断触发或轮询机制发现SI的变化,将数据从SBUF读出,存入设计的目标存储单元。
具体可参考单片机串口部分的手册。
追问
但它只能接收一个字节,那FOR循环中是多个字节,那是怎样理解呢?
追答
For循环是一步一步的执行的啊,循环一次发送一个字节啊。
展开全部
上面的应该是发送程序,SBUF只能发送或接受一个字节,也用不到FOR循环,接受的时候最好有一个判断字节长度的变量,比如定义一个Rxd_Number,具体程序可参考下面
void UsartData(void) interrupt 4 using 2
{
ES = 0; //关串口中断
if(RI)
{
RI = 0;
if(Rxd_Count < Rxd_Number)
{
receive_data[i] = SBUF;
Rxd_Count ++;
}
}
ES = 1;
}
void UsartData(void) interrupt 4 using 2
{
ES = 0; //关串口中断
if(RI)
{
RI = 0;
if(Rxd_Count < Rxd_Number)
{
receive_data[i] = SBUF;
Rxd_Count ++;
}
}
ES = 1;
}
追问
为什么要先关掉串口中断再打开,对接受数据是否有形响,网上有部分人说关掉串口中断会引起数据丢失的情况, 其实上位机发送数据给单片机是按规定时间连续发送么?不管你如何设置程序
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询