# Mostrar dos digitos en lcd



## quino22 (Jul 24, 2009)

hola,no se como hacer para mostrar por ejemplo un numero de 2 digitos en un lcd usando un lm35 y un pic 16f876,ya que solo se mostrar desde el 0 al 9 y despues del nueve me aparece el caracter ':' y a ese caracter lo quiero reemplazar por un diez despues que venga el once y asi a medida que aumente la temperatura.estoy programando en assembler y utilizo el proteus.este es el codigo:

             list p=16F876
             INCLUDE "P16F876.INC"

caracter equ    20h
porta    equ    05h
portb    equ    06h
portc    equ    07h
adcon0   equ    1Fh
adcon1   equ    9Fh
status   equ    03h
adresL   equ    9Eh
option_r equ    81h
intcon   equ    8Bh
tmr0     equ    01h
pcl      equ    82h

reset    org    00h
         bcf    status,5     ;banco 0
         movlw  0xC0
         tris   portc        ;puerto c,bit 6 y 7 salidas,demas entradas
         movlw  00h
         tris   portb        ;puerto b como salida
         movlw  01h         
         tris   porta        ;puerto ain 0 entrada,demas salidas 
         movlw  85h
         movwf  adcon0       ;selecciono AN0 analogico y inicio conversion
         movlw  8Eh
         bsf    status,5     ;banco 1
         movwf  adcon1       ;selecciono adresL
         movlw  07h    
         movwf  option_r     ;uso tmr0 y preescaler de 256
         movlw  0x0A
         movwf  intcon       ;habilito inter. por tmr0 
         clrf   porta 
         clrf   portc
         clrf   portb 

              bcf    status,5     ;banco 0
termino  btfsc  adcon0,2     ;termino de procesar?
             goto   termino      ;no
             bsf    adcon0,2     ;inicio conversion
             bsf    status,5     ;banco 1
             rrf    adresL,1      ;corro a la derecha los bits de adresL
             movlw  30h 
             addwf  adresL,0     ;le sumo 30h a adressL para convertir a codigo ASCII '0'
             bcf    status,5     ;banco 0
             movwf  portb        ;muestro resultado en puerto b
             bsf    portc,6      ;habilito enable en lcd
             bsf    portc,7
             call   cuenta
             bcf    portc,6      
             bcf    portc,7      ;deshabilito enable


cuenta   bcf    intcon,2     ;tempo de 2ms
         movlw  .217
         movwf  tmr0
         goto   tempo1
tempo1   btfss  intcon,2     ;termino?
         goto   tempo1
         bcf    intcon,2
         bcf    portc,6      ;deshabilito
         return


----------



## Vick (Jul 24, 2009)

El problema es que estas enviando el valor obtenido directamente al LCD, y el 10d correponde en asccii a :. Lo que debes hacer es tomar el valor que vas a enviar al LCD y convertirlo de binario a BCD para que tengas los dígitos en BCD independientes en dos o tres registros y de ahí envías cada uno al display para formar el valor correcto... por lo que necesitas una rutina o librería para convertir binario a BCD...

Espero haberme explicado. 

Chau...


----------



## quino22 (Jul 24, 2009)

gracias por tu respuesta ahora voy a ponerme a hacer alguna rutina.un abrazo


----------



## Vick (Jul 24, 2009)

Si se te complica te puedo pasar mi libreria, solo dame un poco de tiempo ahora no la tengo a mano...


----------

