Ir ao conteúdo
  • Cadastre-se

Como configurar um LCD em Assembler


Posts recomendados

Olá pessoal, sou novo no forum como membro e estou aprendendo usar o fórum agora e tenho bastante informações para trocar.

 

Consigo programar bastante coisas em Assembler, mas nunca trabalhei com LCD. Agora estou tentando programar e estou com dificuldade por não encontrar apostilas....

 

Duvida:

Como configurar um display lcd 16x2, em assembler. E como endereçar corretamente para uma palavra ser escrita no LCD...

 

Link para o comentário
Compartilhar em outros sites

Obrigado pela atenção.

Sim, estou usando um pic 16f877a com o MPLAB.

Gostei do seu arquivo, achei bem compacto, vou estudar seu arquivo, porque normalmente faço arquivos grandes para coisas simples.

Recebi uma apostila muito boa do pic 16f887a com muitas informações inclusive sobre LCD..., vou pesquisar como colocar no fórum para outras pessoas que tiverem interesse.

 

Muito obrigado.

Link para o comentário
Compartilhar em outros sites

Se você entender o endereçamento do LCD e algumas rotinas do exemplo,vai poder escrever em lcds com mais linha e caracteres,

 
Costumei a fazer arquivos como o exemplo abaixo.
Não sei se foi errado eu aprender a fazer desse jeito, passo a passo...., a montagem dos arquivos e definições ficam enormes, até chegar 
na rotina principal....
Então quando vejo um arquivo que faz a mesma coisa e é menor (mais compacto), fico perdido, porque achava que se não monta-se um arquivo como nos livros, o mesmo não funcionaria.... . É, estou enganado, vou começar a me adaptar para encurtar meus arquivos...
 
 
 
;*************************************************************************
;       PROGRAMA - ACIONAR UM LED COM BOTAO USANDO DEBOUNCE
;                  DESENVOLVIDO POR WAGNER DA SILVA ZANCO                      
;               VERSAO 1.0
;            23/06/2003
;*************************************************************************
; ARQUIVOS DE DEFINICOES      
;*************************************************************************
#INCLUDE <P16F628A.INC>   ;ARQUIVO padrão MICROCHIP PARA O PIC16F628A
;*************************************************************************
;   BITS DE configuração        
;*************************************************************************
__CONFIG _BOREN_ON&_CP_ON&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_DATA_CP_OFF&_MCLRE_ON&_XT_OSC
;*************************************************************************
;     PAGINACAO DA MEMORIA                     
;*************************************************************************
;COMANDOS PARA ALTERACAO DE PAGINA DE MEMORIA
 
#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANCO 0 DE MEMORIA
#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANCO 1 DE MEMORIA
 
;*************************************************************************
;    VARIAVEIS     
;*************************************************************************
;ENDERECOS DAS VARIAVEIS UTILIZADAS PELO SISTEMA
 
CBLOCK 0x20 ;ENDERECO INICIAL DA MEMORIA DO USUARIO
 
DEBOUNCE ;0X20 USADO NO DEBOUNCE
COUNT ;0X21 USADO NO DEBOUNCE
ENDC ;FIM DO BLOCO DE MEMORIA
 
;*************************************************************************
;           CONSTANTES      
;*************************************************************************
;CONSTANTES UTILIZADAS PELO SISTEMA
 
DEB EQU .200 ;INICIALIZACAO DO REG DEBOUNCE
DEB_CONT EQU .50 ;INICIALIZACAO DO REG COUNT
 
;*************************************************************************
;               ENTRADAS    
;*************************************************************************
;PINOS QUE SERAO UTILIZADOS COMO ENTRADA
 
#DEFINE  BOTAO1   PORTA,1 ;0 --> PRESSIONADO
;1 --> LIBERADO
 
;*************************************************************************
;           SAIDAS     
;*************************************************************************
; PINOS QUE SERAO UTILIZADOS COMO SAIDA
 
#DEFINE  LED1 PORTB,0 ;0 --> APAGADO
;1 --> ACESO
 
;*************************************************************************
;   VETOR DE RESET     
;*************************************************************************
ORG 0x00 ;ENDERECO INICIAL DE PROCESSAMENTO
GOTO INICIO
 
