Autor Tema: comunicacion usart 16f84  (Leído 3018 veces)

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

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
comunicacion usart 16f84
« en: 06 de Enero de 2009, 14:12:53 »
hola.me hacia falta un ejemplo en asm para realizar la comunicacion entre un pic y el pc ,mediante usart.
y quiero utilizar un 12f508.
si hubiera algun codigo en asm,aunque fuera para el 16f84 lo agradeceria.he estado buscando por el foro y no he encontrado nada.
y como tenga que realizarlo yo mismo,me van a dar las uvas.por falta de tiempo.

saludos.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: comunicacion usart 16f84
« Respuesta #1 en: 10 de Enero de 2009, 07:09:04 »
hola
en este foro tienes un ej de Tx sin utilizar el modulo usart mira a ver si te sirve. Y si no, pues habrá que hacerla  :mrgreen:. pero no hay ningun chiquitin de esos, que tenga usart??

un saludo

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: comunicacion usart 16f84
« Respuesta #2 en: 10 de Enero de 2009, 13:31:39 »
muchas gracias por tu respuesta.en este ejemplo,se realiza la transmision por un solo pin.pero no sera muy dificil ajustarlo para las dos señales separadas tx rx.
aunque por lo que veo,para 115.200  kbps se necesita un cristal de 18.432Mhz y el 12f508 solo los tengo de 4Mhz.

habra que calcular que cristal me puede servir, o igual con realizar otro programa para un cristal que se acerque al baudrate que nos interese.
yo creo que el de 4.192Mhz podria servir.
de todas formas voy a usar el 16f876 para el primer circuito y luego ya vere como hacer funcionar el 12f508.


he comprado este gps por 9,90€ y aprobechar su circuito bluetooth para hacer conexiones entre el pc y circuitos con pics.



ya se que en el mercado hay modulos preparados para esto.pero salen bastante caros.y estas navidades no me ha tocado la loteria para dar rienda suelta a mi imaginacion.jeje

y hay una  cosa que no entiendo muy bien.

cuando conecto el gps al hiperterminal de windows,sea cual sea la velocidad de usart que selecciono en el hiperterminal.funciona la coneccion con el gps.
y segun veo en la primera respuesta del gps.

þ$Version NAVMAN GPS 2.3.5 BT3                             
$TOW: 0       
$WK:  1192         
$POS: 6378137  0        0                         
$CLK: 96000           
$CHNL:12       

$Baud rate: 57600  System clock: 12.277MHz                                         
$HW Type: S2AM             
$Asic Version: 0x23                   
$Clock Source           
$Clock Source           


la conexion que se especifica es de 57.600 kbps aunque creo que se refiere a la conexion entre el circuito del gps y el circuito del chip bluetooth.
entonces no se de que sirve especificar la velocidad en el hiperterminal.a no ser que la velocidad de conexion solo sirva para conectar la usart de nuestro pc al modulo bluetooth interno de este.y por consiguiente por eso da igual que velocidad especificar en el iperterminal.si la conexion se realiza dando un salto entre
diferentes sistemas de transmision.me equivoco?







Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: comunicacion usart 16f84
« Respuesta #3 en: 11 de Enero de 2009, 21:50:44 »
bueno,de momento estoy realizando las pruevas para la utilizacion de la usart de un 16f876.
he podido hacer dos programas separados para la transmision y recepcion de datos.
aqui:

http://www.todopic.com.ar/foros/index.php?topic=24397.0

ahora estoy haciendo una mezcla de los dos programas para que se pueda recivir y transmitir al mismo tiempo.pero dando prioridad a los datos que se hayan enviado o recivido antes.
este programa utiliza la interrupcion por recepcion de datos.y solamente se utilizara el envio de datos cuando se llame a la subrutina de envio de datos.

el programa de prueva,se basa en el envio continuo de datos del puerto A,hacia el hiperterminal de windows.
y la recepcion de datos en el puerto B del pic, al pulsar cualquier tecla del pc.

los caracteres son recividos perfectamente en el hiperterminal.pero el problema esta en que al pulsar una tecla del pc.
el pic solo saca el dato por el puerto B si desconectamos el cable que va al pin Tx del pic.

he intentado deshabiltar este pin por software.para que cuando se reciva un dato por el pin Rx,la interrupcion salte y  deshabilite Tx.pero no encuentro la forma.de que funcione.no se si es problema de que el hiperterminal no puede hacer dos cosas a la vez o el pic no lo admita.

aqui pongo el asm por si alguien ve algun fallo.


;****************************************** http://www.ingeniopic.com *******
; PROGRAMA : usart_rx_tx.asm
; Funcion : visualizar datos recividos de la usart por el puerto B y transmitir el valor del puerto A.por la usart interna del pic. .
;           Serial port config: 9600 baudios,8 bits,paridad = none
;   
;  Revision : 1.0        6/1/2009            Programa para : PIC16F876
; CPU Clock : 4 MHz                      Reloj instruccion : 4 MHz = 0.25 us
;       WDT : Deshabilitado                  Tipo de reloj : XT 
; Code Prot : OFF                        velocidad usart: 9.600 Kbps
;****************************************** http://www.ingeniopic.com *******

            LIST   P=16F876         ;Se indica el modo de procesador
     
            RADIX   HEX            ;Sistema de numeracion hexadecimal

            INCLUDE   <P16f876.inc>  ;se incluye la definicion de los registros
               ;registros internos
            __CONFIG    _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC & _BODEN_OFF &_LVP_OFF &_CPD_OFF &_WRT_ENABLE_OFF
            ERRORLEVEL      -302     ;para que no se notifiquen los errires por los registros fuera del banco de ram.

