| ??? 12/22/09 15:42 Read: times |
#171859 - RS485 - MAX3140 |
Dear 8052 Forum:
Anyone with experience using the MAX3140? I am using it with an 89C688 micro. I can successfully Tx/Rx data to the connected RS-485 sensor. However, I am confused as to why it is working! Yes, kinda weird post/question. Let me explain... The following code will successfully Tx 'a' 'b' 'c' 'd' to the connected RS-485 device.
;*************************************************************************
; CNTRL H : Transmit/Recieve to RS-485 Sensor
;**************************************************************************
CMD8: ;WRITE DATA Register to send Tx Character
;
MOV MAX3140_WRITE_REGISTER,#80H ;TE=0; RTS HIGH For Output
MOV MAX3140_WRITE_REGISTER+1,#61H ;Data to Tx 'a'
LCALL WRITE_MAX3140_16BIT_REGISTER
;
;READ DATA Command (MAX3140)
;
MOV MAX3140_WRITE_REGISTER,#00H
MOV MAX3140_WRITE_REGISTER+1,#00H
LCALL WRITE_MAX3140_16BIT_REGISTER
;
;Return Value read from READ Data Command
;
MOV R0,#MAX3140_READ_REGISTER
LCALL SEND_2BYTE
LCALL CRLF
;
;WRITE DATA Register to send Tx Character
;
MOV MAX3140_WRITE_REGISTER,#80H ;TE=0; RTS HIGH For Output
MOV MAX3140_WRITE_REGISTER+1,#62H ;Data to Tx 'b'
LCALL WRITE_MAX3140_16BIT_REGISTER
;
;READ DATA Command (MAX3140)
;
MOV MAX3140_WRITE_REGISTER,#00H
MOV MAX3140_WRITE_REGISTER+1,#00H
LCALL WRITE_MAX3140_16BIT_REGISTER
;
;Display the HB/LB result to Serial Port
;
MOV R0,#MAX3140_READ_REGISTER
LCALL SEND_2BYTE
LCALL CRLF
;
;WRITE DATA Register to send Tx Character
;
MOV MAX3140_WRITE_REGISTER,#80H ;TE=0; RTS HIGH For Output
MOV MAX3140_WRITE_REGISTER+1,#63H ;Data to Tx 'c'
LCALL WRITE_MAX3140_16BIT_REGISTER
;
;READ DATA Command (MAX3140)
;
MOV MAX3140_WRITE_REGISTER,#00H
MOV MAX3140_WRITE_REGISTER+1,#00H
LCALL WRITE_MAX3140_16BIT_REGISTER
;
;Display the HB/LB result to Serial Port
;
MOV R0,#MAX3140_READ_REGISTER
LCALL SEND_2BYTE
LCALL CRLF
;
;WRITE DATA Register to send Tx Character
;
MOV MAX3140_WRITE_REGISTER,#80H ;TE=0; RTS HIGH For Output
MOV MAX3140_WRITE_REGISTER+1,#64H ;Data to Tx 'd'
LCALL WRITE_MAX3140_16BIT_REGISTER
;
;READ DATA Command (MAX3140)
;
MOV MAX3140_WRITE_REGISTER,#00H
MOV MAX3140_WRITE_REGISTER+1,#00H
LCALL WRITE_MAX3140_16BIT_REGISTER
;
;Display the HB/LB result to Serial Port
;
MOV R0,#MAX3140_READ_REGISTER
LCALL SEND_2BYTE
LCALL CRLF
END
Notice, that after each Tx of a character, I have to issue a READ DATA command (MAX3140 register) and then send the contents to the micro's RS-232 and display the contents of the READ DATA register. I cannot simply perform Tx 'a,b,c,d' without performing a Read Data Register. If I do, it will only transmit 'a' 'd'. Just this code will NOT work:
;WRITE DATA Register to send Tx Character
;
MOV MAX3140_WRITE_REGISTER,#80H ;TE=0; RTS HIGH For Output
MOV MAX3140_WRITE_REGISTER+1,#61H ;Data to Tx 'a'
LCALL WRITE_MAX3140_16BIT_REGISTER
.
...
Basically, I MUST include the below code after transmitting (Tx) each character or it will not send the data.
;READ DATA Command (MAX3140)
;
MOV MAX3140_WRITE_REGISTER,#00H
MOV MAX3140_WRITE_REGISTER+1,#00H
LCALL WRITE_MAX3140_16BIT_REGISTER
;
;Display the HB/LB result to Serial Port
;
MOV R0,#MAX3140_READ_REGISTER
LCALL SEND_2BYTE
LCALL CRLF
Any and all comments are welcome. Thanks in advance! |
| Topic | Author | Date |
| RS485 - MAX3140 | 01/01/70 00:00 | |
| SPI SOP | 01/01/70 00:00 | |
| MAX3140 | 01/01/70 00:00 | |
| I have: | 01/01/70 00:00 | |
MAX3140 - Solved | 01/01/70 00:00 |



