# PIC16F877A y LCD



## cacharrero (May 9, 2007)

señores tengan un buen dia

tengo el siguiente problema con un display lcd y un pic 16f877a, solo aparecen cuadros en el display y en la linea de abajo,es un display 2 por 16.

quisiera saber si alguno de los colaboradores del foro me podria ayudar, con algun codigo en asm para probar ya que no me quiere funcionar los que he revisado en algunas paginas de internet.

gracias

att
Carlos Diaz


----------



## Francisco Valdez (May 9, 2007)

Que tal Carlos!! Me supongo que estas inicializando el LCD al inicio, mediante el pic. Yo le daba un tiempo antes de enviarle las primeras instrucciones de 100ms a 150ms aprox, esto para permitirle que el micro del módulo inicialice...

Saludos


----------



## cacharrero (May 10, 2007)

francisco gracias por su respuesta,usted  tendria por ahi algun codigo para probarlo ya que he probado con algunos que he revisado en internet pero no me han funcionado.

gracias


----------



## Francisco Valdez (May 10, 2007)

Si tengo el programa en algún disco de respaldo solo dejame buscarlo y con gusto te paso el codigo....
Dame oportunidad este fin de semana si no es que te urge mucho....


----------



## Francisco Valdez (May 19, 2007)

Listo, te anexo el programa, es para un termómetro digital, utilizando el LM35, utiliza el puerto analógico para leer CH0 donde esta conectada la salida del LM35.

El valor lo despliega en un LCD 16x2, al inicio estan las subrutinas de inicialización del LCD.

Este programa lo saqué de una página y le hice algunas modificaciones para acoplarlo a lo que yo necesitaba.

Espero que todavía te sirva. Saludos.


----------



## kyo3k (May 22, 2007)

oye camarada y de casualidad no tendras el circuito de esa practica por que tengo una idea general, si me lo podrias mandar  estaria mejor. saludos


----------



## Francisco Valdez (May 22, 2007)

Hola Vane, especificamente que necesitas de ayuda? 

Kyo3k claro dejame lo busco y te lo paso mañana, por ahi lo debo tener en eagle...

Saludos


----------



## kyo3k (May 22, 2007)

ok francisco valdez lo espero con ansia muchas gracias


----------



## Francisco Valdez (May 23, 2007)

Bien esta listo, aqui adjunto el esquemático, el board y el programa, si tienes alguna duda no dudes en hacermelo saber...

Saludos


----------



## mayita (May 28, 2007)

Hola francisco!!! Tngo problemas con la pantalla o tambien, no responde a lo que le nvie del PIC16f877 me manda cuadros en la linea de abajo apenas cuando intento que solo me aparezca el cursor ; mi pantalla es una JHD 162A disque compatible con Hitachi, me podrias ayudar porfavor, te lo agradeceria mucho por que el ingeniero que me da clases no sabe y llevamos varios dias con lo mismo... de atemano gracias pakito....    y si tienes el codigo k le mandaste a el otro chavo me haria mucha falta, necesitamos personas como tu aki pa que nos den clases...


----------



## mayita (May 28, 2007)

hola otra *v*ez!!! en serio necesito ayuda, ya llevamos mucho haci*e*ndo librerías y subrutinas y solo nec*e*sitamos que diga HOLA MUNDO o cualquier cosa nada complicado... lo digo por *que* vi *q*ue hiciste uno de un termómetro y no tenemos suficientes materiales aquí para hacerlo.... por f*avor*. Por ahí dime de donde eres y tu edad


----------



## Francisco Valdez (May 28, 2007)

Hola Mayita!!! gracias por tus comentarios, mira te paso un código, te recomiendo que bajes la hoja de datos del display, ese fue el display que utilice con este programa, si checa el post del termómetro puedes ver el esquemático para que te des una idea de la conexión solo suprime la parte del LM35 y LM336. Este programa manda un mensaje al LCD,  hace que parpadee.

En el programa puedes incluir mas lineas, tantas quieras, las letras las puedes mandar en HEX, ASCII, DEC. baja una hoja donde veas el código ASCII para que te ayudes.

