昏天黑地一场,终于找到原因。原来是晶振12M和11.0592M 偏差的原因!
仿真器默认晶振是12M,编程序却按照用户板晶振11.0592M设定波特率9600,也就是TH1=0xFD; 结果造成单片机一方发送波特率偏差。
现象也好解释了,(总是事后醒悟)异步通信11位一帧是为了双方频率偏差重新同步的。所以当发送0x4A/0x8A时,先发送低位,前面的发送位偏差不大,能识别正确,后面的位积累负偏差越来越大,造成高位发送提前识别,(11.0592M比12M 位脉冲串窄)所以4被认为2,8被误判为4。
|
|