|
本帖最后由 zc222 于 2021-3-29 21:30 编辑 恩恩 试过可以了 多谢指点我看着普中51单片机教学视频学习的,感觉那个教程里面对UART的操作和开发板并不完全匹配,我自己学的有些费劲,请问有没有其他的51的教学视频可以让初学者入门的? |
| 波特率计算的时候,开发板的晶体是多少频率就选多少频率。用的是STC89系列,定时器时钟必须选12T,因为此芯片时钟达不到1T。设置完后,串口使能打开,你忘了打开。串口助手用HEX模式等等。再去摸索吧 |
|
1. 设置 波特率 不加倍 ,通讯用4800,其它不需要设置。 2. 12MHz晶振是有一点点误差的。 3. 用STC-ISP软件,里面有串口助手,会对你有很多帮助的,软件里面有源码,计算器,资料都齐全。 |
|
应该是串口设置不对,以下是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.串口软件校验方式选择无校验 |
|
楼主串口初始化程序UsartInit()只适合12MHz晶振,波特率4800。不可用于9600,误差太大。 如果用11.0592MHz晶振波特率4800,寄存器改为TH1=0XF4;TL1=0XF4; |
| 反复进入发送中断引起的。进中断,第1次是接收中断,后面的都是发送中断。接收的第1个数据应是你发送的数据,可能是波特率不对,或者没有接收到,后面的都是0是对的 |