COmo comentario, tienes que direccionar el primer caracter donde quieras que inicie la palabra, luego mandas la secuencia de letras. El 0x80 es para el primer caracter de la primera linea, creo (no recuerdo bien) el 0xC0 es para el primer caracter de la segunda linea, es por eso que te recomiendo bajes el data sheet y lo estudies.

Vivo en México, al norte en la ciudad de Saltillo en el estado de Coahuila, tu???

Saludos


----------



## davidlamuerte (Ene 21, 2008)

Disculpa yo tengo el mismo poblema con mi LCD, no logre hacer que mi LCD (JHD162A) imprima otra cosa que no sean cuadros, estoy utilizando el PIC16f877A, las rutinas que utilizo ya las tenia probadas con el PIC16F84 pero con este PIC no me funcionan.

Quisiera saber si ya pudiste resolver el problema, y como le isiste.

Por favor necesito ayuda


----------



## jnowak (Dic 18, 2008)

Hola kyo3k!
Imagimo que este post es viejo, pero queria saber si en serio resolvieron elproblema yo tambien trabajo con el PIC16F877 y un LCD de 16x2, no se que marca porque no he podido encontrar en internet nada con el codigo que tiene en la parte de atras.

Cuando prendo el circuito el LCD se prende y solo los cuadritos de una lineas papadean. El PIC se supone que ya esta grabado, pero no hace nada...

POr ahi me dijeron que tenia que ponerle un oscilador al PIC porque este no tiene uno interno como el PIC16F84

Espero me puedan responder rapido porque tengo pocas horas para presentar mi proyecto...

Muchas gracias


----------



## davidlamuerte (Dic 19, 2008)

si! necesitas un oscilador como el del pic 16f84, a base de un cristal y de unos capacitores segun la velocidad de oscilacion que tenga el cristal sera la velocidad que tengas de respuesta de tu pic asi como de las operaciones que le programes, normalemente se utiliza un cristal de 4Mhz.

Con mi proyecto nunca pude hacer que imprimiera bien desde el pi16f877 por eso utilize un 16f84 para imprimir y todo el procesamiento de datos y de mi programa lo hacia desde el 877. en pocas palabras se comunicaban ambos pic uno como escalvo del otro, fue un poco compicado pero si funciono bien el final.


----------



## andy1 (Jul 9, 2009)

hola, estoy aprendiendo a progamar en pics , y tengo el 16f877a  y ya logre prender un led , ahora quiero poner una palabra en un lcd , si alguien me puede colaborar con esto ""  
muchas gracias por su colaboracion

att @ndres t


----------



## gamezgump (Nov 6, 2009)

Hola a todos,

de casualidad alguien me podria decir como puedo mostrar un mensaje en una pantalla lcd, sin necesidad de mandar imprimir letra por letra, sino la frase completa.

Agradesco la ayuda.


----------



## Chyryes (Nov 6, 2009)

Os dejo las rutinas que suelo usar para controlar LCDs con interfaz a 4-BITs. El programa de ejemplo escribe el mensaje "PRUEBA" en un display 2x16 (sin necesidad de mandar escribir letra por letra)

Saludos,


----------



## karifel (Nov 21, 2009)

Francisco Valdez dijo:


> Bien esta listo, aqui adjunto el esquemático, el board y el programa, si tienes alguna duda no dudes en hacermelo saber...
> 
> Saludos



de casualidad tendrias ese esquematico del cto? lo deseo programar en CCS pero me gustaria partir de un circuito base.

saludos!


----------



## hansonn_2 (Dic 1, 2009)

davidlamuerte dijo:


> si! necesitas un oscilador como el del pic 16f84, a base de un cristal y de unos capacitores segun la velocidad de oscilacion que tenga el cristal sera la velocidad que tengas de respuesta de tu pic asi como de las operaciones que le programes, normalemente se utiliza un cristal de 4Mhz.
> 
> Con mi proyecto nunca pude hacer que imprimiera bien desde el pi16f877 por eso utilize un 16f84 para imprimir y todo el procesamiento de datos y de mi programa lo hacia desde el 877. en pocas palabras se comunicaban ambos pic uno como escalvo del otro, fue un poco compicado pero si funciono bien el final.


 
Hola amigo que tal una preguntota he tratado de hacer funcionar el LCD de 16x2 con pic16f84a y 16f877a y no he podido los dos tiene su cristal de 4 Mhz la verdad no se que mas hacer y te pido un favor si por ahi tienes el diagrama de como funciono tu proyecto te lo agradeceria mucho por que he buscado el problema por todas partes y no lo he podido revolver solo aparecen cuadros en la parte inferior


