Autor Tema: Rutinas para la transmision y recepcion via seria  (Leído 4537 veces)

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

Desconectado kain589

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 324
Rutinas para la transmision y recepcion via seria
« en: 31 de Diciembre de 2005, 13:05:00 »
Hola sé que se trata de un tema bastante trillado, estoy empezando con los micros y ya he usado los distintos modulos y hecho problemas, asi que me propuesto empezar con la comunicacion entre dispositivos. he estado buscando por el foro y me encontre con unas rutinas para el 16f877, las he adaptado y cambiado algunas cosas para el 16f876, pero no me van; todo lo hecho creo que es necesario y que se debe a que falta algo, aunque puede que este mal. si alguien puede decirme que esta mal o si falta algo, muchas gracias y felicitarles por este gran foro tambien espero con el tiempo poder ayudar

Feliz añoRebotado

Codigo:
; PROGRAMA : rx-rs232.asm                          
; Funcion : Escucha puerto serie rs232 y cuando recibe un dato salta la
;       interrupcion y lo muestra en PortB.      
;           Serial port config: 9600 baudios,8 bits,paridad = none              
;
; Programa para : PIC16F876
; CPU Clock : 4 MHz                      Reloj instruccion : 1 MHz = 1 us
;       WDT : Deshabilitado                  Tipo de reloj : XT  
; Code Prot : OFF



      LIST   P = 16F876   ;Se indica el modo de procesador

      INCLUDE   <P16f876.inc>   ;se incluye la definicion de los

;<<<<<<---------------------- VECTOR DE RESET ------------------------>>>>>>>
      ORG   00H      ;Inicio en el Vector de Reset
      
      goto   INICIO      ;Va a la primera instruccion del
               ;programa

;<<<<<<------------------- VECTOR DE INTERRUPCION -------------------->>>>>>>

      ORG   04H      ;Vector de interrupcion


INTER   btfss   PIR1,RCIF   ;¿Interrupcion por recepcion?
      goto   VOLVER      ;No. Falsa interrupcion
      bcf      PIR1,RCIF      ;Si. Reponer Flag
      movf   RCREG,W      ;Lectura dato recibido
      movwf   PORTB      ;Visualiza dato recibido
      

VOLVER   retfie         ;retorna de la interrupcion.
      
      
;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>>

INICIO   clrf   PORTB      ;Limpia salidas
      clrf   PORTC

      bsf   RCSTA,SPEN   ;se activa la USART
      bsf   STATUS,RP0   ;Cambio al banco 1 ------------------
      bcf   STATUS,RP1
      
      clrf   TRISB      ;Puerta B como salida
      clrf   TRISB      ;Puerta B como salida
      movlw   80H         ;RC7/Rx entrada,
      movwf   TRISC       ;RC6/Tx   salida y RC5 Salida.

      movlw   04H   ;Configuracion USART
      movwf   TXSTA      ;y activacion de transmision
      movlw   .207      ;9600 baudios
      movwf   SPBRG
      bsf      PIE1,RCIE   ;Habilitacion interrupcion RX
      bcf      STATUS,RP0   ;Cambio al banco 0 -----------------
      
      bsf      RCSTA,SPEN   ;se activa la USART
      
      movlw   90H   ;Configuracion de la usart
      movwf   RCSTA      ;para recepcion continua
      
      movlw   0C0H   ;Habilitacion para las
      movwf   INTCON      ;interrupciones generales
      
      
      
BUCLE   goto   BUCLE      ;espera aqui hasta que salte la int.


      END



Codigo:
; PROGRAMA : tx-rs232.asm
; Funcion : Transmite 2 bytes por el puerto serie del pic en intervalos de
;       1 segundo.   
;           Serial port config: 9600 baudios,8 bits,paridad = none
;    
;  rograma para : PIC16F876
; CPU Clock : 4 MHz                      Reloj instruccion : 1 MHz = 1 us
;       WDT : Deshabilitado                  Tipo de reloj : XT  
; Code Prot : OFF            


      LIST   P=16F876   ;Se indica el modo de procesador

      INCLUDE   <P16f876.inc>   ;se incluye la definicion de los
               ;registros internos
CounterA   EQU   20h
CounterB   EQU   21h
CounterC   EQU   22h

;<<<<<<---------------------- VECTOR DE RESET ------------------------>>>>>>>
      ORG   00H      ;Inicio en el Vector de Reset
      
      goto   INICIO      ;Va a la primera instruccion del
               ;programa

;<<<<<<------------------- VECTOR DE INTERRUPCION -------------------->>>>>>>

      ORG   04H      ;Vector de interrupcion



