阅读:1575回复:3
谁精通intel8251A,快来帮帮忙啊
问题: 用8031+8251A和PC机通讯时,两者自收自发都可以,当联机通讯(各将接收到的字节数据发出去,循环)时,8251发的数据PC机再发送,也一切正常,只有PC机做改变(比如加一)后再发送,8251接收就会出错!波特率600-9600都一样。
急!急! 向各位大侠求救!! |
|
|
沙发#
发布于:2002-04-09 23:44
快告诉我呀
|
|
|
板凳#
发布于:2002-04-10 09:12
用户被禁言,该主题自动屏蔽! |
|
地板#
发布于:2002-04-10 14:25
详细说明如下。请多指教。将不胜感激。
工装:8251A与PC机通过三线电缆连接:RXD、TXD、GND。长度<2米。 8251A一端的DTR-DSR短接,RTS-CTS短接。 8031源程序: CSEG AT 0000H LJMP START START: INIT8251: CLR A MOV DPTR,#0FFF9H ;0FFF9H位8251A控制字口地址 MOVX @DPTR,A LCALL DLTIME MOVX @DPTR,A LCALL DLTIME MOVX @DPTR,A LCALL DLTIME MOV ACC,#40H MOVX @DPTR,A LCALL DLTIME MOV ACC,#4EH ;写方式字 MOVX @DPTR,A LCALL DLTIME MOV ACC,#27H ;写命令字 MOVX @DPTR,A LCALL DLTIME MOV ACC,#55H ;准备发送的第一个数据 LOOP: INC ACC ;循环将接收到的数据加一再发送 LCALL SENDCHAR LCALL RECEIVE LCALL DLTIME LJMP LOOP SENDCHAR: PUSH ACC MOV DPTR,#0FFF9H WAITSEND: MOVX A,@DPTR RRC A JNC WAITSEND ;判断发送准备好否 POP ACC MOV DPTR,#0FFF8H ;0FFF8H为8251A数据口地址 MOVX @DPTR,A RET RECEIVE: MOV DPTR,#0FFF9H WAITRECE: MOVX A,@DPTR ANL ACC,#02H JZ WAITRECE ;判断接收到否 MOV DPTR,#0FFF8H MOVX A,@DPTR RET DLTIME: MOV R2,#01H DLTIME1:MOV R3,#10H DLTIME2:MOV R4,#10H DJNZ R4,$ DJNZ R3,DLTIME2 DJNZ R2,DLTIME1 RET END PC机通讯程序确定无误。 错误现象: 当PC机每接收到一字节数据就发送出去,就会看到数据正确的加一循环接收发送(A、B、B、B、C、C、C、D、、、),此时PC机发送的数据8251能正确接收。 但当PC机每接收到一字节数据,就发送出去一个不同的数据(将数据加一:比如接收到D,就发送E),此时数据将出错,传送的数据总是如(D、E、F、D、D、E、F、D、、、),说明PC机发送F,而8251接收到了D。 ()内的数据表示依次是:8251发、PC机收、PC机发、8251收、8251发、PC机收、PC机发、8251收、、、、) 附件为源程序。 |
|
|