----------



## GIJAVIER (Dic 7, 2009)

Buenas tardes desde Venezuela:
Estoy armando un sistema de ultrasonido para detectar presencia en un pasillo de 10 metros de largo por tres de ancho. Estoy interesado en conectarle una pantalla LCD para que me indique cuando se active, este próximo a apagar la luz, indique la fecha y hora... Ya he creado parte de la rutina, pero no tengo experiencia en con las Pantallas LCD conectadas al PIC16F877a (en este caso), por lo que me sería de gran ayuda cualquier comentario o diagrama. Muchas gracias de antemano.


----------



## djota13 (Abr 28, 2010)

Buenas, la verdad no se si ya cerraron el tema (soy nuevo en esto)
pero tengo el mismo problema con la LCD, me muestra solo los cuadros negros el la segunda fila y queria saber si lo pudieron resolver.
ya probe el pic y esta bien programado

agradeceria la ayuda


----------



## forcedark (Jun 28, 2010)

Muy buenos Dias, me gustaria pedirles el favor si tienen el diagrama de conexiones electricas del pic (Proteus o jpg) con los diferentes elementos, ya compile el programa pero no he podido configurar las otras conexiones.  Agradeceria la ayuda ya que soy nuevo en el mundo de la programacion


----------



## corvus1910 (Oct 13, 2010)

mayita dijo:


> hola otra *v*ez!!! en serio necesito ayuda, ya llevamos mucho haci*e*ndo librerías y subrutinas y solo nec*e*sitamos que diga HOLA MUNDO o cualquier cosa nada complicado... lo digo por *que* vi *q*ue hiciste uno de un termómetro y no tenemos suficientes materiales aquí para hacerlo.... por f*avor*. Por ahí dime de donde eres y tu edad



hola mira yo tengo dice hola y después de*s*pliega el nombre te pongo la simulación y el programa cabe decir que la base es ensamblador pero lo hice en pic c, ojala te sirva  saludos 

si necesitas algo mas mándame un e-mail *políticas@delforo.com*

a en la simulación esta para un lcd de una línea y ahí viene el otro lcd son las mismas cone*x*iones vale.


*Como no cumplo las Políticas del Foro. Me editaron el mensaje.*​


----------



## minssss (Dic 5, 2010)

hola necesito programar en picbasic una pantalla lcd 16x2 por el puerto a y lo he intentado y no me da resultado por el famoso puerto a4, adjunto el codigo de la configuracion de la pantalla y la foto del montaje, estare agradecido por la ayuda saludos

DEFINE LCD_DREG PORTA  
DEFINE LCD_DBIT 4   
DEFINE LCD_RSREG PORTA 
DEFINE LCD_RSBIT 4  
DEFINE LCD_EREG PORTA  
DEFINE LCD_EBIT 5
define LCD_BITS 4 
DEFINE LCD_LINES 2 
define OSC 4

alldigital
TRISA=0 'LCD
TRISB=%01110000 'TECLADO


----------



## lordaenema (Oct 4, 2011)

Buenas. Soy de Venezuela y estoy realizando un proyecto bastante simple pero en cuando simulo en "pic simulator ide" se queda en un ciclo y no muestra nada en la lcd! El proyecto consiste en un contador de pulsaciones para q*ue* entiendan mejor: hay q*ue*  llevar el conteo de los puntos marcados en un combate "una pelea" hay 4 jueces cada uno tiene 2 pulsadores uno para cada peleador. Para q*ue* el  punto pueda ser contado 3 de los 4 jueces tienen q*ue* presionar los pulsadores para q*ue* el pic lo pueda contar como valido es allí donde lo va a mostrar por el lcd de 2x16 utilizo un 16f877a


