Autor Tema: Conversión BCD para enviar por puerto serial del pic 16f873a  (Leído 2424 veces)

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

Desconectado palacio

  • PIC10
  • *
  • Mensajes: 4
Conversión BCD para enviar por puerto serial del pic 16f873a
« en: 01 de Marzo de 2010, 14:20:56 »
hala a todos mi nombre es juan carlos estoy tratando de realizar la convercion analoga digital y convertirla luego a bcd para visualizar los datos por el hiperterminal  del pc  pero no me funciona y no encuentro el error si alguen puede ayudarme se lo agradeceria porfa es urgente muchas gracias a todos
aqui les dejo el codigo que he realizado hasta el momento
:?;********************************************************
      
      processor 16F873a

      LIST      P=16F873a   ;Se indica el modo de procesador
      
      INCLUDE  <P16f873a.inc>   ;se incluye la definicion de los
               ;registros internos
      __config 3D31
      
                              ERRORLEVEL -306, -302            ;QUITAMOS LOS ERRORES DE BANCO EN MPLAB  


Contador                  equ   0x22               ; registro utilizado en demora.-
ASCII_H      EQU   0x23
ASCII_M      EQU   0x24                
ASCII_L      EQU   0x25
HEXADECIMAL                  EQU   0x26


;----------------------------------------------------------------------------

      org    0x00      ;vector de inicio
      goto    INICIO
;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>>
;----------------------------------------------------------------------------

INICIO      bcf   STATUS,RP0   ;banco 0
      bcf   STATUS,RP1
      
      clrf   PORTA
                  bsf   STATUS,RP0   ;banco 1      
      clrf   TRISB      ;portb como salida
      clrf   TRISC
      bcf   STATUS,RP0   ;banco 0
         
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
;confuguracion del puerto serial

                              bsf   STATUS,RP0   ;Cambio al banco 1 -------------
      bcf   STATUS,RP1
                  bsf            TRISC,6         ;RC6/Tx como salida
                              bsf            TRISC,7  
                              movlw   b'00100100'   ;Configuracion USART
      movwf   TXSTA      ;y activacion de transmision
      movlw   .25      ;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 -------------
                            

;===========================================================================
;      Inicio de conversion de valores analogicos
;===========================================================================


;---------------------Configuracion CONVERTIDOR A/D-------------------------
CFGADC      
                              bsf   STATUS,RP0   ;Banco 1
      bcf   STATUS,RP1
      
      movlw   b'00000011'   ;seleccion tipo puertos A/D
      movwf   ADCON1
      movlw   b'11111111'
      movwf   TRISA   ;PORTA como entrada

      bsf   STATUS,RP0   ; Pasar a RAM BANK #1
      movlw   B'10001110'   ; RA0 analog inputs(EL RESTO RAx SERAN SEÑALES I/O DIGITALES)
      movwf   ADCON1
   
;   FIN de configuracion de registros
;*****************************************************************************
RUN_ADC      bcf   STATUS,RP0   ;Banco 0
      bcf   STATUS,RP1   ;Banco 0
      movlw   b'01000001'   ;repone a cero para que iorlw pueda
      movwf   ADCON0   
      nop
      nop

GO_ADC      
                              call   Demora_20us   ; Demora de adquision.-

                               bsf          ADCON0,GO_DONE   ;Inicio conversion
    
wait_ADC     
                              btfsc  ADCON0,GO_DONE   ; Espera a que termine conversion.-                   ;espera a que finalice la conversion
      goto   wait_ADC           ;bucle
                              movf  ADRESH,W
Hex_Ascii                                        ;cargar en W el dato hex.
      movwf   HEXADECIMAL
            clrf    ASCII_H          ;Para BCD D'0'
            clrf    ASCII_M       ;Para BCD D'0'
            clrf    ASCII_L               ;Para BCD D'0'
