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

 我来答
wannenggong9559f
生活家

2013-07-12 · 关注于个人成长
知道大有可为答主
回答量:3691
采纳率:82%
帮助的人:641万
展开全部
不用很复杂的,就两步: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单片机延时要大些,视数据显示的速度而定,真实应用时,根据具体情况而定。
匿名用户
2013-07-11
展开全部
#include <reg51.h>
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函数就是发送(
 //发送是按照一个字节一个字节的发送)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wdz667
2013-07-11
知道答主
回答量:37
采纳率:0%
帮助的人:21.9万
展开全部
只要在初始化时设置好波特率等,往里面写就会自动发出去了
追问
如果我用C语言控制,不需要关注串口是怎么从缓冲中发的数据,只是设置好波特率就OK了。在请教下,波特率是不是控制计数器产生的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2019-07-12
展开全部
他是串行数据传输,我觉得SUBF可能是在上升\下降沿=时,数据锁存和数据输出(从器件中输出出来),你设置定时器1就是给他一个脉冲,提供上升\下降沿。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式