找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1558|回复: 7
打印 上一主题 下一主题
收起左侧

怎么设置151T单片机波特率为9600,大概就行

[复制链接]
跳转到指定楼层
楼主
ID:922838 发表于 2021-10-22 10:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
10黑币
打算使用一个HC-08的蓝牙芯片,但感觉波特率设置的不对,我设置发送一个位的时间位9.6us,有没有大佬解决一下,非常感谢

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883698 发表于 2021-10-22 13:28 | 只看该作者
晶振频率是使用多少
回复

使用道具 举报

板凳
ID:298123 发表于 2021-10-22 13:37 | 只看该作者
看数据手册,串口模块和对应寄存器,别人教不会的!
回复

使用道具 举报

地板
ID:922838 发表于 2021-10-22 19:19 | 只看该作者
hz_dyg 发表于 2021-10-22 13:37
看数据手册,串口模块和对应寄存器,别人教不会的!

大佬,你有没有那个IAP15F2K61S2的手册,我试过好多次,不是程序卡死就是无法发送数据
回复

使用道具 举报

5#
ID:922838 发表于 2021-10-22 19:22 | 只看该作者
hz_dyg 发表于 2021-10-22 13:37
看数据手册,串口模块和对应寄存器,别人教不会的!

void InitUART(void)
{
    TMOD = 0x20;
    SCON = 0x50;
    TH1 = 0xD9;
    TL1 = 0xD9;
    PCON = 0x00;
    EA = 1;
    ES = 1;
    TR1 = 1;
}
void SendOneByte(unsigned char c)
{
    SBUF = c;
        while(!TI);
        TI=0;
}
void Uart() interrupt 4
{
        uchar HC08JS;
    if(RI)
    {
        RI = 0;
        HC08JS = SBUF;
        string1(0xCA,HC08JS);
    }
    if(TI)
    {
        TI = 0;
    }
}
这个是我写的部分程序,按道理应该可以,但就是不行,特别是初始化的《SCON=0x50;》这,之前就是卡到这了,把这个注释掉可以运行,但波特率不对
回复

使用道具 举报

6#
ID:213173 发表于 2021-10-22 20:05 | 只看该作者
十点差三分 发表于 2021-10-22 19:22
void InitUART(void)
{
    TMOD = 0x20;

STC官方例程
void UartInit(void)                //9600bps@12.000MHz
{
        PCON &= 0x7F;                //波特率不倍速
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x40;                //定时器时钟1T模式
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //设置定时器模式
        TMOD |= 0x20;                //设置定时器模式
        TL1 = 0xD9;                //设置定时初始值
        TH1 = 0xD9;                //设置定时重载值
        ET1 = 0;                //禁止定时器1中断
        TR1 = 1;                //定时器1开始计时
}

void UartInit(void)                //9600bps@11.0592MHz
{
        PCON &= 0x7F;                //波特率不倍速
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x40;                //定时器时钟1T模式
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //设置定时器模式
        TMOD |= 0x20;                //设置定时器模式
        TL1 = 0xDC;                //设置定时初始值
        TH1 = 0xDC;                //设置定时重载值
        ET1 = 0;                //禁止定时器1中断
        TR1 = 1;                //定时器1开始计时
}
回复

使用道具 举报

7#
ID:624769 发表于 2021-10-22 20:33 | 只看该作者
你加4句,去掉2句,应该就可以了

bit  Uart_Busy;         <== 全局变量 加一句这个

void SendOneByte(unsigned char c)
{
    while(Uart_Busy);         <== 加一句这个
    Uart_Busy = 1;             <== 加一句这个
    SBUF = c;
//        while(!TI);                            <==    你卡死在这里!!! 把这两句去掉
//        TI=0;
}
void Uart() interrupt 4
{
        uchar HC08JS;
    if(RI)
    {
        RI = 0;
        HC08JS = SBUF;
        string1(0xCA,HC08JS);
    }
    if(TI)
    {
        TI = 0;
        Uart_Busy = 0;      <== 加一句这个
    }
}


回复

使用道具 举报

8#
ID:922838 发表于 2021-10-23 13:33 | 只看该作者
188610329 发表于 2021-10-22 20:33
你加4句,去掉2句,应该就可以了

bit  Uart_Busy;

非常感谢啊,已经成功的试出来了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表