Tabelas: um excelente recurso de programação
Trabalhando com o Program Counter (PC). Ver o livro na página 125.
Estrutura de uma tabela
|
ENDEREÇO |
OPCODE |
COMENTÁRIO |
|
0FF | ||
|
100 |
MOVWF NUMERO |
;O registrador número é que contém o indicador |
|
101 |
CALL TABELA |
;Que será utilizado para chamar a tabela |
|
102 | ||
|
1AA (TABELA) |
MOVLW B’00000111’ |
;É colocada uma trava na tabela, igual ao nº de ;linhas |
|
1AB |
ANDWF NUMERO,W |
;A operação AND garante o funcionamento da ;trava |
|
1AC |
ADDWF PCL,F |
;É passado o número ao PCL e o desvio é feito |
|
1AD |
RETLW .2 |
;Retorna o valor decimal = 2 |
|
1AE |
RETLW .4 |
;Retorna o valor decimal = 4 |
|
1AF |
RETLW .8 |
;Retorna o valor decimal = 8 |
|
1B0 |
RETLW .16 |
;Retorna o valor decimal = 16 |
|
1B1 |
RETLW .32 |
;Retorna o valor decimal = 32 |
|
1B2 |
RETLW .64 |
;Retorna o valor decimal = 64 |
|
1B3 |
RETLW .128 |
;Retorna o valor decimal = 128 |
|
1B4 |
RETLW .255 |
;Retorna o valor decimal = 255 |
|
1B5 | ||
|
1B6 |
EXERCÍCIO 5: Contador acionado por botões com tabela BCD
Inserir nos programas 3 e 4 uma tabela Binário para BCD, eliminando a necessidade de uso de um conversor 4511 no seu hardware.
Do modo como foi construída a placa com display para uso no kit da escola, deve ser configurada uma tabela de acordo com o mostrado abaixo:
|
PORTB (bits) |
7 6 5 4 3 2 1 0 |
|
Terminais do display |
h g f e d c b a |
|
NÚMERO NO DISPLAY |
VALOR BINÁRIO NA TABELA |
|
0 |
B ’0 0 1 1 1 1 1 1’ |
|
1 |
B ’0 0 0 0 0 1 1 0’ |
|
2 |
B ’0 1 0 1 1 0 1 1’ |
|
3 |
B ’0 1 0 0 1 1 1 1’ |
|
4 |
B ’0 1 1 0 0 1 1 0’ |
|
5 |
B ’0 1 1 0 1 1 0 1’ |
|
6 |
B ’0 1 1 1 1 1 0 1’ |
|
7 |
B ’0 0 0 0 0 1 1 1’ |
|
8 |
B ’0 1 1 1 1 1 1 1’ |
|
9 |
B ’0 1 1 0 0 1 1 0’ |
|
A |
B ’0 1 1 1 0 1 1 1’ |
|
B |
B ’0 1 1 1 1 1 0 0’ |
|
C |
B ’0 0 1 1 1 0 0 1’ |
|
D |
B ’0 1 0 1 1 1 1 0’ |
|
E |
B ’0 1 1 1 1 0 0 1’ |
|
F |
B ’0 1 1 1 0 0 0 1’ |
Acesso indireto à memória
Um dos modos de acesso à memória RAM do PIC é chamado de aceso indireto, no qual se utilizam dois registradores SFR para realizar o acesso a qualquer endereço da memória RAM. São eles:
-
FSR (File Select Register): utilizado para especificação do endereço do registrador a ser acessado indiretamente;
-
INDF (Indirect Addressing File): utilizado para escrita/leitura do conteúdo do endereço especificado pelo registrador FSR.
Como estes registradores trabalham com 8 bits, podem acessar 256 posições da memória RAM, o que significa até dois bancos ao mesmo tempo, sempre nos pares 0-1 e 2-3.
Veja o exemplo a seguir utilizando o acesso indireto para fazer o apagamento da memória RAM.
|
OPCODE |
COMENTÁRIO |
|
MOVLW 0x20 |
;Primeiro endereço da memória RAM |
|
MOVWF FSR |
;Aponta o seletor para o primeiro endereço da RAM |
|
LIMPA_RAM | |
|
CLRF INDF |
;Faz a limpeza do endereço apontado por FSR |
|
INCF FSR,F |
;Passa para o próximo endereço |
|
MOVF FSR,W |
;Transfere o valor do próximo endereço para o WREG |
|
XORLW 0x80 |
;Verifica se o último endereço +1 já chegou (resultado = 0) |
|
BTFSS STATUS,Z |
;Testa se já acabou |
|
GOTO LIMPA_RAM |
;Caso não tenha acabado retorna para a limpeza do próximo ;endereço, até que todos estejam limpos |
EXERCÍCIO 6: Contador acionado por botões com tabela BCD
Inserir nos programas 3 e 4 uma rotina de limpeza da memória RAM antes de executar as demais tarefas.
No próximo artigo aprenderemos um pouco sobre interrupções no PIC. Aguardem!
Saiba mais
Curso de C com microcontroladores MCF51QE128 e MC9S08QE128 – Parte 1










