eh manejado antes la lcd con el 80c31, y apenas inicio con el pic16f877 y lo primero que deseo hacer es mostrar un simple mensaje en la lcd, pero eh revisado de arriba a abajo mi codigo y todo parece estar correcto..alguien me puede decir que esta mal en mi programa, les dejo aqui el programa totalmente comentado, diciendo lo que pretento hacer con cada linea.
list P=16f877 ;tipo de procesador
radix hex ;numerolugia basica para programar
#include "p16f877.inc" ;libreria de registros especificos del procesador
; __CONFIG _LVP_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ; Palabra de configuracion= 0x11, o
;ERRORLEVEL -302
__config 0x3d39 ; me dicen que esta linea sirve mejor en lugar que todas las anteriores por eso las comente, pero ya eh probado con ellas y sin ellas.
;__CONFIG _XT_OSC
EST equ 0x03 ;Registro de estado
;PA equ 0x05 ;Puerto A
PB equ 0x06 ;Puerto B
PD equ 0x08 ;puerto D
ORG 0 ;Vector de reset
goto INICIO
ORG 4
INICIO
;configuramos puertos
BCF EST,RP0
BCF EST,RP1
CLRF PB
CLRF PD
BSF EST,RP0
MOVLW 0X00
MOVWF TRISB ;CONFIGURAMOS PURTO B COMO SALIDA
MOVWF TRISD ;CONFIGURAMOS PURTO D COMO SALIDA
BCF EST,RP0
BCF EST,RP1
;iniciamos rutinas de la lcd
CALL INIT_LCD
CALL CLEAR_LCD
;POSICIONA EN 00H
BSF PD,7 ;EN
BCF PD,5 ;RS
MOVLW 0X80
MOVWF PB
BCF PD,7
CALL WAIT_LCD
BSF PD,7 ;EN
BCF PD,5 ;RS
MOVLW 0X64 ;CURSOR PARPADEANTE
MOVWF PB
BCF PD,7
CALL WAIT_LCD
;mandamos mensaje/////////////////////////////////////////////////////
MOVLW "h"
CALL WRITE_TEXT
MOVLW "o"
CALL WRITE_TEXT
MOVLW "l"
CALL WRITE_TEXT
MOVLW "a"
CALL WRITE_TEXT
CALL WAIT_LCD
goto fine
; DECLARACION DE FUNCIONES//////////////////////////////////////////////////////////////////////
INIT_LCD
BSF PD,7 ;EN
BCF PD,5 ;RS
MOVLW 0x38 ;INSTRUCCION DE INICIALIZACION DE LCD
MOVWF PB ;DATA
BCF PD,7 ;EN
CALL WAIT_LCD
BSF PD,7 ;EN
BCF PD,5 ;RS
MOVLW 0X0E
MOVWF PB ;DATA
BCF PD,7 ;EN
CALL WAIT_LCD
BSF PD,7 ;EN
BCF PD,5 ;RS
MOVLW 0X06
MOVWF PB ;DATA
BCF PD,7 ;EN
CALL WAIT_LCD
RETURN
WAIT_LCD
BSF PD,7 ;EN
BCF PD,5 ;RS
BSF PD,6 ;RW=1 EL PROGR LEE EL LCD
MOVLW 0XFF
MOVWF PB
BSF EST,RP0
BCF EST,RP1
MOVLW 0XFF
MOVWF TRISB ;CONFIGURAMOS PURTO B COMO ENTRADA
BCF EST,RP0
BCF EST,RP1
CICLO
MOVFW PB
BTFSS W,7
GOTO CICLO
BSF EST,RP0
BCF EST,RP1
MOVLW 0X00
MOVWF TRISB ;DEJAMOS PUERTO B DE SALIDA
BCF EST,RP0
BCF EST,RP1 ;regresamos al banco 1
BCF PD,7 ;EN
BCF PD,6 ;RW
RETURN
CLEAR_LCD
BSF PD,7 ;EN
BCF PD,5 ;RS
MOVLW 0X01
MOVWF PB ;DATA
BCF PD,7 ;EN
CALL WAIT_LCD
RETURN
WRITE_TEXT
;EN W VIENE EL CARACTER A ESCRIBIR
BSF PD,7 ;EN
BSF PD,7 ;RS
MOVWF PB ;DATA
BCF PD,7 ;EN
CALL WAIT_LCD
RETURN
fine
end
quise anexar el diagrama pero no supe como asi que si alguien me puede decir como subir la imagen de mi diagrama para que lo vean?
si no pues es muy sencillo los pines estan asi:
PIC LCD
RB0 DB0
RB1 DB1
RB2 DB2
RB3 DB3
RB4 DB4
RB5 DB5
RB6 DB6
RB7 DB7
RD5 RS
RD6 RW
RD7 EN
y por supuesto el pic alimentado con 5v en la pata 11, y a tierra en la pata 12.
su cuarzo(4MHZ) en las patas 13 y 14, con sus respectivos capacitores de 33pf
y su resistencia pull-down en el reset.
AGRACECERE MUCHO SU AYUDA pues ya no se que es lo que este mal