Autor Tema: Pic 16F876A UART todo con paridad PAR  (Leído 2346 veces)

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

Desconectado jpalcaraz

  • PIC10
  • *
  • Mensajes: 5
Pic 16F876A UART todo con paridad PAR
« en: 24 de Agosto de 2015, 02:35:29 »
Hola, necesito emular la salida de un programa que trabaja con un puerto COM en serie con un equipo.La trama que envía el programa es 0x01 0x84 0x7A 0x61 0xC5 0xA4 0x84 0x03. Yo envío esa trama usando UART,un pic16f876A y un integrado MAX232.El caso es que le pongo un envío con un noveno bit para paridad pero si veo ese envío mediante el hyperterminal veo con paridad par: 0x84 0xC5 0x84 0x03 y los restantes los veo con paridad impar. Si utilizo el hyperterminal para recibir la trama que envía el programa, lo recibo todo en paridad par y en impar no envía nada. ¿Cómo podría enviar esa trama con todos los bit en paridad par?

Este es el fragmento con el que envío toda la trama y así varios elementos en par y otros en impar:

trama

   movlw   0x01
   call   tx_dato ;Mueve 0x01 a TXREG

   call   retardo_min

   movlw   0x84 ;10000100
   call   tx_dato

   call   retardo_min

   
   movlw   0x7A
   call   tx_dato
;

   call retardo_min

   
   movlw   0x61
   call   tx_dato

   call retardo_min ; no tiene nada

   
   movlw   0xC5
   call   tx_dato

   call retardo_min

   
   movlw   0xA4   
   call   tx_dato

   call retardo_min

   movlw   0x84
   call   tx_dato

   call retardo_min

   
   movlw   0x03
   call   tx_dato

   goto   ret1min

;;###########################################################################################
;Tx_Dato: Transmite vía serie el dato presente en el reg. W

tx_dato         
            movwf   TXREG      ;Almacena el byte a transmitir
            

Tx_Dato_Wait   btfss   PIR1,TXIF   ;Byte transmitido ??
            goto   Tx_Dato_Wait;No, esperar
            
            return            ;Si


Gracias.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Pic 16F876A UART todo con paridad PAR
« Respuesta #1 en: 24 de Agosto de 2015, 05:07:01 »
El noveno bit ( como para paridad ) no es automatico, vos sos el encargado de ponerlo, asi para que sea todo par:

Código: ASM
  1. trama
  2.  
  3.         bsf     TXSTA,TX9D      ; 0x01 + 1 = Paridad Par
  4.         movlw   0x01
  5.         call    tx_dato ;Mueve 0x01 a TXREG
  6.  
  7.         call    retardo_min
  8.  
  9.         bcf     TXSTA,TX9D      ; 0x84 + 0 = Paridad Par
  10.         movlw   0x84 ;10000100
  11.         call    tx_dato
  12.  
  13.         call    retardo_min
  14.  
  15.         bsf     TXSTA,TX9D      ; 0x7A + 1 = Paridad Par
  16.         movlw   0x7A ;01111010
  17.         call    tx_dato
  18.  
  19.  
  20.         call    retardo_min
  21.  
  22.    
  23.         bsf     TXSTA,TX9D      ; 0x61 + 1 = Paridad Par
  24.         movlw   0x61 ;01100001
  25.         call    tx_dato
  26.  
  27.  
  28.         call    retardo_min
  29.  
  30.    
  31.         bcf     TXSTA,TX9D      ; 0xC5 + 0 = Paridad Par
  32.         movlw   0xC5 ;11000101
  33.         call    tx_dato
  34.  
  35.         call    retardo_min
  36.  
  37.    
  38.         bcf     TXSTA,TX9D      ; 0xA4 + 0 = Paridad Par
  39.         movlw   0xA4 ;10100100
  40.         call    tx_dato
  41.  
  42.         call    retardo_min
  43.  
  44.         bcf     TXSTA,TX9D      ; 0x84 + 0 = Paridad Par
  45.         movlw   0x84 ;10000100
  46.         call    tx_dato
  47.  
  48.  
  49.         call    retardo_min
  50.  
  51.    
  52.         bsf     TXSTA,TX9D      ; 0x03 + 0 = Paridad Par
  53.         movlw   0x03 ;00000011
  54.         call    tx_dato
  55.  
  56.  
  57.         goto    ret1min

Creo que eso es lo que queres hacer no ?

Desconectado jpalcaraz

  • PIC10
  • *
  • Mensajes: 5
Re: Pic 16F876A UART todo con paridad PAR
« Respuesta #2 en: 24 de Agosto de 2015, 09:20:11 »
Gracias por la respuesta.La idea es esa pero he probado ese código y sigue enviando lo mismo,algunos en par y otros en impar.En hyperterminal lo tengo con 8 bit,paridad par,1 bit de parada y sin control y a 19200 que es a lo que envía el programa.

¿Que podría ser?

Gracias
« Última modificación: 24 de Agosto de 2015, 09:38:37 por jpalcaraz »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Pic 16F876A UART todo con paridad PAR
« Respuesta #3 en: 24 de Agosto de 2015, 18:59:03 »
Esta habilitado el envio del 9no bit?

Es todo lo que se me ocurre, sino buscar alguna otra configuracion ya que estas teniendo 1 bit de start + 8 bit de datos + 1 bit de paridad + 1 bit de stop
Podrias ver si podes seleccionarlo como 9 bits en el hyperterminal, pero si tenes puesto que tenes 1 bit de paridad entonces no deberia haber problema. Y realmente los AN y datasheet no dicen mas nada

http://ww1.microchip.com/downloads/en/AppNotes/00774a.pdf

Desconectado jpalcaraz

  • PIC10
  • *
  • Mensajes: 5
Re: Pic 16F876A UART todo con paridad PAR
« Respuesta #4 en: 25 de Agosto de 2015, 02:23:17 »
Si tengo activado el 9 bit.Creo que es problema del hyperterminal porque utilizando otro programa si que me detecta la trama entera.

Muchas gracias por las respuestas.