找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

51单片机开发板UART通讯错误

查看数: 4577 | 评论数: 9 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-3-21 11:42

正文摘要:

#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16;    ...

回复

ID:893226 发表于 2021-3-29 21:19
本帖最后由 zc222 于 2021-3-29 21:30 编辑

恩恩 试过可以了 多谢指点我看着普中51单片机教学视频学习的,感觉那个教程里面对UART的操作和开发板并不完全匹配,我自己学的有些费劲,请问有没有其他的51的教学视频可以让初学者入门的?
ID:814525 发表于 2021-3-29 09:45
波特率计算的时候,开发板的晶体是多少频率就选多少频率。用的是STC89系列,定时器时钟必须选12T,因为此芯片时钟达不到1T。设置完后,串口使能打开,你忘了打开。串口助手用HEX模式等等。再去摸索吧
ID:814525 发表于 2021-3-29 08:36
由于是STC89系列,如图波特率生成的时候,定时器时钟必须选12T。系统频率选择和仿真板上晶体一样。另外串口使能要自己加上去ES=1;串口助手收发选择HEX模式载试试

捕获.PNG (220.75 KB, 下载次数: 32)

捕获.PNG
ID:207421 发表于 2021-3-28 12:41
1. 设置 波特率 不加倍 ,通讯用4800,其它不需要设置。
2. 12MHz晶振是有一点点误差的。
3. 用STC-ISP软件,里面有串口助手,会对你有很多帮助的,软件里面有源码,计算器,资料都齐全。
ID:814525 发表于 2021-3-28 11:19
应该是串口设置不对,以下是STC_ISP软件 波特率计数器自动生成


void UartInit(void)                //9600bps@11.0592MHz
{
        PCON &= 0x7F;                //波特率不倍速
        SCON = 0x50;                //8位数据,可变波特率
        AUXR &= 0xBF;                //定时器1时钟为Fosc/12,即12T
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //清除定时器1模式位
        TMOD |= 0x20;                //设定定时器1为8位自动重装方式
        TL1 = 0xFD;                //设定定时初值
        TH1 = 0xFD;                //设定定时器重装值
        ET1 = 0;                //禁止定时器1中断
        ES=1;
        TR1 = 1;                //启动定时器1
}

1.程式烧录频率选择11.0592MHz
2.串口软件波特率选择9600bps
3.串口软件校验方式选择无校验
ID:213173 发表于 2021-3-21 20:48
楼主串口初始化程序UsartInit()只适合12MHz晶振,波特率4800。不可用于9600,误差太大。
如果用11.0592MHz晶振波特率4800,寄存器改为TH1=0XF4;TL1=0XF4;
ID:18307 发表于 2021-3-21 16:37
反复进入发送中断引起的。进中断,第1次是接收中断,后面的都是发送中断。接收的第1个数据应是你发送的数据,可能是波特率不对,或者没有接收到,后面的都是0是对的

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

Powered by 单片机教程网

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