51单片机串口通信乱码。。。闹不清什么问题= =

超级冷兔 2014-10-25 10:22:49
串口显示的应该是“0123456789jiuehskdjfHSKLJsdla47547237836876357425687361463543”,但是当MemoryModel在data里时收到的是“0123456789jiuehskdjfHSKLcdlA4794723w:3w876357425687361463543”,在pdata里收到的是“0123456789jiuehskdjfHSKLJsdla47547x>ëòêòéòäýüx>âû?1463543”,在xdata里收到的是”?å‚)õ‚åƒ:õƒä“"Óï?“,在send_ARRAY里加延时也不行。。。这是怎么回事呢??应该怎样避免?
#include<reg52.h>

#define uint unsigned int
#define uchar unsigned char

uchar array[]="0123456789jiuehskdjfHSKLJsdla47547237836876357425687361463543";

void init(void)
{
PCON=0x00;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
//IT0=1;
EA=1;
ES=1;
//EX0=1;
}

void delayms(uint t)
{
uint i,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--);
}

void send_BYTE(uchar ch)
{
SBUF=ch;
while(!TI);
TI=0;
}

void send_ARRAY(uchar *a)
{
uint i=0;
while(a[i]!='\0')
{
send_BYTE(a[i]);
i++;
//delayms(1);
}
}

void main()
{
delayms(300);
init();
delayms(300);
send_ARRAY(array);
while(1);
}
...全文
1842 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiongfan1234 2015-10-26
  • 打赏
  • 举报
回复
可能是晶振坏了,或波特率设置不适当
qq_32188159 2015-10-21
  • 打赏
  • 举报
回复
0.00.0.0.0.0.0.0.0.0.0.0.0.0.0
pjagz 2015-10-20
  • 打赏
  • 举报
回复
问题应该出在字符集上,发送的与接收的不统一,用UTF-8或ANSI 试试。
bing__1241 2015-10-20
  • 打赏
  • 举报
回复
解决了吗 这个问题我也遇到了
luoanp 2014-12-07
  • 打赏
  • 举报
回复
51运用指针时,如果没有定义好像会不稳定,将 void send_ARRAY(uchar *a) { uint i=0; while(a[i]!='\0') { send_BYTE(a[i]); i++; //delayms(1); } }‘ 改为如下试试看 void send_ARRAY() { uint i=0; while(array[i]!='\0') { send_BYTE(array[i]); i++; //delayms(1); } }
zmc5354 2014-12-06
  • 打赏
  • 举报
回复
晶振和波特率问题!!
zhujinqiang 2014-11-29
  • 打赏
  • 举报
回复
硬件这块 不要用12M晶振 软件:用串口中断触发 协议:注意停止位 奇偶校验等的设置是否2端一致。
lm49s 2014-11-29
  • 打赏
  • 举报
回复
1.波特率匹配吗 2.接线是否接触不良 3.是否存在干扰 4.工作电压稳定吗?
Zyll_FuDan_GZU 2014-11-27
  • 打赏
  • 举报
回复
你用的12M晶振吧,波特率对不上,直接用那个公式,不要算出来赋值。TH1=256-.晶振/12/。。。。。.....
worldy 2014-11-25
  • 打赏
  • 举报
回复
while(!TI);这类用法不可取,使用串口中断,每次中断(TI)或接收(RI)发送一个字节
hyj41174 2014-11-25
  • 打赏
  • 举报
回复
void send_BYTE(uchar ch) { SBUF=ch; while(!TI); TI=0; } 改成如下 试试看 void send_BYTE(uchar ch) { TI=0; SBUF=ch; while(!TI); }
of123 2014-10-27
  • 打赏
  • 举报
回复
偶发性的错误,重点考虑一下干扰。可以试试降低波特率。
  • 打赏
  • 举报
回复
有可能是奇偶校验位不对,或者双方的波特率不匹配
aijie099 2014-10-26
  • 打赏
  • 举报
回复
连线太长还有干扰之类的。或者 接收端 采样 不够。
zhxianbin 2014-10-25
  • 打赏
  • 举报
回复
不知道说什么

27,510

社区成员

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

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