CounterA      EQU  20h            ;registros para retardo
CounterB      EQU  21h
CounterC      EQU  22h
W_TEMP         EQU    23h
STATUS_TEMP   EQU    24h
PCLATH_TEMP   EQU    25h   
                 
BANK0         MACRO               ;macro para la seleccion del banco 0
            BCF   STATUS,RP0
            BCF   STATUS,RP1
            ENDM

BANK1         MACRO               ;macro para la seleccion del banco 1
            BSF   STATUS,RP0
            BCF   STATUS,RP1
            ENDM

PUSH      MACRO
         movwf   W_TEMP         ;SALVO EL REGISTRO W
            swapf   STATUS,W
            movwf   STATUS_TEMP      ;SALVO EL REGISTRO STATUS
            clrf      STATUS         ;TRABAJO EN BANK 0
            movfw   PCLATH         ;SALVO EL REGISTRO PCLATH
           movwf   PCLATH_TEMP
            clrf      PCLATH
         ENDM

POP         MACRO                  
         movfw   PCLATH_TEMP
            movwf   PCLATH
            swapf   STATUS_TEMP,W
            movwf   STATUS
            swapf   W_TEMP,F
            swapf   W_TEMP,W
         ENDM


   #define      GIE_ON   bsf      INTCON,GIE
   #define      GIE_OFF   bcf      INTCON,GIE
   #define      RX_ON   bsf      RCSTA,4
   #define      RX_OFF   bcf      RCSTA,4
   #define      TX_ON   bsf      TXSTA,5
   #define      TX_OFF   bcf      TXSTA,5

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

            ORG   0x04            ;Vector de interrupcion

           goto   INTER         ;salta a la linea INTER

;<<<<<<----------------- CONFIGURACION DE LOS REGISTROS GENERALES ------------------->>>>>>>
INICIO      BANK0               ;Cambio al banco 0
         clrf   PORTA
           
         movlw   b'10010000'      ;Configuracion de la usart
            movwf   RCSTA            ;para recepcion continua y habilitacion de la usart
            movlw   b'11000000'      ;Habilitacion para las
            movwf   INTCON         ;interrupciones generales
           

         BANK1
         movlw   0x06         ;configura PORTA como entradas digitales
           movwf   ADCON1
         movlw   0xff
            movwf   TRISA         ;PORTA como entrada de datos
            clrf   TRISB            ;Puerto B como salida
            bsf      TRISC,7         ;RC7/Rx como entrada
         bcf      TRISC,6          ;RC6/Tx como salida     
            movlw   .25            ;valor para seleccionar 9600 baudios
            movwf   SPBRG
            movlw   b'00100100'      ;Configuracion USART modo alta velocidad 9600 baud y activacion de transmision
            movwf   TXSTA            ;carga valor anterior en registro asociado al generador del baud rate
            bsf     PIE1,RCIE      ;Habilitacion interrupcion RX
         BANK0
         clrf      PORTB         ;borra las salidas del puerto b
   
           
;<<<<<<<<-----------------------------PROGRAMA PRINCIPAL--------------------------->>>>>>>>>>>>>>>>>>>>>>>>     
            nop                  ;aqui se pondra el programa principal y cuando queramos mandar un datos,
         nop                  ;solo tendremos que hacer un salto al programa de envio de datos "ESCRIBEDATO"
PRINCIPAL   call   ESCRIBEDATO      
         GOTO   PRINCIPAL
;<<<<<<<<-------------------------------ENVIO DE DATOS--------------------------->>>>>>>>>>>>>>
ESCRIBEDATO   GIE_OFF
         BANK0
         RX_OFF
         movfw   PORTA
         movwf   TXREG
         BANK1
COMP_TX     btfsc   TXSTA,TRMT      ;comprueba si el shift register(TSR)esta lleno.y si es asi salta.
            goto      COMP_TX
         BANK0
         RX_ON
         GIE_ON
         call    RETARDO         ;pausa para el envio de datos
         return

;<<<<<<<<-------------------COMPROVACION DE TIPO DE INTERRUPCION------------>>>>>>>>>>>>>>
   
INTER       GIE_OFF
         PUSH 
         BANK0
         btfsc   PIR1,RCIF      ;comprueba si el shift register(RSR)esta lleno.y si es asi salta
         goto   LEEDATO
         POP
            retfie               ;retorno de interrupcion si no se ha dado la circunstancia anterior
           
;<<<<<<<<-------------------------VISUALIZACION DE DATO RECIVIDO------------>>>>>>>>>>>>>>
         
LEEDATO     BANK0
         TX_OFF
         movf      RCREG,W         ;Lectura dato recibido
              movwf   PORTB            ;Visualiza dato recibido
         TX_ON
            retfie                  ;retorna de la interrupcion.

         
;<<<<<<----------------------- RUTINAS DE RETARDO ------------------------->>>>>>>

RETARDO     
            movlw   D'6'
            movwf   CounterC
            movlw   D'24'
            movwf   CounterB
            movlw   D'168'
            movwf   CounterA
loop         decfsz   CounterA,1
            goto   loop
            decfsz   CounterB,1
            goto   loop
            decfsz   CounterC,1
            goto   loop
            return         
     
           END 
« Última modificación: 12 de Enero de 2009, 11:31:20 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)


 

anything