pd: en cuanto a q*ue* 4 de los 4 jueces deben pulsar para q*ue* sea valido hay como un error ya q*ue* tomo referencia  b`0111`  hago una simple comparación pero si se dan cuenta  a lo mejor los jueces pueden pulsar así b`1011` y eso en este programa lo tomo como no valido aquí les dejo el programa.


----------



## Lnar92 (May 12, 2012)

*H*ola, tengo un mi termómetro hecho, pero necesito agregarle una alarma auditiva, para q*ue* cuando la temperatura sea mayor a 38 grados suene. Quisiera saber q*ue* le agrego a mi código?



```
processor 16f877
  include<p16f877.inc>

  ;Variable para el DELAY del ADC
val equ h'20'

  ;Variables para el DELAY del ENABLE LCD
val2 equ 0x30
val1 equ 0x31

  ;Variables para separar el resultado de ADC
  ; en valor BCD
Unidades equ 0x32     
Decenas equ 0x33      
Centenas equ 0x34   
Resto equ 0x35

  org 0h
  goto INICIO
  org 05h

INICIO:
      clrf PORTA        ;Limpia el puerto A
      clrf PORTB        ;Limpia el puerto B
      clrf PORTC        ;Limpia el puerto C    
      clrf PORTD        ;Limpia el puerto D
      bsf STATUS,RP0    
      bcf STATUS,RP1    ;Cambio al banco 1
      
      ;Configuración de puertos C-D para el LCD
      clrf TRISC        ;Configura PORTC como salida
      clrf TRISD        ;Configura PORTD como salida
      
      ;Configuración del puerto A para ADC
      movlw 00h         
      movwf ADCON1      ;Configura puerto A y E como analógicos
      movlw 3fh         
      movwf TRISA       ;Configura el puerto A como entrada
      movlw h'0'
      
      ;Configuración del puerto B para mostrar el resultado ADC
      movwf TRISB       ;Configura puerto B como salida
      bcf STATUS,RP0    ;Regresa al banco 0
      
      ;Inicio del programa
START
      call START_LCD   ;Inicializa LCD
      goto START_ADC   ;Comienza la lectura del Conv. A/D
      
      ;Inicia LCD
START_LCD:
      bcf PORTC,0      ; RS=0 MODO INSTRUCCION
      movlw 0x01       ; 0x01 limpia la pantalla en el LCD
      movwf PORTD
      call COMANDO     ; Se da de alta el comando
      movlw 0x0C       ; Selecciona la primera línea
      movwf PORTD
      call COMANDO     ; Se da de alta el comando
      movlw 0x3C       ; Se configura el cursor
      movwf PORTD
      call COMANDO     ; Se da de alta el comando
      bsf PORTC, 0     ; Rs=1 MODO DATO
      return
      
      ;Rutina para enviar un dato
ENVIA:
      bsf PORTC, 0    ; RS=1 MODO DATO
      call COMANDO    ; Se da de alta el comando
      return 
       
      ;Rutina para enviar comandos
COMANDO:
      bsf PORTC, 1    ; Pone la señal ENABLE en 1
      call DELAY2     ; Tiempo de espera
      call DELAY2
      bcf PORTC, 1    ; ENABLE=0    
      call DELAY2
      return     
      
      ;Rutina para limpar pantalla LCD  
ERASE_LCD
      bcf PORTC,0      ; RS=0 MODO INSTRUCCION
      movlw 0x01       ; 0x01 limpia la pantalla en el LCD
      movwf PORTD
      call COMANDO     ; Se da de alta el comando
      bsf PORTC, 0     ; Rs=1 MODO DATO
      return
      
      ;Configuración Convertidor A/D
START_ADC
      movlw b'11000001' ;ConfiguraciÃ³n ADCON0 
      movwf ADCON0      ;ADCS1=1 ADCS0=1 CHS2=0 CHS1=0 
                        ;CHS0=0 GO/DONE=0 - ADON=1

CICLO: bsf ADCON0,2      ;Conversión en progreso GO=1
       call DELAY1       ;Espera que termine la conversión
ESPERA btfsc ADCON0,2    ;Pregunta por DONE=0?(Terminó conversión)
       goto ESPERA       ;No, vuelve a preguntar
       movf ADRESH,0     ;Si
       movwf PORTB       ;Muestra el resultado en PORTB
       
       ;Rutina que muestra temperatura
PRINT_TEMP
       call ERASE_LCD    ;Limpia LCD
       movlw 'T'
       movwf PORTD
       call ENVIA
       movlw '='
       movwf PORTD
       call ENVIA

       call READ_TEMP    ;Llamada a rutina que obtine el 
                         ;valor de la temperatura a partir
                         ;del  resultado del Conv a/D

       movf Centenas,W   ;Imprime el dígito de las centenas
       movwf PORTD
       call ENVIA
       movf Decenas,W    ;Imprime el dígito de las decenas
       movwf PORTD
       call ENVIA
       movf Unidades,W   ;Imprime el dígito de las unidades
       movwf PORTD
       call ENVIA
       movlw ' '
       movwf PORTD
       call ENVIA
       movlw h'DF'       ;Imprime el simbolo "°"
       movwf PORTD
       call ENVIA 
       movlw 'C'
       movwf PORTD
       call ENVIA 

       goto CICLO        ;Repite el ciclo de lectura ADC

       ;Rutina que obtine el valor de la temperatura
       ;a partir del  resultado del Conv a/D
READ_TEMP:
       clrf Centenas
       clrf Decenas
       clrf Unidades
      
       movf ADRESH,W   
       addwf ADRESH,W     ;Dupilca el valor de ADRESH para 
       ;obtener un valor de temperatura real aprox
       movwf Resto        ;Guarda el valor de ADRESH en Resto  
        
       ;Comienza el proceso de otención de valores BCD 
       ;para Centenas, Decenas y unidades atraves de restas
       ;sucesivas.
CENTENAS1
       movlw d'100'      ;W=d'100'
       subwf Resto,W     ;Resto - d'100' (W)
       btfss STATUS,C    ;Resto menor que d'100'?
       goto DECENAS1     ;SI
       movwf Resto       ;NO, Salva el resto
       incf Centenas,1   ;Incrementa el contador de centenas BCD
       goto CENTENAS1    ;Realiza otra resta
DECENAS1
       movlw d'10'       ;W=d'10'
       subwf Resto,W     ;Resto - d'10' (W)
       btfss STATUS,C    ;Resto menor que d'10'?
       goto UNIDADES1    ;Si
       movwf Resto       ;No, Salva el resto
       incf Decenas,1    ;Incrementa el contador de centenas BCD
       goto DECENAS1     ;Realiza otra resta
UNIDADES1
       movf Resto,W      ;El resto son la Unidades BCD
       movwf Unidades
       ;clrf Resto
       
       ;Rutina que obtiene el equivalente en ASCII       
OBTEN_ASCII
       movlw h'30' 
       iorwf Unidades,f      
       iorwf Decenas,f
       iorwf Centenas,f      
       return

;Rutina que genera un Delay de 20 microSeg aprox.
;para el Conv. A/D
DELAY1:             
       movlw h'30'
       movwf val
Loop   decfsz val,1
       goto Loop
       return

;Subrutina de retardo para ENABLE_LCD 
DELAY2:            
       movlw 0xFF
       movwf val1 
Loop1:
       movlw 0xFF
       movwf val2    
Loop2:
       decfsz val2,1
       goto Loop2
       decfsz val1,1
       goto Loop1
       return
    end
```


