Buenas, quiero hacerles una consulta, estoy intentando hacer una comunacion entre dos pics, uno tiene un dipsw que su informacion es llevada a otro pic para mostarlo en leds, es decir que la combinacion que se haga en el dipsw de un pic debe ser observada en los leds que estan en el otro pic. tengo agregados unos comandos para un lcd porq lo proximo que debo hacer es que un pic tendra un teclado matricial y el numero debo verlo en el lcd del otro pic. pero eso ya es otra cosa.
este es el codigo para el pic que envia la información al pic receptor:
y este es el codigo para el pic receptor
Cuando lo simulo en proteus no funciona, sera que no estoy usando bien el protocolo rs232?
otra pregunta, cuando conecto los pics debe ser directo los tx con los rc del puerto C? o debo colocar alguna compuerta lógica antes?
este es el codigo para el pic que envia la información al pic receptor:
PHP:
list P=16F877
#include <p16f877.inc>
;**********************ETIQUETAS***************************
#DEFINE HABILITA_LCD BSF PORTC,6
#DEFINE DESHABILITA_LCD BCF PORTC,6
#DEFINE LEE_LCD BSF PORTC,5
#DEFINE ESCRIBE_LCD BCF PORTC,5
#DEFINE MODO_COMANDO BCF PORTC,4
#DEFINE MODO_DATOS BSF PORTC,4
TEMP1 EQU 0X26
TEMP2 EQU 0X27
ORG 0X0000
GOTO INICIO
ORG 0X0200
INICIO
BANKSEL TRISC
MOVLW 0X8F
MOVWF TRISC ;Se habilita los puertos 4,5 y 6 de C
CLRF TRISD ;Todo el puerto D como salida para el LCD
MOVLW 0XFF
MOVWF TRISB ;Todo el puerto D como entrada para el Dipsw
BANKSEL RCSTA
MOVLW 0X90 ; Habilito el RX para datos continuos
MOVWF RCSTA
BANKSEL TXSTA
MOVLW 0X20 ;Velocidad Alta, en modo asíncrono y habilito TX
MOVWF TXSTA
;******************INICIALIZACION DEL LCD********************
CALL TEMP_15MS
MOVLW 0X38
CALL COMANDO_LCD
CALL TEMP_5MS
MOVLW 0X38
CALL COMANDO_LCD
CALL TEMP_5MS
MOVLW 0X38
CALL COMANDO_LCD
CALL TEMP_5MS
MOVLW 0X38 ; Function Set:8 bits, 2 lineas, 5x8 puntos
CALL COMANDO_LCD
CALL TEMP_5MS
MOVLW 0X0C; Display off, cursor on, sin parpadeo
CALL COMANDO_LCD
MOVLW 0X01; Clear display
CALL COMANDO_LCD
MOVLW 0X06; Entry mode set:desplazamiento del cursor a la derecha, pantalla fija
CALL COMANDO_LCD
;******************TEMPORIZADOR 15MS*************************
TEMP_15MS
BANKSEL TEMP1
MOVLW 0X16
MOVWF TEMP1
TEM1
DECFSZ TEMP1,F
GOTO TEM2
RETURN
TEM2
MOVLW 0XFF
MOVWF TEMP2
DECFSZ TEMP2,F
GOTO $-1
GOTO TEM1
;*******************TEMPORIZADOR 5MS************************
TEMP_5MS
BANKSEL TEMP1
MOVLW 0X08
MOVWF TEMP1
DELAY1
DECFSZ TEMP1,F
GOTO DELAY2
RETURN
DELAY2
MOVLW 0XFF
MOVWF TEMP2
DECFSZ TEMP2,F
GOTO $-1
GOTO DELAY1
;************************RUTINAS LCD************************
COMANDO_LCD
BANKSEL PORTD
ESCRIBE_LCD
MODO_COMANDO
HABILITA_LCD
MOVWF PORTD
DESHABILITA_LCD
CALL TEMP_256us
RETURN
;
;*********************TEMPORIZADOR 256us********************
TEMP_256us
BANKSEL TEMP1
MOVLW 0XFF
MOVWF TEMP1
DECFSZ TEMP1,F
GOTO $-1
RETURN
DATOS_LCD
BANKSEL PORTD
ESCRIBE_LCD
MODO_DATOS
HABILITA_LCD
MOVWF PORTD
DESHABILITA_LCD
CALL TEMP_256us
RETURN
INTER
BANKSEL PIR1
; btfss PIR1,RCIF ;¿recepcion?
; goto $+ 3 ;No. Falsa interrupcion
; bcf PIR1,RCIF ;Si. Reponer Flag
; movf RCREG,W ;Lectura dato recibido
; movwf PORTB ;Visualiza dato recibido CALL RECIBIR
INT BTFSS PIR1,TXIF
GOTO INT
BCF PIR1,TXIF
MOVF PORTB,W
CALL ENVIAR
GOTO INTER
ENVIAR
movwf TXREG ; envío el dato en acunulador w
bsf STATUS, RP0 ; Pág 1 RAM
Espere btfss TXSTA, TRMT ; transmision completa si es alto
goto Espere
return
end
y este es el codigo para el pic receptor
PHP:
list P=16F877
INCLUDE <P16F877.INC>
org 0x00
GOTO INICIO
GOTO 0X05
INICIO
BANKSEL TRISB
CLRF TRISB ;Todo el puerto B como SALIDA para LOS LEDS
BANKSEL RCSTA
MOVLW 0X90 ; Habilito el RX para datos continuos
MOVWF RCSTA
BANKSEL TXSTA
MOVLW 0X20 ;Velocidad Alta, en modo asíncrono y habilito TX
MOVWF TXSTA
INTER
BANKSEL PIR1
btfss PIR1,RCIF ;¿recepcion?
goto $+ 3 ;No. Falsa interrupcion
bcf PIR1,RCIF ;Si. Reponer Flag
movf RCREG,W ;Lectura dato recibido
movwf PORTB ;Visualiza dato recibido CALL RECIBIR
;INT BTFSS PIR1,TXIF
; GOTO INT
; BCF PIR1,TXIF
; MOVF PORTB,W
; CALL ENVIAR
GOTO INTER
ENVIAR
movwf TXREG ; envío el dato en ACUMULADOR w
bsf STATUS, RP0 ; Pág 1 RAM
Espere btfss TXSTA, TRMT ; transmision completa si es alto
goto Espere
return
end
otra pregunta, cuando conecto los pics debe ser directo los tx con los rc del puerto C? o debo colocar alguna compuerta lógica antes?
Última edición: