当前位置: 代码迷 >> 单片机 >> 串口发送接收数据乱码解决思路
  详细解决方案

串口发送接收数据乱码解决思路

热度:14   发布时间:2016-04-28 16:00:40.0
串口发送接收数据乱码
我的单片机串口发送和接收数据的时候老是乱码,波特率的设置我已经试过各种了,还是一样,请问这个问题如何解决呢?

------解决方案--------------------
可能问题:
1、线路连接问题,检查线路,看看是否有错。
2、干扰问题,是否有干扰源?增强接地。
3、串口配置,检查一下,有时候波特率过高会导致这样的情况。
4、你的程序,这个可能性不大,但也是有的。
------解决方案--------------------
假如有示波器的话,楼主,可以从根源一步一步的跟踪UART信号。看到哪里出问题了。。
------解决方案--------------------
乱码还是波特率的设置问题。你那个波特率计算公式不对,所以你初始化设置的实际初值与你计算的数值时不相等的。波特率不对就会出现乱码。我的那个串口发送机就是这样,波特率公式不对。还有就是你发送和接收的格式要想好,调节准确。。。这样你实验几下就行了。如果你的晶振是11.0592M的话,那么9600波特率的初值是TH1=TL1=0xfd;SMOD=0;如果是电脑发送给单片机的话,那么你发送的一般来说默认的是ASSIIC码形式,你那边接收也显示也要是ASSIIC码格式。再自己试试就差不多了。。。。
------解决方案--------------------
#define GetSystemClock() (80000000ul) 这是多少晶震?8千万? 80M ?

下载一个软件自己生成一下都不想搞?还非要等别人给你生成好?

假定晶震是8MHZ的,很难产生一个准确的波特率,用定时器1

C/C++ code
//////////////////////////////////////////////////////////////////////////// 名称: SIO_Init// 说明: 8.0MHZ晶震下初始化串口波特率为1200bps//       8位数据位,1位停止位,无校验// 返回: void void SIO_Init(void){    //////////////////////////////////////    // 禁止串口中断    ES = 0;    //////////////////////////////////////    // SCON    // D7   D6 D5  D4  D3  D2  D1  D0    // SM0 SM1 SM2 REN TB8 RB8 TI  RI    // 0   1   0   0   0   0   0  0    //    // SM0=0 SM1=1 -> 8位UART 波特率可变    SCON = 0x40;    //////////////////////////////////////    // TMOD    // D7   D6  D5 D4    D3   D2  D1 D0    // GATA C/T M1 M0    GATA C/T M1 M0    // 0    0   1  0     ?    ?   ?  ?    //    // 定时器1定时方式2说明:    //     把16位计数器分为两部分,即以TL0为计数器,    // 以TH0作为预置寄存器。初始化时把计数初值分别    // 加载至TL和TH中。当计数溢出时,由预置寄存器TH    // 以硬件方法自动给计数器TL重新加载。    //    TMOD &= 0x0F;    TMOD |= 0x20;    TH1 = 0xDD;    TL1 = 0xDD;    //////////////////////////////////////    // PCON    // D7   D6 D5 D4 D3  D2  D1   D0    // SMOD -  -  -  GF1 GF0 PDWN IDLE    PCON |= 0x80;        //////////////////////////////////////    TR1 = 1;// 启动定时器    REN = 1;// 允许串口接收数据    ES  = 1;// 开启串口中断        //////////////////////////////////////    // EA    // D7 D6 D5  D4 D3  D2  D1  D0    // EA -  ET2 ES ET1 EX1 ET0 EX0    //    // 建议在全部初始化完成后,在主程序中启用    // EA = 1;    //}
  相关解决方案