Hola, estoy relizando un proyecto y tengo el problemita con una lcd (2X16 con back light) uso para programacion lenguaje assembler (MPLAB 7.21), uso el pic 16F877a-1/p (:sabes que significa ese 1 en el pic) y el software es el siguiente (esta al final):
El problema creo yo que no es con el software ya que los tiempos (delays) se ajustan con los exigidos por el fabricante (optrex) y en la simulacion sale realmente bien (PIC SIMULATOR IDE -simulador-) el problema que se presenta es el siguiente
trato de mostrar el siguiente mensaje "MOVIMIENTOPASIVO"
" CONTINUO "
Pero cuando quemo en el pic a veces me sale sombreada toda la primera fila o me sale el mensaje mas o menos de esta forma "MOVIMIENTOPASIVO"
"MXSRCONTINUOTRU"
Se ve como si el mensaje se moviera u oscilara es como un tablero electronico que cambia de mensajes, si me pueden ayudar se los agradezco.
diego_castano00@yahoo.com; como ayuda doy informacion a quien me pueda colabora mas a fondo.
;************** Comandos para manejo del LCD *************
LIST P=16F877A
INCLUDE <P16F877A.INC>
STATUS EQU 0X03 ;Dirección del registro STATUS.
LCD_E EQU 2 ;Bit del puerto A para control de E.
LCD_RW EQU 1 ;Bit del puerto A para control de R/W.
LCD_RS EQU 0 ;Bit del puerto A para control de RS.
RETARDO1 EQU 0X0D ;Constante del temporizador 1
RETARDO2 EQU 0X00 ;Constante del temporizador 2
ORG 0X0C ;Inicio de los registros de Uso general
CONT1 RES 1 ;Reserva un Byte para la Variable CONT1
CONT2 RES 1 ;Reserva un Byte para la Variable CONT2
ORG 0X00
BSF STATUS,5 ;Cambio al banco 1
MOVLW 0X06
MOVWF ADCON1
MOVLW B"00000000"
MOVWF TRISA ;Configura todo el puerto A como salida.
MOVLW B"00000000"
MOVWF TRISD ;;Configura todo el puerto B como salida
MOVLW 0xC7 ;dato de configuración para el timer0
MOVWF OPTION_REG ;modo temporizador, preescalador 1/256 asignado a timer0
BCF STATUS,5 ;Cambio al banco 0
INICIO
CALL TEMPO2
MOVLW B"00110000"
CALL LCDI
MOVLW B"00111000"
CALL LCDI
MOVLW B"00001110"
CALL LCDI
MOVLW B"00000110"
CALL LCDI
MOVLW "M"
CALL LCDC
.
.
.
CALL INFINITO
INFINITO
GOTO INFINITO
LCDI
BCF PORTA,LCD_RW ;Coloca "0" en el Pin RW.
BCF PORTA,LCD_RS ;Coloca "0" en el Pin RS.
BSF PORTA,LCD_E ;Coloca "1" en el Pin E
MOVWF PORTD ;Coloca el contenido de "W" en el bus de datos del modulo ;LCD.
BCF PORTA,LCD_E ;Coloca "0" en el Pin E
CALL TEMPO1 ;Llamada de una subrutina de tiempo de 40 micro segundos.
RETURN ;Finaliza la Rutina de tiempo.
LCDC
BCF PORTA,LCD_RW ;Coloca "0" en el Pin RW.
BSF PORTA,LCD_RS ;Coloca "1" en el Pin RS.
BSF PORTA,LCD_E ;Coloca "1" en el Pin E
MOVWF PORTD ;Coloca el contenido de "W" en elbus de datos del modulo LCD.
BCF PORTA,LCD_E ;Coloca "0" en el Pin E
CALL TEMPO1 ;Llamada de una subrutina de tiempo de 40 micro segundos.
RETURN ;Finaliza la Rutina de tiempo.
TEMPO1
MOVLW RETARDO1
MOVWF CONT1
CICLOT1
NOP
DECFSZ CONT1,1
GOTO CICLOT1
RETURN
TEMPO2
MOVLW RETARDO2
MOVWF CONT2
CICLOT2
CALL TEMPO1
DECFSZ CONT2,1
GOTO CICLOT2
RETURN
END