求助各路大神~~串口调试发送的跟接收的不一样怎么破?
时间:10-02
整理:3721RD
点击:
如题~
单片机新手求助啊~~
以下是某个串口调试程序:
/******************************************************************/
#include<reg52.h>//头文件调用,写程序时都要加上
#define uint unsigned int//宏定义,为了后面定义变量书写简便
#define uchar unsigned char
/******************************************************************//*名称:主函数*/
/*内容:打开串口调试程序,将波特率设置为9600,无奇偶校验*/
/*晶振11.0592MHz,发送和接收使用的格式相同,如都使用*/
/*字符型格式,在发送框输入hello,ILoveMCU,在接*/
/*收框中同样可以看到相同字符,说明设置和通信正确*/
/******************************************************************/
void main(void)
{
SCON=0x50;//SCON:模式1,8-bitUART,使能接收
TMOD=0x20;
TH1=0xfd;//波特率9600初值
TL1=0xfd;
TR1=1;
EA=1;//打开总中断
ES=1;//打开串口中断
while(1)
//主循环不做任何动作
{}
}
/******************************************************************//*串口中断程序*/
/******************************************************************/
void UART_SER() interrupt 4
{
uchar Temp;//定义临时变量
if(RI)
{
RI=0;
//标志位清零
Temp=SBUF;
//读入缓冲区的值
P1=Temp;//把值输出到P1口,用于观察
SBUF=Temp;//把+接收到的值再发回电脑端
}
if(TI)
//如果是发送标志位,清零
TI=0;
}
问题:
串口调试窗口里,发送 ‘10 ’接收却是‘ B0’(都是按十六进制显示)等等,反正就是对应不过来
但用LED灯接在单片机引脚上看输出的结果正常!
用其他的一些串口调试程序调试了结果也是发送接收不一致。这是什么问题呢?
急求助各路大神啊~~~~~
单片机新手求助啊~~
以下是某个串口调试程序:
/******************************************************************/
#include<reg52.h>//头文件调用,写程序时都要加上
#define uint unsigned int//宏定义,为了后面定义变量书写简便
#define uchar unsigned char
/******************************************************************//*名称:主函数*/
/*内容:打开串口调试程序,将波特率设置为9600,无奇偶校验*/
/*晶振11.0592MHz,发送和接收使用的格式相同,如都使用*/
/*字符型格式,在发送框输入hello,ILoveMCU,在接*/
/*收框中同样可以看到相同字符,说明设置和通信正确*/
/******************************************************************/
void main(void)
{
SCON=0x50;//SCON:模式1,8-bitUART,使能接收
TMOD=0x20;
TH1=0xfd;//波特率9600初值
TL1=0xfd;
TR1=1;
EA=1;//打开总中断
ES=1;//打开串口中断
while(1)
//主循环不做任何动作
{}
}
/******************************************************************//*串口中断程序*/
/******************************************************************/
void UART_SER() interrupt 4
{
uchar Temp;//定义临时变量
if(RI)
{
RI=0;
//标志位清零
Temp=SBUF;
//读入缓冲区的值
P1=Temp;//把值输出到P1口,用于观察
SBUF=Temp;//把+接收到的值再发回电脑端
}
if(TI)
//如果是发送标志位,清零
TI=0;
}
问题:
串口调试窗口里,发送 ‘10 ’接收却是‘ B0’(都是按十六进制显示)等等,反正就是对应不过来
但用LED灯接在单片机引脚上看输出的结果正常!
用其他的一些串口调试程序调试了结果也是发送接收不一致。这是什么问题呢?
急求助各路大神啊~~~~~
波特率设置是一样的吗
波特率设置是9600 啊~~
您可以复制代码帮我用串口调试看看?
波特率
?我是这样的:
程序里的波特率是9600
串口调试里的波特率也是选9600
还是有其他的什么问题?
或者程序波特率不对(不是9600?)
我用的是12MHz的晶振
是一定要用11.0592的晶振吗?~~~~~~~~~~~~~~~~
我用的是12MHz的晶振
是一定要用11.0592的晶振吗?~~~~~~~~~~~~~~~~
9600的波特率确实应该用11.0592的晶振,12M的误差大,网上有个表格的你可以查查
误差会大到相差这么多吗?...
我明天用11.0592的试试...
对了,请问您有试过我的那个程序吗?
不知道是不是我的一些操作有问题,或者硬件有问题?
没有试过呢,我没有仿真,也没有硬件环境
你明天先试试,不行我再帮你看程序
记得以后用到串口通信的时候一定要用11.0592的,没误差,12M的不行
您试过11.0529的没误差了? 好像发送'fe‘等等是没误差
但发送数字就不行了。
12M晶振误差很大的,我试过了。用11.0592误差会小很多。
会大到发送接收不一致吗?~~
用11.0952会发送接收一致了吗?~
(不好意思,由于时间问题,我还没试过啊~)
嗯,12M的会出现乱码的
嗯嗯...你也是这样吗?~~
我今天用11.0592的测了,正确了!
谢谢~
用11.0592的测了,正确了~