;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>>
INICIO   clrf   PORTB      ;Limpia salidas
      clrf   PORTC

      bsf   RCSTA,SPEN   ;se activa la USART
      bsf   STATUS,RP0   ;Cambio al banco 1 -------------
      bcf   STATUS,RP1
      
      clrf   TRISB      ;Puerta B como salida
      movlw   80H   ;RC7/Rx entrada,
      movwf   TRISC       ;RC6/Tx   salida.

      movlw   24H   ;Configuracion USART
      movwf   TXSTA      ;y activacion de transmision
      movlw   .207      ;9600 baudios
      movwf   SPBRG
      bcf   STATUS,RP0   ;Cambio al banco 0 -------------
      
      bsf   RCSTA,SPEN   ;se activa la USART
      

      bsf   STATUS,RP0   ;Cambio al banco 1 -------------
      bcf   STATUS,RP1
      bsf   TXSTA,TXEN   ;Habilita la transmision
      bcf   STATUS,RP0   ;Cambio al banco 0 -------------   
      
bucle   goto   PDelay
      movlw   49H      ;Envia el caracter, valor hex
      movwf   TXREG      ; del codigo ascii
      
      bsf   STATUS,RP0   ;Cambio al banco 1 -------------
      bcf   STATUS,RP1
COMP_TX   btfss   TXSTA,TRMT   ;comprueba si acabo de Tx.
      goto   COMP_TX
      bcf   STATUS,RP0   ;Cambio al banco 0 -------------
      movlw   .50      ;caracter ASCII en decimal
      movwf   TXREG
      goto    bucle

;<<<<<<----------------------- OTRAS RUTINAS ------------------------->>>>>>>
;PIC Time Delay = 1,0000020 s with Osc = 4 MHz
PDelay   movlw   6H
      movwf   CounterC
      movlw   19H
      movwf   CounterB
      movlw   0B2H
      movwf   CounterA
loop      decfsz   CounterA,1
      goto   loop
      decfsz   CounterB,1
      goto   loop
      decfsz   CounterC,1
      goto   loop
      return
   

   
      END

P.D. He escrito el codigo xq no me deja subir archivos, dice que no hay espacio suficiente
Saludos desde Córdoba, españa

inglaof

  • Visitante
Re: Rutinas para la transmision y recepcion via seria
« Respuesta #1 en: 18 de Abril de 2006, 12:51:57 »
Hola, nunca he utilizado el modulo UART del PIC, siempr elo he realizado por software, y bueno, tiene sus ventajas y desventajas...

En rpimer lugar camarada, tenga a la mano el datasheet de este pic, y vamos a ver que vi en su codigo:

No esty seguro si es correcta la configuracion del registro TXSTA al cargarle el 24h, yo probaria con un 22h, lee esto en el datasheet y dime que opinas...

otro dato que si creo es erroneo es el valor que agreaste al SPBRG de 207 decimal, ya que con un reloj de 4MHz, segun la tabla dice que tu velocidad de transmision seria de 0.3 Kbits por segundo, y tu quieres 9600, entonces, segun l atabla, deberas cargar a este registro con el valor 6 decimal. Este si es un detalle que debes modificar inmediatamente, o al menos prestarle atencion.

ya no puedo seguir leyendo tu codigo, pero seguire haciendolo mas tarde a ver que mas encuentro... saludos colega..

Desconectado kain589

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 324
Re: Rutinas para la transmision y recepcion via seria
« Respuesta #2 en: 20 de Abril de 2006, 10:40:09 »
Ya los consegui hacer andar, a partir de los appnotes de microchip, lo que pasa que ya tengo el asm olvidado pues programo en C
Saludos desde Córdoba, españa

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Rutinas para la transmision y recepcion via seria
« Respuesta #3 en: 20 de Abril de 2006, 21:06:08 »
Ya los consegui hacer andar, a partir de los appnotes de microchip, lo que pasa que ya tengo el asm olvidado pues programo en C

Asi como lo tienes configurado, la comunicación será a 1200 bps (BRGH=1).

Como sugerencia fijate que seteas muchas vececs el RCSTA,SPEN, con una sola vez alcanza. 

Además, el punto más importante es que el TRISC<6:7> deben estar en 1 para configurar estos pines como de usart!  Ojo, por mas que el TX sea 'salida' debe estar con el bit de TRISC en 1. Esto configura dichos pines como piens de USART,  pegale un vistazo al datasheet en la seccion de USART y verás .

Otra sugerencia, en el software de recepción no te hace falta activar una interrupción, puedes recibir el dato en el bucle del programa y sacarlo ahi mismo por el puerto B.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Rutinas para la transmision y recepcion via seria
« Respuesta #4 en: 01 de Mayo de 2007, 08:48:59 »
hola,una preguntica.
en la linea de INICIO pone clrf PORTB. para que sirve borrar el puerto b ,si no se ha configurado antes el TRISB? me parece que esa linea esta sobrando.no es asi?
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Rutinas para la transmision y recepcion via seria
« Respuesta #5 en: 01 de Mayo de 2007, 16:07:32 »
ah,en el programa que estoy haciendo ,al poner el clrf PORTB,antes de la conmutacion de paginas y si haber configurado el TRISB.me he dado cuenta de que si que borra las salidas del PORTB.se ve que al reiniciar el pic,TRISB toma el valor de 0x00.y por eso las borra. :lol:

Montando mi primera impresora 3D (Raprep Prusa i3)