首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

使用51单片机与pc串口通信中数据不一致有关问题

2012-04-13 
使用51单片机与pc串口通信中数据不一致问题我用51单片机与pc机进行串口通讯,上位机软件用的是出口调试助手

使用51单片机与pc串口通信中数据不一致问题
我用51单片机与pc机进行串口通讯,上位机软件用的是出口调试助手3.0,下位机是我自己编的,主要目的是pc向单片机发个数据,单片机接收后向p2口输出,之后再把接收到的数据发给pc。但是我发现pc上发出与收到的数据总是不一致。例如,我用pc输出字符“123”,经单片机传回的字符就变成了“pp?p滎”。不知道是什么原因,还请各位高手赐教。
这使我编的下位机程序:
ORG 00
AJMP MAIN
ORG 23H
LJMP RECEIVE
MAIN:
mov p2,#21h
LCALL URTINIT
AJMP $
RECEIVE:
  MOV A,SBUF ;将缓冲区的数据送到A
  MOV P2,A
  MOV SBUF,a ;将A的数据发回到电脑
  JNB TI,$ ;等待数据发送完毕
  CLR TI ;清发送中断标志
  CLR RI ;清接收中断标志
  RETI ;中断返回
URTINIT:
MOV SCON,#50H ;设置成串口1方式
  MOV TMOD,#20H ;波特率发生器T1工作在模式2上
  MOV TH1,#0FBH ;预置初值 9BTL=2^SMOD/32*FOSC/12/(256-TH1)
  MOV TL1,#0FBH ;波特率9600
  SETB TR1;启动定时器T1
  SETB EA ;CPU所有中断开(IE最高位MSB)
  SETB ES ;串口中断标志位
  RET
end

[解决办法]
单片机内部都是ASCII码,单片机要有解码的程序。串口调试用十六进制显示,十六进制发送。
[解决办法]
楼主上位机发送要选择16进制发送,否则就是发送ascii码了,那么123就在单片机接受时就成了49,50,51(10进制数)
[解决办法]
波特率不对

[解决办法]

探讨
我确实用的是16进制发送和接收,波特率都是96000。我明白楼上的意思了,是我应该在串口调试助手里面输入十六进制代码。但是现在我发送十六进制码“60 61 62 63 64 65 66 67 68 69 70”收到的却是“60 0E 6C 9C F2 1E EC”,而且每次收到的结果还不一样,有时是上面那个结果,有时是“60 1E 9C EE EE 6E 80”,还大家帮忙。

[解决办法]
PC用9600,n,8,1,就是10位,启始是固定的1位。晶振是11.0592是不是对(示波器看看),波特率误差不得大于3%

热点排行