Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

26/09/2010 #1

Avatar de Leitax

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 Altaen 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 bits2 lineas5x8 puntos     
    CALL COMANDO_LCD
    CALL TEMP_5MS
    MOVLW 0X0C
Display offcursor onsin parpadeo
    CALL COMANDO_LCD
    MOVLW 0X01
Clear display
    CALL COMANDO_LCD
    MOVLW 0X06
Entry mode set:desplazamiento del cursor a la derechapantalla 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     ;NoFalsa interrupcion
 
;     bcf      PIR1,RCIF      ;SiReponer 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 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 Altaen modo asíncrono y habilito TX
MOVWF TXSTA



INTER   
    BANKSEL PIR1
    btfss   PIR1
,RCIF   ;¿recepcion?
      goto   $+ 
3     ;NoFalsa interrupcion
      bcf      PIR1
,RCIF      ;SiReponer 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?
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.