我用串口调试助手发00 01 02 03,但接收到的是A0 B0 A4 C0等一些乱码,请教各位大侠!!
我的程序是C写的,用keil编译
#include
#define uint unsigned int
#define uchar unsigned char
uint i=0;
uchar data astring[10];
void main()
{
TMOD=0x20; //初始化串口
TL1=0xfd;
TH1=0xfd;
SCON=0xd8;
PCON=0x80 ;
TR1=1;
for(i=0;i<10;i++) //接收数据
{
while(RI==0);
RI=0;
astring=SBUF;
}
for(i=0;i<10;i++) //发送数据
{
SBUF=astring;
while(TI==0);
TI=0;
}
TR1=0;
}
一:强烈要求中断接收
二:先注意一下波特率,寄存器的值最用好芯片手册给出的推荐值
三:不知道你的后面几个接入的信号怎么到位的?
for(i=0;i<10;i++) //接收数据
{
while(RI==0);
RI=0;
astring=SBUF;
}
是不是应该
while(RI==0);
astring=SBUF;
RI=0;
不好意思,没怎么搞过,随便说说
哎,改了波特率还是接收不正确!,我再继续努力的调试!
串口是否能接收一串ASCII码字符?也就是两个字符中间是否可以没有空格?
例如我发送ASCII码字符串 $%$%&* 串口能否接收到?
你要是初次接触通讯看看你的晶振和你通讯数率的匹配!这个我碰到的初学者好几个了。
1. 简易的通讯使用中断方式比较可靠;
2. 对于通讯的数据,可以用示波器查出来;
3. 发送数据和接收数据过程中,可以适当的加一些delay来避免数据冲突;
4. RAM允许的情况下最好定义接收数组和发送数组,把接收和发送的数据分开;
5. 注意控制寄存器的赋值。
回复人:lbing7(楼主,别再给我非专家分!谢谢合作) ( 五级(中级)) 信誉:100 2007-3-20 23:34:04 得分:0
?
一:强烈要求中断接收
二:先注意一下波特率,寄存器的值最用好芯片手册给出的推荐值
三:不知道你的后面几个接入的信号怎么到位的?
Top
回复人:shen_guang_wu(单片机爱好者) ( 三级(初级)) 信誉:100 2007-3-21 8:27:13 得分:0
?
1、把发送和接收完全分开来调!
2、注意波特率。
根据晶振频率计算你的波特率。
单片机的Rx和Tx不要直接连RS232.........估计你不会犯这样的错误。
可以一步一步找出原因:
单片机复位后先让它发送一个字母,比如“A”,以便测试你的发送是否正确,注意不要采用断电/上电的方式使单片机复位,这样的话PC会首先收到一个乱码;只要用一把镊子连一下复位端脚就可以了。
发送正确了,才可以继续测试你的接收。
你的问题是调试方法问题,过几年就有经验了,都是这么走过来的,多努力啊。
串口助手的用十六进制发送你选了没有,没有选的是肯定不对的
我也是只能MCU->PC,
PC->MCU不能:有时乱码,有时只能接受1B,有时一个也收不到(都没有RI置位)
顶啊,同志们...