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就好了
关于51单片机SBUF问题
答案:2 悬赏:40 手机版
解决时间 2021-01-02 15:12
- 提问者网友:雨不眠的下
- 2021-01-01 20:06
最佳答案
- 五星知识达人网友:像个废品
- 2021-01-01 20:49
SBUF是单片机硬件的串口接收、发送缓存器,软件往SBUF写入数据后,会自动触发单片机硬件的数据发送,发送完毕后硬件将TI 置1,软件等到TI为1后将其清0,并进行下次发送,即再次写入SBUF。
接收数据时,硬件将接收到的数据放入SBUF,并置为SI标志位,软件可使用中断触发或轮询机制发现SI的变化,将数据从SBUF读出,存入设计的目标存储单元。
具体可参考单片机串口部分的手册。
接收数据时,硬件将接收到的数据放入SBUF,并置为SI标志位,软件可使用中断触发或轮询机制发现SI的变化,将数据从SBUF读出,存入设计的目标存储单元。
具体可参考单片机串口部分的手册。
全部回答
- 1楼网友:十年萤火照君眠
- 2021-01-01 21:46
上面的应该是发送程序,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;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