----------



## VEGATRONICA (May 12, 2012)

cacharrero dijo:


> señores tengan un buen dia
> 
> tengo el siguiente problema con un display lcd y un pic 16f877a, solo aparecen cuadros en el display y en la linea de abajo,es un display 2 por 16.
> 
> q



Hola 

cacharrero no se si ya lograste resolver tu problema te dejo el archivo para la lcd 16x2 con la libreria para manejarla en CCS que no es de mi autoria y la simulacion en proteus y el HEX para que lo grabes en el PIC para verficar su funcionamiento saludos y suerte


----------



## armajaleo (Jun 14, 2012)

Mi pantalla LCD hace lo mismo que habeis dicho la mayoria, se pone toda la primerla Fila en Negro ! y ya he probado con muchos programas que habeis puesto aqui y nada... Mi Pic es 16F877.


----------



## D@rkbytes (Jun 14, 2012)

Lnar92 dijo:
			
		

> AyÚdenme plis,necesito poner la alarma auditiva  cuando la temperatura sea mayor a 38° pero lo q he hecho no me ha  servido





armajaleo dijo:


> Mi pantalla LCD hace lo mismo que habeis dicho la mayoria, se pone toda la primerla Fila en Negro ! y ya he probado con muchos programas que habeis puesto aqui y nada... Mi Pic es 16F877.


