Autor Tema: comunicacion serial.. registros  (Leído 3282 veces)

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

Desconectado Golden_Eagle

  • PIC16
  • ***
  • Mensajes: 135
comunicacion serial.. registros
« en: 27 de Enero de 2004, 14:27:00 »
pues resulta que encontre este asm para recibir y transmitir datos via rs-232, el problema es que quiero necesito recibir y almacenar 2 bytes en sus respectivos registros y realmente estoy cansado de probar todas las cosas que se me ocurren , y no funcionan....

aca esta el asm. cualquier ayuda o comentario es bienvenido:

; Programa:   Comunicación asíncrona a PC vía RS232
; Autor:   Danilo García
; Fecha:   Mayo de 1999
;       El programa recibe un byte por el pin RX
;      para luego enviarlo por el pin TX.
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
; Parámetros de comunicación RS232: 9600,N,8,1
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   list p=16f84
#include <p16f84.inc>
;
;PALABRA DE CONFIGURACIÓN:
;
   __CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC
;
;===========================================================================
#DEFINE   BANK0   BCF   STATUS,RP0
#DEFINE   BANK1   BSF   STATUS,RP0
TRUE   EQU   1
FALSE   EQU   0
;===========================================================================
;DEFINICION DE BITS:
;
#DEFINE   RX   PORTB,0
#DEFINE   TX   PORTB,1
;
;===========================================================================
;DEFINICION DE VARIBLES
;
DATO   EQU   0x0C   ;Dato a Transmitir o Recibido RS232
RET1   EQU   0x0D   ;para retardo de bit RS232
RET2   EQU   0x0E   ;para retardo de bit RS232
CONT8   EQU   0x0F   ;Contador de bits en rutinas RX y TX
;===========================================================================
   ORG 0
   GOTO   INICIO
;===========================================================================
   ORG 4
INTERRUPCION
   BTFSS   INTCON,INTF   ;COMPROBACIÓN DE INTERRUPCION INT
   RETFIE
;
   CALL   RXDATO
   XORLW   TRUE
   BZ   TX_DATO
   BCF   INTCON,INTF   ;BORRA BANDERA INT
   RETFIE
TX_DATO
   CALL   TXDATO
   BCF   INTCON,INTF   ;BORRA BANDERA INT
   RETFIE
;***************************************************************************
;**********        RUTINAS DE COMUNICACION ASINCRONA     *******************
;***************************************************************************
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RXDATO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   BTFSS   RX
   GOTO   RXBYTE
   RETLW   FALSE
RXBYTE
   CALL   TIME2
   MOVLW   8
   MOVWF   CONT8
BIT   CALL   TIME
   RRF   DATO,F
   BCF   DATO,7
   BTFSC   RX
   BSF   DATO,7
   DECFSZ   CONT8,F
   GOTO   BIT
   CALL   TIME2
   RETLW   TRUE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TXDATO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   MOVLW   8
   MOVWF   CONT8
   BCF   TX
BIT2
   CALL   TIME
   RRF   DATO,F
   BTFSS   STATUS,C
   BCF   TX
   BTFSC   STATUS,C
   BSF   TX
DECON
   DECFSZ   CONT8,F
   GOTO   BIT2
   CALL   TIME
   BSF   TX
   CALL   TIME
   RETURN
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME2         ;RETARDO DE 52 uS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   MOVLW   1
   MOVWF   RET1
T1
   MOVLW   .14
   MOVWF   RET2
T2
   DECFSZ   RET2,F
   GOTO   T2
   DECFSZ   RET1,F
   GOTO   T1
   NOP
   RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME         ;104 uS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   MOVLW   1
   MOVWF   RET1
T3
   MOVLW   .28
   MOVWF   RET2
T4
   DECFSZ   RET2,F
   GOTO   T4
   DECFSZ   RET1
   GOTO   T3
   NOP
   NOP
   RETURN
;***************************************************************************
INICIO
;
;PROGRAMACION DE LOS PUERTOS
   BANK1
   BCF   TX         ;PROGRAMA PIN TX COMO SALIDA
   BCF   OPTION_REG,INTEDG   ;PROGRAMA INT CON FLANCO DE BAJADA
   BANK0
;
;PROGRAMACION DE LA INTERRUPCION INT(RB0)
;
   BSF   INTCON,INTE   ;HABILITA INTERRUPCIÓN INT
   BSF   INTCON,GIE   ;HABILITA INTERRUPCIONES GLOBALMENTE
;
;ESPERA LA INTERRUPCION
   GOTO   $
;
   END

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: comunicacion serial.. registros
« Respuesta #1 en: 27 de Enero de 2004, 15:39:00 »
Una pregunta, eres capaz de recibir sólo uno?. Sólo para saber si la rutina funciona.

