单片机串口通信问题,有个疑问,SBUF做为发送缓存的时候,把数据填写在里面,后会自动通过串口发送?

2025-04-02 13:00:15
推荐回答(4个)
回答1:

不用很复杂的,就两步:1)设定一个内部定时器作为波特率发生器,例如用T1,做下必要的设置如下:
void InitUart()//串口初始化函数
{
SCON = 0x50; //T1工作于方式1
TMOD = 0x20; //T1 8位自动重装
TH1 = 0xf3; //晶体12MHz\波特率2400,其他波特率要重新计算
TR1 = 1; //启动T1
}
2)写个串口发送程序如下:
void SendData(uint dat)//MCU串口数据输出函数
{
SBUF = dat;
while (!TI);
TI = 0;
}
//这里要注意这三条语句的顺序!
应用如下:
/*********主函数***********************************/
main()
{
InitUart();
while(1)
{
ShowResult(10);//可以发送10进制或16进制数据,串口助手里要设定16进制接收
Delay(50);
}
}
//做演示时,要有一个毫秒延时函数相配合;对于普通C51单片机延时可小些,对于1T单片机延时要大些,视数据显示的速度而定,真实应用时,根据具体情况而定。

回答2:

#include 
void InitUART(void)
{
    TMOD = 0x20;
    SCON = 0x50;
    TH1 = 0xFD;
    TL1 = TH1;
    PCON = 0x00;
    EA = 1;
    ES = 1;
    TR1 = 1;
}
void SendOneByte(unsigned char c)
{
    SBUF = c;
    while(!TI);
    TI = 0;
}
void main(void)
{
    InitUART();
}
void UARTInterrupt(void) interrupt 4
{
    if(RI)
    {
        RI = 0;
        //add your code here!
    }
    else
        TI = 0;
}
  //设定计时器的初值就是设定了波特率 那个sendonebyte函数就是发送(
 //发送是按照一个字节一个字节的发送)

回答3:

只要在初始化时设置好波特率等,往里面写就会自动发出去了

回答4:

他是串行数据传输,我觉得SUBF可能是在上升\下降沿=时,数据锁存和数据输出(从器件中输出出来),你设置定时器1就是给他一个脉冲,提供上升\下降沿。