les agradesco la ayuda eso tb como que me causaba una indigestion electronica el querer hacer esa coneccion para el rs232
sucede que estoy haciendo la prueba con tres esclavos y un maestro con coneccion rs-485 pero no me enlaza me refiero el maestro esta continuamente enviando una direccion la del esclavo1 2 y 3, a lo cual el esclavo esta en modo escucha hasta que recibe la direccion del maestro en ese instante , el esclavo cambia a modo emisor y el maestro a modo receptor por un tiempo esperando alguna respuesta de su esclavo direccionado , por ejemplo estoy probando con dos pulsadores en el esclavo si se activa determinado pulsador me manda un mensaje al maestro dependiendo del pulsador pulsado y de que esclavo pertenece mediante una pantalla lcd en el esclavo espero para que comprendan adjunto el codigo del maestro y esclavo esta en basic proton , me comunico por medio de interrupciones por la usart , esta transmision funciona ok sies q se coloca directamente pero al poner la red 485 no sucede eso y no creo sea la coneccion de los componentes pues e probado fisica y virtualmente en el proteus con el max487 , les agradeceria si tienen algun ejemplo de un maestro enviando una informacion a sus esclavos y que el esclavo responda sea cual fuese el lenguiaje la verdad por la red no e encontrado nada y ya estoy perdiendo la fe que por eso puse el post de rs232 q tampoco me parece muy profesional , a quien desee ver la simulacion y codigos fuente en hex y basic completos se los puedo enviar a su correo , mi meil es electronando@hotmail.com a continuacion el codigo master y slave :
DEVICE 16F877a
DECLARE XTAL 4
ON_INTERRUPT GOTO INT_RECEPCION
DECLARE LCD_INTERFACE 4
DECLARE LCD_LINES 2
DECLARE LCD_DTPIN PORTB.4
DECLARE LCD_ENPIN PORTB.3
DECLARE LCD_RSPIN PORTB.2
SYMBOL RCIE=PIE1.5
SYMBOL RCIF=PIR1.5
SYMBOL TXIF=PIR1.4
SYMBOL CREN=RCSTA.4
SYMBOL GIE=INTCON.7
DIM K AS BYTE
DIM BUF_RECEP AS BYTE
DIM BUF_TX AS BYTE
SYMBOL BOTA=PORTD.0
SYMBOL BOTB=PORTD.1
SYMBOL BOTC=PORTD.2
SYMBOL MODO=PORTC.0
GIE=0
GOTO SALTO
'*************RUTINA DE INTERRUPCION***********************
INT_RECEPCION:
'MODO=0
IF RCIF=1 THEN
RCIF=0
IF RCSTA.1=1 THEN
CREN=0
CREN=1
GOTO FIN_RECEPCION
ENDIF
IF RCSTA.2=1 THEN
RCSTA.2=0
GOTO FIN_RECEPCION
ENDIF
BUF_RECEP=RCREG
GOSUB ANA_RECEPCION
'INTCON.2=0
'TMR0=0
'GOTO ESPERA_B
ENDIF
FIN_RECEPCION:
RCIF=0
'MODO=1
CONTEXT RESTORE
ENABLE
'**********************FIN DE RUTINA DE INTERRUPCION****************
SALTO:
option_reg=%10000010 'con prescaler 8
RCIE=1
INTCON=0
INTCON.6=1 'PARA INTERUPCION EXTERNAS
intcon.2=0
TRISC.0=0
TRISC.6=0
TRISC.7=1
RCSTA.4=0
RCSTA.4=1
RCSTA=%10010000
TXSTA=%00100100
SPBRG=25
TRISD.0=1
TRISD.1=1
TRISD.2=1
TRISB=0
'DELAYMS 1000
K=48
MODO=1
VUELTAS:
FOR K=49 TO 51
@NOP
@NOP
@NOP
@NOP
@NOP
@NOP
BUF_TX=K
TXREG=K
@NOP
@NOP
ESPERA2:
IF TXIF=0 THEN ESPERA2
@NOP
@NOP
@NOP
@NOP
@NOP
INTCON.2=0
TMR0=150
ESPERA4:
IF INTCON.2=0 THEN ESPERA4
INTCON.2=0
TMR0=0
modo=0
CREN=1
GIE=1
TMR0=0
INTCON.2=0
ESPERA3:
IF INTCON.2=1 THEN
INTCON.2=0
tmr0=0
GOTO ENVIAR
ENDIF
goto espera3
ENVIAR:
modo=1
CREN=0
GIE=0
'DELAYMS 1
NEXT
GOTO VUELTAS
ANA_RECEPCION:
IF BUF_RECEP="H" THEN
CLS
PRINT AT 1,1,"HOLA DE :",BUF_TX 'NO SE POR Q HAY Q RESTARLE
ENDIF
IF BUF_RECEP="C" THEN
CLS
PRINT AT 1,1,"CHAO DE :",BUF_TX
ENDIF
RETURN
en lo anterior se transmite a 9600 baudios
para el salave
DEVICE 16F873a
DECLARE XTAL 4
ON_INTERRUPT GOTO INT_RECEPCION
DECLARE LCD_INTERFACE 4
DECLARE LCD_LINES 2
DECLARE LCD_DTPIN PORTB.4
DECLARE LCD_ENPIN PORTB.3
DECLARE LCD_RSPIN PORTB.2
SYMBOL RCIE=PIE1.5
SYMBOL RCIF=PIR1.5
SYMBOL TXIF=PIR1.4
SYMBOL CREN=RCSTA.4
SYMBOL GIE=INTCON.7
DIM K AS BYTE
DIM BUF_RECEP AS BYTE
DIM BUF_TX AS BYTE
SYMBOL BOTA=PORTD.0
SYMBOL BOTB=PORTD.1
SYMBOL BOTC=PORTD.2
SYMBOL MODO=PORTC.0
GIE=0
GOTO SALTO
'*************RUTINA DE INTERRUPCION***********************
INT_RECEPCION:
IF RCIF=1 THEN
RCIF=0
IF RCSTA.1=1 THEN
CREN=0
CREN=1
GOTO FIN_RECEPCION
ENDIF
IF RCSTA.2=1 THEN
RCSTA.2=0
GOTO FIN_RECEPCION
ENDIF
BUF_RECEP=RCREG
IF BUF_RECEP=49 THEN
CREN=0
'MODO=1
@NOP
@NOP
@NOP
@NOP
IF PORTA.0=0 THEN
BUF_TX="H"
GOTO MANDA
ENDIF
IF PORTA.1=0 THEN
BUF_TX="C"
GOTO MANDA
ENDIF
BUF_TX=0
MANDA:
TMR0=0
INTCON.2=0
ESPERA3:
IF INTCON.2=1 THEN
INTCON.2=0
tmr0=0
GOTO ENVIAR
ENDIF
goto espera3
ENVIAR:
TXREG=BUF_TX
ESPERA2:
IF TXIF=0 THEN ESPERA2
CREN=1
RCIF=0
@NOP
@NOP
ENDIF
ENDIF
FIN_RECEPCION:
RCIF=0
MODO=0
CONTEXT RESTORE
ENABLE
'**********************FIN DE RUTINA DE INTERRUPCION****************
SALTO:
option_reg=%10000001 'con prescaler 4
RCIE=1
INTCON=0
INTCON.6=1 'PARA INTERUPCION EXTERNAS
intcon.2=0
TRISC.0=0
TRISC.6=0
TRISC.7=1
RCSTA.4=0
RCSTA.4=1
RCSTA=%10010000
TXSTA=%00100100
SPBRG=25
TRISD.0=1
TRISD.1=1
TRISD.2=1
TRISA.0=1
TRISA.1=1
ADCON1=7
'DELAYMS 1000
GIE=1
CREN=1
MODO=0
VUELTAS:
@NOP
@NOP
GOTO VUELTAS
END
la coneccion de los max es en modo half duplex