串口接收到的数据不正确

hujie020904 2007-03-20 10:43:49
我用串口调试助手发00 01 02 03,但接收到的是A0 B0 A4 C0等一些乱码,请教各位大侠!!

我的程序是C写的,用keil编译

#include <at89x51.h>
#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[i]=SBUF;
}

for(i=0;i<10;i++) //发送数据
{
SBUF=astring[i];
while(TI==0);
TI=0;
}
TR1=0;
}


...全文
2097 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
avr315avr 2007-07-16
  • 打赏
  • 举报
回复
请参考:http://www.315avr.com/bbs/dispbbs.asp?boardID=3&ID=41&page=1
以下M48 UART 设计使用的两个例子,均使用IAR AVR 编译测试通过(硬件平台: STK500,仿真器: JTAGICE mkII),请参考。

1、M48 USART 查询发送数据:
2、M48 USART 中断+数据缓冲收发数据:
xkw365 2007-07-11
  • 打赏
  • 举报
回复
看你的设置:
1、你选择了串行工作方式3,它是11位的,1起始位、9数据位、1停止位,你串口助手设置得对吗
2、波特率对吗,用的晶振是多少,算错没有?
3、接线对吗,这看似简单,呵呵
4、用中断,把书看看
希望对你有所帮助
tigedtp 2007-07-11
  • 打赏
  • 举报
回复
每发/收一个字节加延时??
每次使能后加延时!
wz 2007-07-10
  • 打赏
  • 举报
回复
请在232或485使能后加延时??
每发/收一个字节加延时??
tigedtp 2007-07-10
  • 打赏
  • 举报
回复
楼主是不是用232芯片或485转232和电脑通信?如果是的话请在232或485使能后加延时!延时加长点,肯定就没问题了,分都给我吧!哈哈!
wz 2007-07-09
  • 打赏
  • 举报
回复
串口调试精灵发送数据时,加不加空格应该都能接收吧?
coolbixu 2007-07-07
  • 打赏
  • 举报
回复
中断接收,死循环接收都应该没问题。你的程序问题。
wz 2007-07-07
  • 打赏
  • 举报
回复
void serial() interrupt 4 using 3
{
RI=0;
rdata[i]= SBUF;
i++;
}
nktailor 2007-07-06
  • 打赏
  • 举报
回复
MAX232外围的电容是不是用的太大了。
wz 2007-07-06
  • 打赏
  • 举报
回复
我也是只能MCU->PC,
PC->MCU不能:有时乱码,有时只能接受1B,有时一个也收不到(都没有RI置位)

顶啊,同志们...
winampp 2007-05-08
  • 打赏
  • 举报
回复
16进制打钩,然后发送字符中间不要空格。
newman0708 2007-05-07
  • 打赏
  • 举报
回复
波特率
wantieee 2007-04-23
  • 打赏
  • 举报
回复
BAUDRATE
lw820602 2007-04-23
  • 打赏
  • 举报
回复
串口助手的用十六进制发送你选了没有,没有选的是肯定不对的
HEROP 2007-04-08
  • 打赏
  • 举报
回复
中断!!!
注意波特率、校验。
yuheng 2007-04-03
  • 打赏
  • 举报
回复
根据晶振频率计算你的波特率。
单片机的Rx和Tx不要直接连RS232.........估计你不会犯这样的错误。

可以一步一步找出原因:
单片机复位后先让它发送一个字母,比如“A”,以便测试你的发送是否正确,注意不要采用断电/上电的方式使单片机复位,这样的话PC会首先收到一个乱码;只要用一把镊子连一下复位端脚就可以了。
发送正确了,才可以继续测试你的接收。

你的问题是调试方法问题,过几年就有经验了,都是这么走过来的,多努力啊。
DB_xiaogangpao 2007-04-03
  • 打赏
  • 举报
回复
注意波特率
dragon21cen 2007-04-02
  • 打赏
  • 举报
回复
1. 简易的通讯使用中断方式比较可靠;
2. 对于通讯的数据,可以用示波器查出来;
3. 发送数据和接收数据过程中,可以适当的加一些delay来避免数据冲突;
4. RAM允许的情况下最好定义接收数组和发送数组,把接收和发送的数据分开;
5. 注意控制寄存器的赋值。
0001cxg 2007-04-02
  • 打赏
  • 举报
回复
回复人:lbing7(楼主,别再给我非专家分!谢谢合作) ( 五级(中级)) 信誉:100 2007-3-20 23:34:04 得分:0
?

一:强烈要求中断接收
二:先注意一下波特率,寄存器的值最用好芯片手册给出的推荐值
三:不知道你的后面几个接入的信号怎么到位的?
Top
回复人:shen_guang_wu(单片机爱好者) ( 三级(初级)) 信誉:100 2007-3-21 8:27:13 得分:0
?

1、把发送和接收完全分开来调!
2、注意波特率。
xuhua007 2007-03-30
  • 打赏
  • 举报
回复
用中断接收,把波特率设置正确,这两天比较关键
加载更多回复(7)

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