Autor Tema: Comunicacion con rs232 assembler  (Leído 3466 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Leitax

  • PIC10
  • *
  • Mensajes: 2
Comunicacion con rs232 assembler
« en: 27 de Septiembre de 2010, 00:58:12 »
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:

Código: [Seleccionar]
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 

   
Comunicacion con rs232 assembler
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:
Código 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
Código: [Seleccionar]
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 

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?

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Comunicacion con rs232 assembler
« Respuesta #1 en: 27 de Septiembre de 2010, 14:03:59 »
Hola amigo en este hilo hemos tratado una comunicación entre PIC, mira si puedes sacar algo. Hay ejemplos en C y en ASM

saludos


 

anything