Que hayyy
Saludos, mira trabaje con el PIC16F877
te pongo el codigo fuente, trabaje con 8 bits, y el LCD es de 2x16
Por el PORTD, saco los datos y por el PORTE,0 y PORTE,1 son los controles
si quieres cambiar el puerto, en las subrrutinas de dato y commando, cambialas por el puerto que desees utilizar
Saludos
Bye
list P=16F877A
INCLUDE<P16F877A.INC>
__CONFIG _CP_ALL & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _XT_OSC & _LVP_OFF & _CPD_OFF & _WRT_OFF
cont1 EQU 20
cont2 EQU 21
cont3 EQU 22
DD_ram_LCD1 EQU 23
DD_ram_LCD2 EQU 24
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ COMANDOS DEL LCD @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
LCD_clear EQU 0X01 ;Clear Display de el LCD
LCD_home EQU 0X02 ;Display y cursor en home
;------------------------
Entry_mode_set_1 EQU 0x04 ;Decrementa(escribe al reves) y Display shift Off
Entry_mode_set_2 EQU 0x05 ;Decrementa(escribe al reves) y Display shift On
Entry_mode_set_3 EQU 0x06 ;Incrementa(escribe bien) y Display shift off
Entry_mode_set_4 EQU 0x07 ;Incrementa(escribe bien) y Display shift On
;------------------------
Display_OnOff_control_1 EQU 0x08 ;Display Off, Underline Off y Cursor blink Off
Display_OnOff_control_2 EQU 0x09 ;Display Off, Underline Off y Cursor blink On
Display_OnOff_control_3 EQU 0x0A ;Display Off, Underline On y Cursor blink Off
Display_OnOff_control_4 EQU 0x0B ;Display Off, Underline On y Cursor blink On
Display_OnOff_control_5 EQU 0x0C ;Display On, Underline Off y Cursor blink Off
Display_OnOff_control_6 EQU 0x0D ;Display On, Underline Off y Cursor blink On
Display_OnOff_control_7 EQU 0x0E ;Display On, Underline On y Cursor blink Off
Display_OnOff_control_8 EQU 0x0F ;Display On, Underline On y Cursor blink On
;------------------------
Display_cursor_shitf_1 EQU 0x10 ;Cursor Move(salta una posicion) y Left shift
Display_cursor_shitf_2 EQU 0x14 ;Cursor Move(salta una posicion) y Right shift
Display_cursor_shitf_3 EQU 0x18 ;(Desplaza todo a la izq) Display shift(LCD+1) y Left shift
Display_cursor_shitf_4 EQU 0x1C ;(Desplaza todo a la izq) Display shift(LCD+1) y Right shift
;------------------------
Funtion_set_1 EQU 0X20 ;4 Bits, 1 Linea, 5x7 dots
Funtion_set_2 EQU 0X24 ;4 Bits, 1 Linea, 5x10 dots
Funtion_set_3 EQU 0X28 ;4 Bits, 2 Linea, 5x7 dots
Funtion_set_4 EQU 0X2C ;4 Bits, 2 Linea, 5x10 dots
Funtion_set_5 EQU 0X30 ;8 Bits, 1 Linea, 5x7 dots
Funtion_set_6 EQU 0X34 ;8 Bits, 1 Linea, 5x10 dots
Funtion_set_7 EQU 0X38 ;8 Bits, 2 Linea, 5x7 dots
Funtion_set_8 EQU 0X3C ;8 Bits, 2 Linea, 5x10 dots
;--------------------------
CGRAM_Adress EQU 0x40
;--------------------------
RS EQU 0
E EQU 1
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
org 0
goto start
org 5
start bsf STATUS,RP0
clrf TRISD ;Datos del LCD
clrf TRISE ;Coltrol del LCD
movlw 0x07
movwf ADCON1
bcf STATUS,RP0
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
call Display_Init
movlw 0x80 ;Direccion de Inicio del LCD1 (Primera linea)
movwf DD_ram_LCD1
movlw 0xC0 ;Direccion de Inicio del LCD2 (Segunda linea)
movwf DD_ram_LCD2
movf DD_ram_LCD1,W
call comando
movlw 'P'
call dato
movlw 'R'
call dato
movlw 'O'
call dato
movlw 'G'
call dato
movlw 'R'
call dato
movlw 'A'
call dato
movlw 'M'
call dato
movlw 'A'
call dato
movlw ' '
call dato
movlw 'B'
call dato
movlw 'A'
call dato
movlw 'S'
call dato
movlw 'E'
call dato
movf DD_ram_LCD2,W
call comando
movlw 'L'
call dato
movlw 'C'
call dato
movlw 'D'
call dato
movlw ' '
call dato
movlw 'D'
call dato
movlw 'E'
call dato
movlw ' '
call dato
movlw '8'
call dato
movlw '-'
call dato
movlw 'B'
call dato
movlw 'I'
call dato
movlw 'T'
call dato
movlw 'S'
call dato
nada goto nada
;MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
;MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
;MMM MMM
;MMM S U B R R U T I N A D E L L C D MMM
;MMM MMM
;MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
;MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
Display_Init movlw Funtion_set_7 ;8 bits, Display 2 lineas y 5x7
call comando
movlw LCD_clear ;Limpia LCD
call comando
movlw LCD_home ;Return cursor to home position
call comando
movlw Entry_mode_set_3 ;I/D 1:Incrementa 0:Decrementa
call comando
movlw Display_OnOff_control_5 ;Set ON/OFF entere Display (D)
call comando
return
;----------------------------
dato bsf PORTE,RS
movwf PORTD
bsf PORTE,E
nop
bcf PORTE,E
call espera
return
;----------------------------
comando bcf PORTE,RS
movwf PORTD
bsf PORTE,E
nop
bcf PORTE,E
call espera
return
;======================================================================================
espera movlw 0x10
movwf cont1
movlw 0x10
movwf cont2
movlw 0x02
movwf cont3
decre decfsz cont1,1
goto decre
movlw 0x10
movwf cont1
decfsz cont2,1
goto decre
movlw 0x10
movwf cont2
decfsz cont3
goto decre
return
END