使用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进制数)
[解决办法]
波特率不对
[解决办法]