串口跟PC机通信的D4和D5位数据异常!第17章实验2

[复制链接]
3028|12
 楼主| gdqinci 发表于 2010-5-30 21:49 | 显示全部楼层 |阅读模式
本帖最后由 gdqinci 于 2010-6-1 11:43 编辑

#include <REG51.H>
#define uchar unsigned char
#define uint unsigned int
uchar a=0xff,b;
//-------------------------------------
void init(void)
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
TR1=1;
ES=1;
EA=1;
}
//-------------------------
void delay(uint k)
{
uint data i,j;
for(i=0;i<k;i++)
    {
  for(j=0;j<121;j++)
     {;}
}
}
//===============
void main(void)
{
delay(2);
init();
while(1)
{
  P1=a;
  if(RI)
  {
   RI=0;
   SBUF=b;
   while(!TI);
111
   TI=0;
   EA=1;
   }
  }
}
//======================
void serial_serve(void) interrupt 4
{
a=SBUF;
b=a;
EA=0;
}

这样的串口通信程序数据投到P0口用8*LED显示出来的D4D5不正确

比如我用串口软件在PC上发1到单片机,然后在P0口显示收到的数据
正常情况下应该是#00000001B 才对
但P0口显示的数据却是#00110001B

如果我用串口软件在PC上发3到单片机,
正常情况下应该是#00000011B 才对
但P0口显示的数据却是#00110011B

不知道为什么总是多了D4D5这两个位??
ayb_ice 发表于 2010-5-31 09:16 | 显示全部楼层
重点查波特率
 楼主| gdqinci 发表于 2010-5-31 09:25 | 显示全部楼层
波特率是9600
用定时器T1工作模式2
串口软件那边的波特率也是9600
PC机系统的串口波特率要不要调呢???
ayb_ice 发表于 2010-5-31 09:26 | 显示全部楼层
是要去验证,不是理论上
 楼主| gdqinci 发表于 2010-6-1 11:38 | 显示全部楼层
可以通讯啊,但就是为什么收到的数据不是发送过来的那个
比如发送:0x01    即相当于#00000001B
收到的是:0x31    即相当于#00110001B

第4和第5位莫名其妙地变成1
 楼主| gdqinci 发表于 2010-6-1 11:40 | 显示全部楼层
书里面的给出的程序例子也是这么写,每次收到数据后都先送去0x30

也就是说书里面预先就知道了收到的数据会多出0x30的,但这是为什么呀???
ayb_ice 发表于 2010-6-1 11:41 | 显示全部楼层
不奇怪的
波特率相差很大<甚至几倍>,都可能可以通信,但数据接收一般是错的,这取决于具体数据
 楼主| gdqinci 发表于 2010-6-1 11:42 | 显示全部楼层
如果是波特率不正确的话那应该是连通讯都不正常的了,但现在是连原书作者都知道收到的数据会多出
0x30  但是为什么会多他在书中就没说了
冷漠 发表于 2010-6-1 13:09 | 显示全部楼层
本帖最后由 冷漠 于 2010-6-1 13:11 编辑

嗨!闹了半天,原来你用串口软件发送的是ASCII码!ASCII码:
0=0x30;
3=0x33;
1=0x31....

不信你发个a,或者b /c/d / f  看看收到得是什么,或者你在PC串口助手软件发送端设定16进制发送。
 楼主| gdqinci 发表于 2010-6-2 08:43 | 显示全部楼层
谢谢,我去看一看
 楼主| gdqinci 发表于 2010-6-2 09:47 | 显示全部楼层
没错那个软件传送的是ASCII码,而0在ASCII码中排位048写成16进制就是0x30

所以传送完成后要显示出来的话必须先减去0x30
shangken 发表于 2010-6-2 13:07 | 显示全部楼层
建议用示波器看一下,你发的数据,然后计算一下波特率,还有就是电平是否正确,你的电平是TTL,计算机的不是,要有转换电平芯片的.
shibao21ic 发表于 2010-6-2 15:44 | 显示全部楼层
我也做过类似的实验,后来也发现是ASCII码问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

341

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部