Pessoall,
Bom dia
Não estou conseguindo escrever no display LCD 16x2 alfanumérico em ASM com o PIC 18F4550, segue partes do programa que se refere ao LCD, tem alguma coisa erra?, tá faltando alguma configuração?
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * DEFINIÇÃO DAS VARIÁVEIS *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CBLOCK 0X00 ; BANK 0 --> 0X00..0X5F --> ACCESS BANK
TEMPO1
TEMPO0 ; CONTADORES P/ DELAY
DISP_LCD_TEMP
AUX ; REGISTRADOR AUXILIAR DE USO GERAL
UNIDADE ; ARMAZENA VALOR DA UNIDADE
DEZENA ; ARMAZENA VALOR DA DEZENA
CENTENA ; ARMAZENA VALOR DA CENTENA
ENDC
........................................................................................................................
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * SAÍDAS *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; AS SAÍDAS DEVEM SER ASSOCIADAS A NOMES PARA FACILITAR A PROGRAMAÇÃO E
; FUTURAS ALTERAÇÕES DO HARDWARE.
#DEFINE DISP_LCD LATD ; BARRAMENTO DE DADOS DO DISPLAY
#DEFINE RS LATD,0 ; INDICA P/ O DISPLAY UM DADO OU COMANDO
; 1 -> DADO
; 0 -> COMANDO
#DEFINE ENABLE LATD,1 ; SINAL DE ENABLE P/ DISPLAY
; ATIVO NA BORDA DE DESCIDA
............................................................................................................................................................
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * ROTINA DE DELAY (DE 1MS ATÉ 256MS) *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTA É UMA ROTINA DE DELAY VARIÁVEL, COM DURAÇÃO DE 1MS X O VALOR PASSADO
; EM WORK (W).
DELAY_MS
MOVWF TEMPO1 ; CARREGA TEMPO1 (UNIDADES DE MS)
MOVLW .250
MOVWF TEMPO0 ; CARREGA TEMPO0 (P/ CONTAR 1MS)
CLRWDT ; LIMPA WDT (PERDE TEMPO)
DECFSZ TEMPO0,F ; FIM DE TEMPO0 ?
BRA $-.4 ; NÃO - VOLTA 2 INSTRUÇÕES
; SIM - PASSOU-SE 1ms
DECFSZ TEMPO1,F ; FIM DE TEMPO1 ?
BRA $-.12 ; NÃO - VOLTA 6 INSTRUÇÕES
RETURN ; SIM - RETORNA
.................................................................................................................................................
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * ROTINA DE ESCRITA DE UM CARACTER NO DISPLAY *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTA ROTINA ENVIA UM CARACTER PARA O MÓDULO DE LCD. O CARACTER A SER
; ESCRITO DEVE SER COLOCADO EM WORK (W) ANTES DE CHAMAR A ROTINA.
ESCREVE
BSF ENABLE ;habilita LCD para pegar informação no barramento
MOVWF DISP_LCD_TEMP ;guarda informação atual no temporário
MOVLW 0X0F ;zera o barramento de 4 vias (DB4 à DB7)
ANDWF DISP_LCD,F ;atualiza LCD: zera o barramento
MOVLW 0XF0 ;máscara para informação de DB4 à DB7
ANDWF DISP_LCD_TEMP,W ;envia parte alta primeiro
IORWF DISP_LCD,F ;atualiza LCD
BCF ENABLE ;desabilita LCD
NOP ;atraso
BSF ENABLE ;habilita LCD para pegar informação no barramento
SWAPF DISP_LCD_TEMP,F ;inverte para alta com parte baixa no temporário
MOVLW 0X0F ;zera o barramento de 4 vias (DB4 à DB7)
ANDWF DISP_LCD,F ;atualiza LCD: zera o barramento
MOVLW 0XF0 ;máscara para informação de DB4 à DB7
ANDWF DISP_LCD_TEMP,W ;envia parte baixa da informação original
IORWF DISP_LCD,F ;atualiza LCD
BCF ENABLE ;desabilita LCD
MOVLW .1
RCALL DELAY_MS ; DELAY DE 1MS
RETURN ; RETORNA
.....................................................................................................................................
MOVLW B'00000000'
MOVWF TRISD ; CONFIGURA I/O DO PORTD
............................................................................................................................................
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * CONFIGURAÇÕES INICIAIS DO DISPLAY *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTA ROTINA INICIALIZA O DISPLAY P/ COMUNICAÇÃO DE 8 VIAS, DISPLAY PARA 2
; LINHAS, CURSOR APAGADO E DESLOCAMENTO DO CURSOR À DIREITA.
INICIALIZACAO_DISPLAY
BCF RS ; SELECIONA O DISPLAY P/ COMANDOS
MOVLW 0X30 ; ESCREVE COMANDO 0X30 PARA
RCALL ESCREVE ; INICIALIZAÇÃO
MOVLW .3
RCALL DELAY_MS ; DELAY DE 3MS (EXIGIDO PELO DISPLAY)
MOVLW 0X30 ; ESCREVE COMANDO 0X30 PARA
RCALL ESCREVE ; INICIALIZAÇÃO
MOVLW 0X30 ; ESCREVE COMANDO 0X30 PARA
RCALL ESCREVE ; INICIALIZAÇÃO
MOVLW B'00101000' ; ESCREVE COMANDO PARA
RCALL ESCREVE ; INTERFACE DE 4 VIAS DE DADOS
MOVLW B'00000001' ; ESCREVE COMANDO PARA
RCALL ESCREVE ; LIMPAR TODO O DISPLAY
MOVLW .1
RCALL DELAY_MS ; DELAY DE 1MS
MOVLW B'00001100' ; ESCREVE COMANDO PARA
RCALL ESCREVE ; LIGAR O DISPLAY SEM CURSOR
MOVLW B'00000110' ; ESCREVE COMANDO PARA INCREM.
RCALL ESCREVE ; AUTOMÁTICO À DIREITA
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * ROTINA DE ESCRITA DA TELA PRINCIPAL *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ESTA ROTINA ESCREVE A TELA PRINCIPAL DO PROGRAMA, COM AS FRASES:
; LINHA 1 - "USART:9600,8,n,1"
; LINHA 2 - "TX: d h RX: "
MOVLW 0X80 ; COMANDO PARA POSICIONAR O CURSOR
RCALL ESCREVE ; LINHA 0 / COLUNA 0
BSF RS ; CONFIGURA CONVERSOR A/D; SELECIONA O DISPLAY P/ DADOS
....................................................................................................................................................................
Abraços,
Paulo Roquetti
Jaguariúna - SP
" Quando a gente vê uma moeda no chão, a gente só saberá o real valor dela se olhar as duas faces"
Meus projetos no youtube
http://www.youtube.com/results?search_q ... type=&aq=f