; Rotina para escrever no LCD usando 4 bits de dados ;conectar o LCD no 16f877 como segue: ;PIC LCD ;RD4 DB4 ;RD5 DB5 ;RD6 DB6 ;RD7 DB7 ;RB4 RS ;RB5 E list p=16f877 ;processador radix dec include "p16f877.inc" ;carrega definições do 16F874 ; LCD_E equ 5 ;enable do lcd C_D equ 4 ;dados ou controle do lcd ESP equ 20H ESP1 equ 21H DADO equ 22H org 00H goto MAIN ; MAIN: bsf STATUS,RP0 clrf TRISD clrf TRISB bcf STATUS,RP0 clrf PORTB clrf PORTD bcf PORTB,C_D call INIDISP movlw 0X80 call COMDISP movlw "R" call WRDISP movlw "o" call WRDISP movlw "b" call WRDISP movlw "e" call WRDISP movlw "r" call WRDISP movlw "t" call WRDISP movlw "o" call WRDISP movlw "R" call WRDISP movlw "o" call WRDISP movlw "b" call WRDISP movlw "e" call WRDISP movlw "r" call WRDISP movlw "t" call WRDISP movlw "o" call WRDISP movlw 0XC0 call COMDISP movlw " " call WRDISP movlw 0X01 ;cacteres da CGRAM call WRDISP movlw 0X02 call WRDISP movlw 0X03 call WRDISP movlw " " call WRDISP movlw " " call WRDISP movlw " " call WRDISP goto $ INIDISP: call INI ;espero lcd executar comando anterior movlw 0X28 ;primeiro comando modo 4 bits movwf PORTD ;envio bsf PORTB,LCD_E ;dou pulso para aceite de comando bcf PORTB,LCD_E call INI ;espero lcd executar comando anterior movlw 0X0C ;quarto comando modo 4 bits call COMDISP ;envio de comando movlw 0X06 ;comando para entrada de novo caracter a direita call COMDISP ;envio de comando movlw 0X01 ;comando cursor inativo call COMDISP ;envio de comando movlw 0X40 call COMDISP movlw B'00001101' ;| call WRDISP ;| movlw B'00010010' ;| call WRDISP ;| movlw B'00001100' ;| call WRDISP ;| movlw B'00010010' ;|grava na CGRAM caracter õ call WRDISP ;| movlw B'00010010' ;| call WRDISP ;| movlw B'00010010' ;| call WRDISP ;| movlw B'00001100' ;| call WRDISP ;| movlw B'00000000' ;| call WRDISP ;| movlw B'00000001' ;| call WRDISP ;| movlw B'00001110' ;| call WRDISP ;| movlw B'00010001' ;| call WRDISP ;| movlw B'00010001' ;|grava na CGRAM caracter Á call WRDISP ;| movlw B'00011111' ;| call WRDISP ;| movlw B'00010001' ;| call WRDISP ;| movlw B'00010001' ;| call WRDISP ;| movlw B'00000000' ;| call WRDISP movlw B'00001101' ;| call WRDISP ;| movlw B'00010010' ;| call WRDISP ;| movlw B'00001110' ;| call WRDISP ;| movlw B'00000001' ;|grava na CGRAM caracter ã call WRDISP ;| movlw B'00001111' ;| call WRDISP ;| movlw B'00010001' ;| call WRDISP ;| movlw B'00011111' ;| call WRDISP ;| movlw B'00000000' ;| call WRDISP movlw 0X01 ;comando de limpeza do lcd call COMDISP ;envio de comando call INI ;espero lcd executar comando anterior return COMDISP: movwf DADO movlw 0XF0 andwf DADO,0 movwf PORTD bcf PORTB,C_D bsf PORTB,LCD_E bcf PORTB,LCD_E swapf DADO,1 movlw 0XF0 andwf DADO,0 movwf PORTD bcf PORTB,C_D bsf PORTB,LCD_E bcf PORTB,LCD_E clrf DADO del1: nop nop decfsz DADO,1 goto del1 goto del2 WRDISP: movwf DADO movlw 0XF0 andwf DADO,0 movwf PORTD bsf PORTB,C_D bsf PORTB,LCD_E bcf PORTB,LCD_E swapf DADO,1 movlw 0XF0 andwf DADO,0 movwf PORTD bsf PORTB,C_D bsf PORTB,LCD_E bcf PORTB,LCD_E del2 clrf DADO del3 nop decfsz DADO,1 goto del3 return INI: clrf ESP1 bsf ESP1,5 clrf ESP loop: nop decfsz ESP,1 goto loop decfsz ESP1,1 goto loop return end