首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

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

2012-04-23 
串口发送接收数据乱码我的单片机串口发送和接收数据的时候老是乱码,波特率的设置我已经试过各种了,还是一

串口发送接收数据乱码
我的单片机串口发送和接收数据的时候老是乱码,波特率的设置我已经试过各种了,还是一样,请问这个问题如何解决呢?

[解决办法]
可能问题:
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;    //} 

热点排行