Teclado Matricial y Pic 16f877A

Hola amigos, al tiempo que vuelvo por aca, necesito su ayuda por favor. He realizado el siguiente codigo:

Código:
List P=16F877A
 INCLUDE <P16F877A.INC>
 
 CBLOCK 0X70
 ENDC
 ORG  0X00
 GOTO INICIO
 ORG  0X04
 GOTO  SERVINTERRUPCION
INICIO 
  BSF  STATUS,RP0
  BCF  STATUS,RP1
  CLRF TRISD
  clrf TRISE
  MOVLW 0X06
  MOVWF ADCON1
  MOVLW 0XFF
  MOVWF TRISA
  BCF  STATUS,RP0
  CALL LCD_Inicializa
  CALL Teclado_Inicializa
  MOVLW Mensaje0
  CALL LCD_Mensaje
  CALL Retardo_1s
  CALL LCD_Borra
  MOVLW 0x88
  MOVWF INTCON
 
 
PRINCIPAL
  SLEEP
  GOTO PRINCIPAL
SERVINTERRUPCION
  CALL Teclado_LeeHex
  MOVWF PORTD
  MOVF PORTD,W
  call LCD_Nibble
  call Teclado_EsperaDejePulsar
  bcf  INTCON, RBIF
  retfie
 
Mensajes
  ADDWF PCL,F
Mensaje0
  DT "SENSOR", 0X00
 
 INCLUDE <TECLADO1.INC>
 INCLUDE <LCD_4BIT.INC>
 INCLUDE <RETARDOS.INC>
 INCLUDE <LCD_MENS.INC>
 
 
 END

Adjunto las librerias para quien quiera ayudarme.

Mi problema es el sgte, cuando no muestro ningun mensaje, el programa inicia normal y me captura los datos que ingreso en el teclado y los muestra en el LCD, pero cuando muestro algo en el LCD como un mensaje, o algo por el estilo, automaticamente despues del mensaje, aparece un "1" en la parte izquierda del LCD, y posterior a eso ya puedo teclear.
Tengo mas de 5 dias con este problema, y no doy con la falla, si hya algo que modificar por favor haganmelo saber, les estare muy agradecido, ya que eso me estanca para mi diseño.
En los datos adjuntos esta el archivo de proteus y las librerias.

Gracias de antemano.

Saludos.
Cerebro
 

Adjuntos

  • TECLADO.zip
    89.8 KB · Visitas: 325
Bueno, ante todo, gracias por la ayuda, pero igual, ya lo resolvi, ahora les planteo otra cosa, como hago para multiplicar por 10 el dato que entro por un teclado...
Hay alguna rutina y/o inctruccion para multiplicar?

Gracias
Saludos.
Cerebro
 
Bueno, ante todo, gracias por la ayuda, pero igual, ya lo resolvi, ahora les planteo otra cosa, como hago para multiplicar por 10 el dato que entro por un teclado...
Hay alguna rutina y/o inctruccion para multiplicar?

Gracias
Saludos.
Cerebro

hola cerebroo las operaciones matematicas en assembler las puedes conseguir en este link http://www.piclist.com/techref/microchip/math/basic.htm
o en este
http://ww1.microchip.com/downloads/e...tes/00544d.pdf son las de microchip
saludos
 
Saludos Cerebro, estube revisando tu programa y no encuentro como quitar el "1", Podrias exponer la solcucion, te lo agradeceria bastante. Gracias


Hola amigos, al tiempo que vuelvo por aca, necesito su ayuda por favor. He realizado el siguiente codigo:

Código:
List P=16F877A
 INCLUDE <P16F877A.INC>
 
 CBLOCK 0X70
 ENDC
 ORG  0X00
 GOTO INICIO
 ORG  0X04
 GOTO  SERVINTERRUPCION
INICIO 
  BSF  STATUS,RP0
  BCF  STATUS,RP1
  CLRF TRISD
  clrf TRISE
  MOVLW 0X06
  MOVWF ADCON1
  MOVLW 0XFF
  MOVWF TRISA
  BCF  STATUS,RP0
  CALL LCD_Inicializa
  CALL Teclado_Inicializa
  MOVLW Mensaje0
  CALL LCD_Mensaje
  CALL Retardo_1s
  CALL LCD_Borra
  MOVLW 0x88
  MOVWF INTCON
 
 
PRINCIPAL
  SLEEP
  GOTO PRINCIPAL
SERVINTERRUPCION
  CALL Teclado_LeeHex
  MOVWF PORTD
  MOVF PORTD,W
  call LCD_Nibble
  call Teclado_EsperaDejePulsar
  bcf  INTCON, RBIF
  retfie
 
Mensajes
  ADDWF PCL,F
Mensaje0
  DT "SENSOR", 0X00
 
 INCLUDE <TECLADO1.INC>
 INCLUDE <LCD_4BIT.INC>
 INCLUDE <RETARDOS.INC>
 INCLUDE <LCD_MENS.INC>
 
 
 END

Adjunto las librerias para quien quiera ayudarme.

Mi problema es el sgte, cuando no muestro ningun mensaje, el programa inicia normal y me captura los datos que ingreso en el teclado y los muestra en el LCD, pero cuando muestro algo en el LCD como un mensaje, o algo por el estilo, automaticamente despues del mensaje, aparece un "1" en la parte izquierda del LCD, y posterior a eso ya puedo teclear.
Tengo mas de 5 dias con este problema, y no doy con la falla, si hya algo que modificar por favor haganmelo saber, les estare muy agradecido, ya que eso me estanca para mi diseño.
En los datos adjuntos esta el archivo de proteus y las librerias.

Gracias de antemano.

Saludos.
Cerebro
 
Atrás
Arriba