怪!怪!怪! (50分)

C

chll

Unregistered / Unconfirmed
GUEST, unregistred user!
我现做一串口通讯程序,发送一个字节地址数据时(第9位为1),单片机能收到大数却
收不到小数,例如我发88(10001000),ef(11101111),ff(11111111)等只要第八位是1的
数据单片机就能收到,但我发11(00010001),23(00100011),45(01000101)等第八位为0
的数据,单片机就收不到。不明白为什么??哪位高手遇到过这样的情况吗??请指教!
 
要再加四个零,这是通讯协议,保留控制位
 
串口。学习。
 
liangtianyi兄,你说的什么意思,我不大明白,4个0怎么加?
我能控制位数吗?
 
如果真要加0的话也不是软件加,PC机的串口硬件会去做的
关键在于你的单片机用什么方式通讯,一帧有几位?
 
单片机采用通讯方式2,一帧为11位,1位起始位,8位数据位,1为可编程控制位(第9位),
1位停止位。我把第9位设成的标志位,如上我所说的大数能过小数过不去。但大数发过去
之后,收的也不对。比如说我发80(10000000),单片机收到的却是00(00000000)。发ee(11101110),
单片机收到的却是7e(01111110)。在发送数据(第9位为0)时,很正常,发什么收什么。
很奇怪?????这是不是与硬件有关???请各位指教??
 
那你在PC上的程序的串口是怎么设置的?
感觉好象两边的帧长度不一样
 
PC机的串口设置为
CommDCB.BaudRate:=9600;
CommDCB.ByteSize:=8;
CommDCB.Parity:=MARKPARITY;
CommDCB.StopBits:=ONESTOPBIT;
一帧也是11位,格式与单片机一样,前几天,我的程序也调试了,大数小数都能收到,
收到的数据也无误,隔两天没试就成这样了。不明白也???郁闷!!!
 
还有谁知道?快讲讲!!
 
使用的是什么单片机?如果是51,在计算波特率时可能存在偏差,我们遇到过这类问题,但我
不搞硬件,你可以尝试
1、降低波特率到4800/2400
2、做一个简单的串口接收程序进行测试,看问题在下位机还是PC.
希望能有帮助。
 
我认为51的UART模式2是不能和PC连的,我做过几次都是不行的,只能用模式1,其实,用模
式1也没什么的,用个TCOMPORT控件就什么事都摆平了,:)
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
706
DelphiTeacher的专栏
D
D
回复
0
查看
688
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
644
DelphiTeacher的专栏
D
顶部