Tabela em Assembly para escrever em um display de LCD com PIC

Após ter apanhado um monte com assembly e perturbado bastante o professor da cadeira de projetos com microcontroladores aprendi a trabalhar com tabelas em assembly, mesmo sabendo que percorrer uma tabela em assembly no microcontrolador PIC é um sacrifício (que no final recompensa o trabalho). Mas vamos deixa de conversa e ir direto aos trabalhos…

Primeiro devemos conhecer uma das diretivas de dados do assembly, a responsável de gerar series de instruções RETLW (Instrução que retorna de uma chamada CALL com o resultado de W ), uma instrução para cada termo.

DT: Definindo uma tabela de dados

Sintaxe:     dt [termo]

Descrição:  Esta diretiva vai gerar uma série de instruções RETLW, uma instrução para cada termo.

dt “Mensagem” , 0
dt primeiro, segundo, terceiro

Após saber como funciona o DT vamos escrever em um LCD com essa instrução (em um outro post irei informar como inicializar e configurar um Display LCD 16×2).

A rotina abaixo é parte de um projeto que desenvolvi, que tem a função de escrever em um LCD de 16×2 que pula para próxima linha do LCD automaticamente após o termino da escrita na primeira linha.


;*********************************************************
;* MSG *
;*********************************************************
LCD_PRINCIPAL ;DEFINIÇÃO DE FUNÇÃO
BANK0
CLRF CONT_MENS ;LIMPA VARIÁVEL
CALL ESCREVE_LINHA1 ;INFORMA A LINHA EM QUE VAI ESCREVER
MOVLW .16 ;DEFINE A QUANTIDADE DE COLUNAS
MOVWF LINHA ;JOGA DENTRO DE LINHA
BCF POSICAO ;INFORMA A POSIÇÃO DE ESCRITA 0 = PRIMEIRA LINHA MSG_PRINCIPAL
BANK0
MOVF CONT_MENS,W ;JOGA O VALOR DE CONT_MENS PARA W
CALL STRING_LCD ;VAI PARA ESCRITA DA MENSAGEM
MOVWF CARACTER ;COLOCA O RETORNO DA FUNÇÃO STRING EM CARACTER
SUBLW .0 ;SUBTRAI W DE ZERO
BANK0
BTFSC STATUS,Z ;O RESULTADO DEU ZERO?
GOTO VARRE ;SE == 0, JÁ LEU TODA STRING E VAI PARA A ROTINA PRINCIPAL
INCF CONT_MENS,1 ;SE =! 0, INCREMENTE 1 NA VARIÁVEL CONT_MENS
MOVF CARACTER,W ;JOGA A LETRA QUE ESTA EM CARACTER E JOGA PRA W
MOVWF DADOS_LCD ;JOGA CARACTER PARA O LCD
CALL PULSO ;ROTINA DO LCD
DECFSZ LINHA,1 ;DECREMENTA OS 16. QUE E A QUANTIDADE MÁXIMA DE ESCRITA EM UMA LINHA
GOTO RECOMECA ;RECOMEÇA O ENVIO DE UMA PRÓXIMA LETRA NA LINHA 1
GOTO RECOMESA_POS2 ;RECOMEÇA O ENVIO DE UMA PRÓXIMA LETRA NA LINHA 2 STRING_LCD
BANK0
ADDWF PCL,1 ;SOMA W AO DESLOCAMENTO AO PC (PROGRAM COUNT) - W + PC
MSG_LCD DT "MENSAGEM A SER ENVIADA PRO LCD",0 ;CADA LETRA LIDA PELA POSIÇÃO DO PC E ADICIONADA EM W E RETORNA PELO COMANDO RETLW RECOMECA
GOTO MSG_PRINCIPAL ;RECOMEÇA O ENVIO DE UMA PRÓXIMA LETRA RECOMESA_POS2
BANK0
BTFSS POSICAO ;A ESCRITA ESTA EM QUE POSIÇÃO? SE "0" VAI PRA FUNÇÃO ESCREVE_LINHA2 E
CALL ESCREVE_LINHA2 ;DEFINE ESCRITA NA LINHA 2 E MUDA VALOR DA VARIÁVEL POSIÇÃO PARA 1, SENÃO CONTINUA ESCREVENDO NA LINHA 1
GOTO MSG_PRINCIPAL

Abaixo segue a logica do código:
lcd_principal

Aguarde os próximos capítulos, pois estarei disponibilizando mais algumas técnicas que aprendi com essa cadeira.

Anúncios

Um comentário em “Tabela em Assembly para escrever em um display de LCD com PIC

  1. Olá amigo, tudo bom? Pretendo usar um LCD num projeto da faculdade. Estou querendo usar a diretiva “DT” para armazenar strings. Quer dizer, armazenar eu sei, mas como faço para ler cada caractere e enviar um por um a um LCD? Desde já agradeço.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s