processor PIC16F873A #include ;__config _XT_OSC & _WDT_OFF & _PWRTE_OFF & _CP_OFF & _LVP_OFF & _BODEN_OFF __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_OFF & _BOREN_OFF & _LVP_OFF & _CP_OFF & _CPD_OFF #define RS PORTA, 1 ; porta RS do lcd 16x2 - register select signal #define RW PORTA, 2 ; porta RW do lcd 16x2 - read/write #define EN PORTA, 3 ; porta E do LCD 16x2 - enable cblock 0x20 ;definir variaveis comando endc org 0x0 ;errorlevel -302 ;desabilitar mensagens de avisos na compilacao goto INICIO ;;;;;;;;INICIO DO TIMER;;;;;;;;;;;;;;;; org 0x004 retfie INICIO: movlw b'00000000' banksel TRISC movwf TRISC movlw b'001100011' ; 1, 2, 3 saidas movwf TRISA banksel PORTC clrf PORTC clrf PORTA ;resetar PORTA e PORTC call INIT_LCD LOOP: goto LOOP INIT_LCD: movlw b'00111000' ; instrucao: function set -> ver tabela de comandos do lcd call COMANDO_LCD ; LCD 8 bits; 2 linhas; 5x7 pontos movlw b'00001111' ; instrucao: display on/off call COMANDO_LCD ; LCD on; cursor: sim; blink: sim movlw b'00000110' ; instrucao: Entry Mode Set call COMANDO_LCD ; vai para direita; nao mexe o display movlw b'00000001' ; instrucao: Clear Display call COMANDO_LCD retlw d'0' ; retorna W = 0 COMANDO_LCD: movwf comando call ESPERA_LCD ; espera o lcd ficar pronto bcf RW ; modo leitura bcf RS ; modo comando ; os comando a serem utilizados sempre sao do tipo RS = 0 R/W = 0 e PORTC bsf EN ; habilta LCD movf comando, W movwf PORTC ; envia dado pro LCD bcf EN ; desativa LCD retlw d'0' ; retorn w = 0 ESPERA_LCD: banksel TRISC movlw b'11111111' movwf TRISC ; todas PORTC sao input banksel PORTA bcf RS ; modo comando bsf RW ; modo escrita bsf EN ; habilita LCD movf PORTC, W ; salva a leitura do LCD bcf EN ; desabilita LCD ; testar o busy flag - 8 bit do PORTC andlw b'10000000' ; se o busy flag for 0, entao o lcd esta pronto ; portando, essa operacao tem que resultar em 0 btfss STATUS, Z ; a operacao deu 0 goto ESPERA_LCD ; nao, faz tudo de novo ate estar pronto ;VOLTAR AO NORMAL bcf RW ; modo leitura banksel TRISC movlw d'00000000' movwf TRISC ; volta o PORTC para output banksel PORTC ; deixar no banco 0 retlw d'0' ; retorna W = 0 end