最近搞一个多机通讯,用的MC3486和MC3487. (MC3486和MC3487为四个集成收发器) MC3486接收端和MC3487的发送端全部接在一起 分别接单片机RXD和TXD,二块芯片的使能端全接 高电平。 实验证明。数据可以正常通过MC3487发送到从机。 主机MC3486接收端数据不能正常接收,断开主机 MC3486接收端,数据能单独接收,也就是说明 MC3486其他三个接收端影响正在接收数据的端口。
问怎么解决? 谢谢。 程序调试基本通过,可交流
接收数据 LJMP MAIN ORG 0023H LJMP SSP ORG 0030H MAIN: MOV SCON,#50H ;串口方式3,允许接收 MOV TH1,#0CCH MOV TL1,#0CCH MOV TMOD,#20H ;定时器工作方式 SETB TR1 ;开定时器 MOV CJAD,#03H ;从机地址 SETB EA SETB ES ; SETB SM2 ;设置接收地址标志 LOOP: SJMP LOOP SSP: CLR ES ;进入中断,关串行中断 PUSH PSW ;至串行数据接收结束 PUSH ACC ;保护现场 JNB RI,$ ; CLR RI ;清接收中断标志 MOV A,SBUF ;取串行数据CLR JNB RB8,SRET ;=0转移 MOV P1,#0D0H ;第九位标志 CJNE A,#03H,SRET MOV P1,#0FH ;地址标志 AJMP SSI SRET: SETB ES POP ACC POP PSW RETI SSI: CLR SM2 MOV SBUF,#03H JNB TI,$ ;等待发送结束 CLR TI ;清发送中断标志 MOV R3,#00H SS2: JNB RI,$ ; CLR RI ;清接收中断标志 MOV A,SBUF ;取串行数据CLR MOV P1,A MOV SBUF,#07H ;接收数据应答信号 JNB TI,$ ;等待发送结束 CLR TI ;清发送中断标志 INC R3 CJNE R3,#08H,SS2 MOV P1,#66H ;接收八位数据结束标志 SETB SM2 AJMP SRET ;返回重新联络接收主机数据 D1: MOV R0,#05H ; DE1: MOV R1,#0FFH ; DE2: MOV R2,#0FFH ; DJNZ R2,$ ; DJNZ R1,DE2 ; DJNZ R0,DE1 RET END ;***************主机程序**************** CJAD EQU 50H ;从机地址 START EQU 51H ORG 0000H LJMP MAIN ORG 0030H MAIN: SETB P0.0 MOV SCON,#50H ;通讯方式允许接收 MOV TL1,#0CCH MOV TH1,#0CCH MOV TMOD,#20H ;定时器工作方式 SETB TR1 ;开定时器 SETB P2.0 CLR P2.1 ACALL D1 CLR P2.0 SETB P2.1 ;运行指示 MIN: MOV 50H,#05H MOV R1,#00H MOV A,R1 MOV R0,#START MOV DPTR,#TAB DDD: MOVC A,@A+DPTR MOV @R0,A INC R0 INC R1 MOV A,R1 CJNE R1,#08H,DDD LP: MOV A,50H ;从机地址 LOOP: LCALL DF MOV P2,#18H SETB TB8 MOV SBUF,A ;发送从机地址 JNB TI,$ ;等待发送结束 CLR TI ;清发送中断标志 MOV P2,#10H JNB RI,$ ;从机发送,主机等待寻址的从机应答 CLR RI ;清接收中断标志 MOV P2,#0FH ;运行标志 LCALL DF MOV A,SBUF ;读从机应答信号 CJNE A,#05H,LP LOP1: MOV R1,#00H ;数据长度 CLR TB8 ;数据帧(只有寻址的从机能收到) MOV R0,#START LOP2: LCALL DF MOV A,@R0 MOV SBUF,A ;发送数据 JNB TI,$ ;等待发送结束 CLR TI ;清发送中断标志 JNB RI,$ ;等待从机应答 CLR RI ;清接收中断标志 MOV A,SBUF ;读应答信息 CJNE A,#01H,LOP1;如非法命令,重发 LCALL DF INC R0 INC R1 CJNE R1,#08H,LOP2 ;------------------------------- LP1: MOV A,#03H LOOP1: LCALL DF MOV P2,#18H SETB TB8 MOV SBUF,A ;发送从机地址 JNB TI,$ ;等待发送结束 CLR TI ;清发送中断标志 MOV P2,#10H JNB RI,$ ;从机发送,主机等待寻址的从机应答 CLR RI ;清接收中断标志 MOV P2,#0FH ;运行标志 LCALL DF MOV A,SBUF ;读从机应答信号 CJNE A,#03H,LP1 LOP11: MOV R1,#00H ;数据长度 CLR TB8 ;数据帧(只有寻址的从机能收到) MOV R0,#START LOP21: LCALL DF MOV A,@R0 MOV SBUF,A ;发送数据 JNB TI,$ ;等待发送结束 CLR TI ;清发送中断标志 JNB RI,$ ;等待从机应答 CLR RI ;清接收中断标志 MOV A,SBUF ;读应答信息 CJNE A,#07H,LOP11;如非法命令,重发 LCALL DF INC R0 INC R1 CJNE R1,#08H,LOP21 AJMP MIN D1: MOV R5,#05H D2: MOV R6,#08H D3: MOV R7,#8FH DJNZ R7,$ DJNZ R6,D3 DJNZ R5,D2 RET DF: MOV R3,#02H DG: ACALL DE DJNZ R3,DG RET DE: MOV R4,#02FH DE1: ACALL D1 DJNZ R4,DE1 RET ORG 0300H TAB: DB 001H,010H,002H,020H,004H,040H,008H,080H END |