求指点UART通信的问题。
void ConfigUART(unsigned int Baud);
void main()
{
ConfigUART(9600);
while(1)
{
while(!RI);
RI = 0;
SBUF = SBUF+1;
while(!TI);
TI = 0;
}
}
void ConfigUART(unsigned int Baud)
{
SCON = 0x50;
TMOD &= 0x0f;
TMOD |= 0x20;
TH1 = 256-(11059200/12/32)/Baud;
TL1 = TH1;
TR1 = 1;
}
为什么这段代码扫进单片机后用串口助手返回的信息是81开始呢?不应该是传说0,返回为01么?
串口截图在2楼,请大家不吝赐教~~~
波特率设置可能有问题,再仔细计算一下
检查SMOD位是否为1,你程序中是按加倍来计算的
串口截图~~~~~~~~~~
波特率用的是TI配置9600和串口助手设置的是一直的,应该不是这个问题吧。
PCON=0x80有没有,发送速率加倍
用示波器量一下,1分钟内可以解决
重新设置波特率
大神,我没有示波器耶,还有我没有用PCON = 0x80,这个波特率翻倍我知道。你的意思是波特率出错到这数据传输出错造成的么?但是UART是单片机内部的一个通信模块,不考虑外围电路吧,这个程序我对照了小宋老师的然后改成跟他一样的,可是结果还是不对。
波特率公式不是TH1 = 256-(11059200/12/2/16)/Baud;TL1 = TH1;这个应该没错吧?
PCON 的最高位为1表示波特率翻倍,使用公式256-(11059200/12/32)/Baud
如果PCON的最高位没有设置,为0的话使用公式256-(11059200/12/16)/Baud
反了吧?书上是翻倍为256-(11059200/12/16)/baud;我照你说的改变了波特率为这个后串口显示是从06开始了
是说反了
初始化加一句TI = 1;
清空发送寄存器试试看,因为发送寄存器里面可能有一个初值
或者写成SCON = 0x52
TH = 0xFD //虽然能整除,改一下试试
TL = 0xFD
好的,非常感谢您的指导,谢谢哈
终于决解了,一直以为我的板子用的是11.059200的晶振,刚才看原理图才发现用的是12M的,切12M只能配置1200波特率误差才不会影响到传输出错,所以串口助手也要设置为1200波特率。怪我粗心了,谢谢您能耐心指导,祝您及您的家人生活幸福愉快。谢谢。