A ambos les aconsejo que adjunten el código de su programa actual y sus conexiones.
Si tienen la simulación de sus proyectos es mejor. Y si no, suban las fotos de sus proyectos.
Con esos detalles es como se les puede ayudar mejor.

Un comentario:
A mi me paso que un LCD JHD 162A Azul, mostraba solo la primer línea con cuadros negros.
Igualmente probe con programas que tengo funcionando, y seguia con el problema.
Así que probe con otro LCD del mismo modelo, y funciono sin problemas.
En conclusión, el LCD paso a mejor vida. 
Esto también pasa cuando no esta bien ajustado el pin de contraste (VEE)

Saludos.


----------



## chio (Ago 29, 2012)

Hola tengo el problema de los cuadritos que salen el la parte de abajo!
Mi programa si funciona en proteus, lo hice en ccs, y no se que sea.
¿Si me pueden ayudar?

Mi programa es el siguiente.

```
#include <16F877A.H>
   #device adc=8
   #device ccs2
   #fuses XT, NOWDT, NOPROTECT, NOLVP
   #use delay(clock=4000000)
   
   #byte PORT_A=0X05
   #byte TRIS_A=0X85
   #define PIN_A1 40
   #define PIN_A2 41
   #byte PORT_D=0X07
   #byte TRIS_D=0X87
   #define PIN_D0 42
   #define PIN_D1 43
   
#define LCD_DB4   PIN_B4
#define LCD_DB5   PIN_B5
#define LCD_DB6   PIN_B6
#define LCD_DB7   PIN_B7

#define LCD_RS    PIN_C0
#define LCD_RW    PIN_C1
#define LCD_E     PIN_C2

   #INCLUDE <flex_lcd.c>
   
   int temp;   

   void main(void)
   {
      lcd_putc clif;
      delay_ms(1000);
      lcd_init();
      lcd_gotoxy(2,1);
      lcd_putc("    Temp:");
      delay_ms(2000);
      lcd_gotoxy(2,2);
      delay_ms(100);
      setup_adc(ADC_CLOCK_INTERNAL);
      setup_adc_ports(RA0_ANALOG);
      set_adc_channel(0);
      
      while(1)
      {
      delay_ms(70);
      temp=read_adc();//esta istrucion lee el puerto a0
      delay_ms(25);
      temp=(temp/2)-1;
      lcd_gotoxy(7,2);
      printf(lcd_putc,"%u",temp);
      
         if(PIN_A1 == 0 && PIN_A0 == 1)
         {
            output_bit (PIN_B1,0);
            output_bit (PIN_B0,1);
         }

         if(PIN_A1 == 1 && PIN_A0 == 0)
         {
            output_bit (PIN_B0,0);
            output_bit (PIN_B1,1);                                 
         }   
         
        }
      }
```


----------



## boykiller (Sep 17, 2017)

Buenas a todos, estoy trabajando con el PIC16F887 en Assembler y tengo un problema ya que debo introducir un valor en hexadecimal y hacer sus respectivas conversiones y mediante 3 botones mostrarlo en un LCD donde cada botón muestra el valor de hexa a decimal, binario y octal según que botón fue pulsado. Y el problema esta en que como los PIC solo realizan sumas y restas no entiendo como lograr pasar desde la base hexadecimal a otras y poder mostrar en pantalla si alguien tiene idea de como hacerlo se lo agradecería mucho!!!! 

