From e58f8b04eb53da9438209de6b991a10a1fb0091c Mon Sep 17 00:00:00 2001 From: leo Date: Wed, 15 Nov 2023 20:47:27 -0300 Subject: lcd inicializar --- lcd.asm | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 lcd.asm (limited to 'lcd.asm') diff --git a/lcd.asm b/lcd.asm new file mode 100644 index 0000000..8fd0f01 --- /dev/null +++ b/lcd.asm @@ -0,0 +1,91 @@ +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 -- cgit v1.2.3