Saludos!
Saludos desde Huelva (ESPAÑA)

Desconectado Golden_Eagle

  • PIC16
  • ***
  • Mensajes: 135
RE: comunicacion serial.. registros
« Respuesta #2 en: 27 de Enero de 2004, 15:52:00 »
sisi, la rutina funciona de maravilla, al menos para recibir, no probe la transmision porque no tengo un max 232 disnponible...
pero recibe los datos y los guarda en el registro DATO perfectamente.
 
mi problemas es hacer que los datos entrantes pasen de DATO a otros 2 registros de forma alternada.. osea, el primer byte recibido pasa a DATOX  el segundo a DATOY.

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: comunicacion serial.. registros
« Respuesta #3 en: 27 de Enero de 2004, 16:55:00 »
Tengo el ensamblador algo oxidado. Pero bueno, mira si así funciona y ya me cuentas...
Codigo:

; Programa: Comunicación asíncrona a PC vía RS232
; Autor: Danilo García
; Fecha: Mayo de 1999
; El programa recibe un byte por el pin RX
; para luego enviarlo por el pin TX.
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
; Parámetros de comunicación RS232: 9600,N,8,1
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   list p=16f84
#include <p16f84.inc>
;
;PALABRA DE CONFIGURACIÓN:
;
   __CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC
;
;===========================================================================
#DEFINE BANK0 BCF STATUS,RP0
#DEFINE BANK1 BSF STATUS,RP0
TRUE EQU 1
FALSE EQU 0
;===========================================================================
;DEFINICION DE BITS:
;
#DEFINE RX PORTB,0
#DEFINE TX PORTB,1
;
;===========================================================================
;DEFINICION DE VARIBLES
;
DATO EQU 0x0C ;Dato a Transmitir o Recibido RS232
RET1 EQU 0x0D ;para retardo de bit RS232
RET2 EQU 0x0E ;para retardo de bit RS232
CONT8 EQU 0x0F ;Contador de bits en rutinas RX y TX
FLAG_COM EQU 0x10
DATOX EQU 0x11
DATOY EQU 0X12
;===========================================================================
   ORG 0
   GOTO INICIO
;===========================================================================
   ORG 4
INTERRUPCION
   BTFSS INTCON,INTF ;COMPROBACIÓN DE INTERRUPCION INT
   RETFIE
;
   CALL RXDATO
   XORLW TRUE
   BZ TX_DATO
   BCF INTCON,INTF ;BORRA BANDERA INT
   RETFIE
TX_DATO
   CALL TXDATO
   BCF INTCON,INTF ;BORRA BANDERA INT
   RETFIE
;***************************************************************************
;********** RUTINAS DE COMUNICACION ASINCRONA *******************
;***************************************************************************
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RXDATO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   BTFSS RX
   GOTO RXBYTE
   RETLW FALSE
RXBYTE
   CALL TIME2
   MOVLW 8
   MOVWF CONT8
BIT
   CALL TIME
   RRF DATO,F
   BCF DATO,7
   BTFSC RX
   BSF DATO,7
   DECFSZ CONT8,F
   GOTO BIT
   CALL TIME2
   BTFSC FLAG_COM,0
   GOTO BIT_Y
   BSF FLAG_COM,0
   MOVF DATO
   MOVWF DATOX
   GOTO SALIR
BIT_Y   
   BCF FLAG_COM,0
   MOVF DATO
   MOVWF DATOY
SALIR   
   RETLW TRUE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TXDATO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   MOVLW 8
   MOVWF CONT8
   BCF TX
BIT2
   CALL TIME
   RRF DATO,F
   BTFSS STATUS,C
   BCF TX
   BTFSC STATUS,C
   BSF TX
DECON
   DECFSZ CONT8,F
   GOTO BIT2
   CALL TIME
   BSF TX
   CALL TIME
   RETURN
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME2 ;RETARDO DE 52 uS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   MOVLW 1
   MOVWF RET1
T1
   MOVLW .14
   MOVWF RET2
T2
   DECFSZ RET2,F
   GOTO T2
   DECFSZ RET1,F
   GOTO T1
   NOP
   RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME ;104 uS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   MOVLW 1
   MOVWF RET1
T3
   MOVLW .28
   MOVWF RET2
T4
   DECFSZ RET2,F
   GOTO T4
   DECFSZ RET1
   GOTO T3
   NOP
   NOP
   RETURN
;***************************************************************************
INICIO
;
;PROGRAMACION DE LOS PUERTOS
   BANK1
   BCF TX ;PROGRAMA PIN TX COMO SALIDA
   BCF OPTION_REG,INTEDG ;PROGRAMA INT CON FLANCO DE BAJADA
   BANK0