PD: Tengo trabajando ya el lcd y probando de un valor binario mostrarlo en el LCD en su asci pero es lo que e podido lograr ya que en la red no consigo en pic conversiones de Hexa---> otras bases


----------



## pandacba (Sep 18, 2017)

Quien te dijo que solo hacen sumas y restas solamente?
Que acaso no sabes que el producto de A X B es sumar B +B tantas veces lo indica A?
y que la división es la resta A/B  es restar B de A, tantas veces como lo A?
es muy sencillo....

La net esta llena de ejmplos
Te pongo uno solo para que te sirva de ejemplo
http://angel-danny.blogspot.com.ar/2010/05/suma-resta-multiplicacion-y-division-en.html

Tal vez sería mejor que utilizaras Basic o C que ya tienen muchas funciones definidas ya sea las básicas, trigonómetricas booleanas e incluso la conversion que deseas

Te haces una rutina que luego llamas
para pasar de decimal a binario divides por 2, y el resto que te va quedando forman el número en binario, para octal divides por 8, y para hexadecimal divices por 16
Las otras conversiones son similares


----------



## AleSergi (Sep 18, 2017)

si harto data por la red por ser pic muy conocido. Yo solia emplear las rutinas que se describen en el enlace que dejo,  la mayoria de las veces eran divisiones.  Pero hay de todo que tenga que ver con cuestiones matemáticas...  Yo en tu lugar agendo este enlace. 

http://www.piclist.com/techref/microchip/math/index.htm


----------



## boykiller (Sep 18, 2017)

gracias por responder, pero me confundo demasiado ya que tengo entendido que el LCD lee codigo Ascii y debo pasar lo que tenga a su equivalente osea no veo como emplear una conversion ya de hexa a otra base y luego pasarlo a ascii para mostrar sea en binario, decimal o octal.
PD: resondiendo solo puedo usar Assembler en la porgramacion del pic.


----------



## pandacba (Sep 18, 2017)

El LCD no lee, muestra la información que se le muestra en el formato adecuado, lo único que tenes que hacer es conformar el resultado en en  ese formato para que te lo muestre
Te dejo una información en el idioma de Cervantes que te puede ser de mucha utilidad


----------



## miglo (Sep 19, 2017)

Pandacba quiero hacer una pregunta ya que quiero adquirir uno.

En cierta web hay un lcd 4x20 de tamaño grande, los normales de los cuales tengo aunos cuantos, miden sobre 90mm mas-menos, este mide sobre 160mm y utiliza, segun la informacion, el controlador KS0066.

Aqui viene mi pregunta, se puede usar como si fuese el HD44780?.


----------



## boykiller (Sep 20, 2017)

hola, ya e podido avanzar en las conversiones, pero me da mucha duda como pasar de hexadecimal a octal , estuve intentando realizando con and e ir tomando de 3 en 3 bits pero no me resulta, quiero de alguna forma tomar 3 bits de un registro de 8bits y guardar solo los 3 bits que yo quiero mostrar, existe una forma de hacerlo?


----------



## pandacba (Sep 21, 2017)

Bajate la hoja de datos de ese chip para ver como se maneja, yo he utilizado LCD 20x4 pero no recuerdo que controlador llevaba, se conectaba con el mismo número de pines, no estan en el mismo orden que los de 16X2 pero no represento ningún problema


----------



## boykiller (Sep 22, 2017)

Buenas, ya logre realizar las conversiones que planteaba anteriormente aquí, pero tengo un problema quiero pasar el registro W que esta asignado con 16bits a dos variables de 8 bits para trabajar con ellas,ya que el pic solo trabaja con 8bits como es el PIC16f887, si yo guardo directamente W a una variable se guardan los 8bits menos significativos automáticamente pero no tengo como guardar los 8 mas significativos si pudieran orientarme en esto se los agradecería mucho.!!


----------



## D@rkbytes (Sep 22, 2017)

boykiller dijo:


> Si yo guardo directamente W a una variable, se guardan los 8 bits menos significativos automáticamente, pero no tengo cómo guardar los 8 más significativos.
> Si pudieran orientarme en esto se los agradecería mucho.


Mira la siguiente documentación que ofrece Microchip: *AN526 Utility Math Routines*


----------