Centenas
            movlw   D'100'          ;D'100' --> W
            subwf   HEXADECIMAL,W   ;HEXADECIMAL - D'100' --> W
            btfss   STATUS,C        ;¿ HEXADECIMAL es menor que D'100' ?
            goto    Decenas         ;Si
            movwf   HEXADECIMAL     ;Salva el resto
            incf    ASCII_H,F       ;Incrementa el contador de centenas BCD
           goto    Centenas        ;Vuelve por otros D'100'
Decenas
            movlw   D'10'             ;D'10' --> W
            subwf   HEXADECIMAL,W   ;HEXADECIMAL - D'10' --> W
            btfss   STATUS,C        ;¿ HEXADECIMAL es menor que D'10' ?
            goto    Unidades        ;Si
            movwf   HEXADECIMAL     ;Salva el resto
            incf    ASCII_M,F       ;Incrementa el contador de decenas BCD
            goto    Decenas         ;Vuelve por otros D'10'
Unidades
                  movf    HEXADECIMAL,W   ;El resto pertenece
            movwf   ASCII_L         ;a las unidades BCD
            clrf    HEXADECIMAL     ;Pone a cero el registro HEXADECIMAL
                              
;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
      
;*******************************************************************************
;***************************************************************************
; Subprograma de envio de un byte por el puerto serie
; se envía el byte que llega cargado en W
;***************************************************************************
ENVIAR
   bcf   STATUS,RP0   ;pasamos al banco 1
   movwf   TXREG   ;Se carga en TXREG el byte que inicia el envío
               nop
   bsf   STATUS,RP0   ;pasamos al banco 1
LAZO1   btfss   TXSTA,TRMT   ;para poder explorar TXSTA y esperamos a que se transmita
   goto    LAZO1   ;mientras TRMT permanezca a 0 seguimos esperando
   bcf   STATUS,RP0   ;en cuanto TRMT=1 se acabó el envío y volvemos al banco o
   goto   GO_ADC      ;Retornamos del subprograma
;**********************************************************************************************

Demora_20us   
                movlw    0x05 ;   
                movwf    Contador ; Iniciamos contador1.-
Repeticion
                decfsz    Contador,1 ; Decrementa Contador1.-
                goto    Repeticion ; Si no es cero repetimos ciclo.-
                return
   end

Código: Microchip Assembler
  1.  
Código: ASM
  1.  
« Última modificación: 01 de Marzo de 2010, 14:40:56 por un Moderador, Razón: Corrección del título (para el Buscador del Foro). »

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Conversión BCD para enviar por puerto serial del pic 16f873a
« Respuesta #1 en: 01 de Marzo de 2010, 18:08:44 »
Fijate en esta línea de tu código, no estás configurando correctamente el pin TX de la transmisión
Código: ASM
  1. ........
  2. bsf            TRISC,6         ;RC6/Tx como salida
  3. ........

« Última modificación: 01 de Marzo de 2010, 18:12:22 por pablomanieri »

Desconectado palacio

  • PIC10
  • *
  • Mensajes: 4
Re: Conversión BCD para enviar por puerto serial del pic 16f873a
« Respuesta #2 en: 02 de Marzo de 2010, 20:36:24 »
Fijate en esta línea de tu código, no estás configurando correctamente el pin TX de la transmisión
Código: ASM
  1. ........
  2. bsf            TRISC,6         ;RC6/Tx como salida
  3. ........


muchas gracias   le hise la modificacion recomendada pero sigo reciviendo datos erroneos que me aconcejas

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Conversión BCD para enviar por puerto serial del pic 16f873a
« Respuesta #3 en: 02 de Marzo de 2010, 20:48:26 »
Hola, no comentas cual es el error...
yo creo que  no visualizas los datos en ASCII, es decir, estas transmitiendo el valor BCD... pero no lo estas pasando a ASCII para poder visualizarlos en el terminal... (tienes que sumarle  .48  o 30h  a cada valor BCD  :mrgreen:

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...