;
;PROGRAMACION DE LA INTERRUPCION INT(RB0)
;
   BSF INTCON,INTE ;HABILITA INTERRUPCIÓN INT
   BSF INTCON,GIE ;HABILITA INTERRUPCIONES GLOBALMENTE
;
   ;ESPERA LA INTERRUPCION
   GOTO $
;
   END




Oye, mira que no esté pisando ninguna dirección en los registros que creé. Los he puesto a continuación de la última dirección que creastes, la 0x0F

Saludos!!
Saludos desde Huelva (ESPAÑA)

Desconectado Golden_Eagle

  • PIC16
  • ***
  • Mensajes: 135
RE: comunicacion serial.. registros
« Respuesta #4 en: 27 de Enero de 2004, 17:15:00 »
GRACIAS por la ayuda
lamentablemente no me falta otro poquito
Agregue este codigo en el prorgama principal:

bucle   btfsc   datox,0
   call     dataout
   goto         bucle
   
dataout   movf   datoy,0
   movwf   0x05
   retlw   0


supuestamente si yo envio desde mi pc  2 bytes: FF y luego FF,
no deberia obtener 1"s desde RA0 hasta RA3?  (ya configure el puerto como salida)

otra duda, a donde me lleva el "GOTO $" que esta en las ultimas lineas??  pues yo estoy reemplazando eso por mi bucle.

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: comunicacion serial.. registros
« Respuesta #5 en: 27 de Enero de 2004, 17:29:00 »
Pues si, eso parece. Lo que no entiendo es lo del final, lo de retlw 0. Supongo que a este trozo de código llega desde un call.
Si el resto del programa fuciona, esto debería de hacerlo. Creo que sí.
Una cosa, probastes ese código. Enviando sólo un byte, osea, tal y como estaba al principio.

Saludos.
Saludos desde Huelva (ESPAÑA)

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: comunicacion serial.. registros
« Respuesta #6 en: 27 de Enero de 2004, 17:33:00 »
goto $ es un bucle infinito. Se queda ahí hasta que ocurre la interrupción. Una vez atendida la interrupción vuelve a donde estaba, que en este caso sería ese goto $. Y vuelta a esperar...

Si es eso lo único que has añadido por el goto, y no hay llamada desde un call, cambia el retlw 0 por el goto $. Y el resto lo dejas como está.

Saludos.
Saludos desde Huelva (ESPAÑA)

Desconectado Golden_Eagle

  • PIC16
  • ***
  • Mensajes: 135
RE: comunicacion serial.. registros
« Respuesta #7 en: 27 de Enero de 2004, 17:44:00 »
el call esta en la segunda linea de mi bucle


Desconectado Golden_Eagle

  • PIC16
  • ***
  • Mensajes: 135
RE: comunicacion serial.. registros
« Respuesta #8 en: 27 de Enero de 2004, 18:04:00 »
ahora si que estoy desorientado

si saco el 1° nibble  de DATO por RA(0-3) , obtengo lo que envio desde la pc. perfecto!!

el problema es que si saco DATOX, o DATOY la lectura que obtengo en la salida del puerto es 0xE, sin importar lo que mando desde la pc.

Desconectado Golden_Eagle

  • PIC16
  • ***
  • Mensajes: 135
RE: comunicacion serial.. registros
« Respuesta #9 en: 27 de Enero de 2004, 18:13:00 »
Pues si, tienes que echarle un poco de lubricante a tu asm

"BTFSC FLAG_COM,0
   GOTO BIT_Y
   BSF FLAG_COM,0
   MOVF DATO
   MOVWF DATOX
   GOTO SALIR
BIT_Y   
   BCF FLAG_COM,0
   MOVF DATO
   MOVWF DATOY"

"MOVF DATO"  =  "MOVF DATO,1"   (para guardar el valor en W teniamos que poner "MOVF DATO,0" )

Te agradesco muchisimo por la ayuda!!! realmente ya pensaba postergar mi proyecto para mañana, pero me devolviste las ganas de segir intentando.  

soy novato en el tema, pero ya puedes contar conmigo para lo que necesites.   saludoss!!

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: comunicacion serial.. registros
« Respuesta #10 en: 27 de Enero de 2004, 18:25:00 »
Marchando una de 3en1, jejeje. Pues sí, cierto, me dí cuenta cuando lo estaba escribiendo, pero me equivoqué al recordar. Creí que lo ponía por defecto a 0.
Bueno, solucionado no!!

Saludos y suerte!
Saludos desde Huelva (ESPAÑA)