;*************************************************************************
;      INTERRUPCAO    
;*************************************************************************
;AS INTERRUPCOES NAO SERAO UTILIZADAS
 
ORG 0x04 ;ENDERECO INICAL DA INTERRUPCAO
RETFIE ;RETORNA DA INTERRUPCAO
 
;*************************************************************************
;             INICIO    
;*************************************************************************
INICIO
BANK1 ;ALTERA PARA BANCO1
MOVLW B'00000010'
MOVWF TRISA            ;DEFINE RA1 COMO ENTRADA e DEMAIS
;COMO SAIDA
MOVLW B'00000000'
MOVWF TRISB ;DEFINE O PORTB COMO SAIDA
 
MOVLW B'10000000'
MOVWF OPTION_REG ;PULL_UPS DESABILIADOS <7>
  ;DEMAIS  BITS IRRELEVANTES
MOVLW B'00000000'
MOVWF INTCON ;CHAVE GERAL DE INTERRUPCAO DESAGADA <7>
;DEMAIS  BITS IRRELEVANTES
 
BANK0 ;ATIVA BANCO 0
MOVLW B'00000111' ;CONFIGURA RA3:RA0 COM I/O<2:0>
MOVWF CMCON
 
;*************************************************************************
; INICIALIZACAO DAS VARIAVEIS    
;*************************************************************************
CLRF PORTA ;LIMPA PORTA 
CLRF PORTB ;LIMPA PORTB
 
;*************************************************************************
MAIN
MOVLW DEB ;INICIALIZA DEBOUNCE COM 200
MOVWF DEBOUNCE
MOVLW DEB_CONT ;INICIALIZA COUNT COM 50
MOVWF COUNT
 
TESTA_BOTAO
 
BTFSC BOTAO1 ;BOTAO1 ESTA PRESSIONADO?
GOTO MAIN ;NAO, DESVIA
;SIM, CONTINUA
FAZER_DEBOUNCE
 
DECFSZ DEBOUNCE,F ;DECREMENTA DEBOUNCE, DEBOUNCE=0?
GOTO TESTA_BOTAO ;NAO, DESVIA
;SIM, CONTINUA
MOVLW DEB ;INICIALIZA DEBOUNCE COM 200
MOVWF DEBOUNCE
 
DECFSZ COUNT,F ;DECREMENTA COUNT, COUNT=0?
GOTO TESTA_BOTAO ;NAO, DESVIA
;SIM, CONTINUA
TRATA_BOTAO
 
BTFSS LED1 ;LED1 ACESO?
GOTO ACENDE_LED ;NAO, DESVIA
;SIM, CONTINUA
APAGA_LED
 
BCF LED1 ;APAGA LED1
GOTO SOLTAR_BOTAO     ;DESVIA
 
ACENDE_LED
 
BSF LED1 ;ACENDE LED1
 
SOLTAR_BOTAO
 
BTFSS BOTAO1 ;BOTAO1 ESTA SOLTO?
GOTO $-1 ;NAO, AGUARDA SOLTAR BOTAO1
GOTO MAIN ;SIM, DESVIA
 
;*************************************************************************
END ;FIM DO PROGRAMA
;*************************************************************************
Link para o comentário
Compartilhar em outros sites

@brumasi,

 

Na minha opinião, o que voce faz é o correto. Documentação ajuda muito para quando um dia precisar mudar o programa.

 

Mas a grande maioria não documenta tão bem, e isso traz muita dificuldade para quem ainda está aprendendo.

 

Só com o tempo voce vai conseguir entender esses programas que os outros escrevem com pouca ou nenhuma documentação !

 

Paulo

Link para o comentário
Compartilhar em outros sites

@brumasi,acho que você esta se referindo aos 'INCLUDES'.

Quando uma rotina ou funções podem ser reaproveitadas mudando-se apenas alguma variáveis,você pode inclui-las ao projeto como se fosse uma biblioteca.

Desse modo o código principal fica mais limpo ja que as outras rotinas são ao mesmas de outros projetos.

Não tenha ' medo' de fazer experimentos nos projetos.

Quando começamos,achamos que temos que fazer exatamente como esta num livro ou projeto,mas com a pratica e entendimento verá que tudo pode ser mais 'prático' sem interferir no resultado final.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...