MICROCONTROLADORES HOLTEK -
PARTE 2 Durante esta pequena série de artigos utilizarei o microcontrolador HT48E10. Os outros membros da família possuem basicamente a mesma estrutura, variando apenas o número de I/Os e alguns periféricos. Para o interessado, esta seqüência de artigos poderá consistir em uma excelente documentação básica para um estudo mais aprofundado dos microcontroladores Holtek, família 48E.
A FAMÍLIA HT48E Conforme
demonstrado no primeiro
artigo a família
Holtek 48E utiliza arquitetura RISC (Reduced Intruction Set Code)
que proporciona um excelente ganho de performance, entre outras
vantagens. HARDWARE INTERNO Na figura abaixo é mostrada a arquitetura interna do microcontrolador HT48E10. Você notará a separação entre o bus (barramento) da memória de dados e o bus da memória de programa. Esta é a principal característica da arquitetura RISC. Assim é possível ter um set de instruções reduzido, mas bastante poderoso que enfatiza as operações de bit, byte e registradores.
Um outro dado importante a ser ressaltado é o fato de todos os periféricos e registradores de controle dos pinos de I/O estarem ligados ao barramento da memória de dados. Assim, a estrutura interna de um microcontrolador qualquer da família HT48E será sempre a mesma (com pouquíssimas variações para pinos de I/O e periféricos).
CONTROLE DE STACK (PILHA) DO HT48E10 O microcontrolador HT48E10 tem implementado uma estrutura de pilha com quatro níveis. O empilhamento do endereço de desvio é feito quando é chamada uma sub-rotina através da instrução de desvio CALL. O "desempilhamento" é realizado pela instrução RETI (retorno do desvio). Você deve estar atento para este limite quando programar o HT48E10, pois há apenas quatro níveis de empilhamento (em outros membros da família HT48E este número pode ser maior). Portanto, só é possível chamar três sub-rotinas dentro de uma outra sub-rotina, ou ainda realizar quatro chamadas (seqüencialmente) de sub-rotinas com a instrução CALL, uma dentro da outra. É importante que você compreenda que o empilhamento que estou me referindo diz respeito aos endereços de desvio feitos com a instrução CALL. Não estou me referindo ao empilhamento de dados, pratica muito comum e utilizada em outras famílias de microcontroladores com arquitetura não RISC. Este tipo de empilhamento (dados) não é possível na família 48E.
ORGANIZAÇÃO DA MEMÓRIA DE PROGRAMA A figura abaixo demonstra a divisão da memória de programa do microcontrolador HT48E10. A área total esta organizada em 1024 posições de 14 bits cada, que são acessadas através do PC (Program Counter), além dos registradores de controle de tabelas.
A posição de memória no endereço 00H é reservada para o inicio do programa, ou seja, sempre que o microcontrolador for ligado ou “resetado” ele buscara pela primeira instrução do programa nesta posição. Assim, você deve tomar o devido cuidado para que seu programa sempre inicie com este endereço. O endereço 04H é reservado para o vetor de tratamento para interrupção externa. Assim, caso o programa faça uso da interrupção externa, as primeiras instruções para tratamento desta interrupção deverão ser inseridas utilizando este endereço como referência. Já o endereço 08H é reservado ao vetor de tratamento da interrupção do Timer/Counter. As mesmas observações feitas a respeito do endereço 04H são validas aqui. Devido à proximidade entre os endereços dos vetores de tratamento de interrupções, fica óbvio que no caso do uso de ambas as interrupções, é quase que impossível inserir as instruções necessárias ao tratamento em tais vetores.Neste caso, o uso de uma instrução de desvio é a melhor opção. Assim a sub-rotina pode ser inserida em uma área de maior espaço. A única precaução neste caso é o uso da instrução RETI (retorno de interrupção) após o encerramento da mesma. Você deve ter notado que o tamanho da “palavra” na memória de programa do microcontrolador HT48E10 é de 14 bits. Esta é uma característica muito interessante a respeito de sua arquitetura, pois uma única palavra de 14 bits pode conter o operador e operando do comando. Ou seja, cada uma das posições de memória de programa (1024) guardará um comando completo. Desta forma o microcontrolador gasta apenas um ciclo de máquina para ler tanto o código da instrução, quanto o seu operando (dado da operação). O número de bits na palavra para memória de programa para a família HT48E é variável, conforme a tabela abaixo. Tabela – Palavra da memória de programa para a família HT48E
Assim a memória de programa para a família HT48E será sempre formada por um único banco, permitindo que qualquer desvio no programa seja feito pelas instruções JMP e CALL de forma direta, sem a necessidade de chaveamento de bancos, como em outros microcontroladores. Devido à arquitetura apresentada não é possível para o programa ler a própria memória de programa. Isso é muito utilizado no caso de armazenamento de dados como tabelas, por exemplo, dentro da própria área de programa. Para contornar este problema, basta usar as instruções TABRDC e TABRDL. Através destas é possível ter acesso a memória de programa, possibilitando assim fazer uso desta para o armazenamento de dados (apenas para leitura).
MEMÓRIA DE DADOS Na figura abaixo você pode ver a estrutura da memória de dados do microcontrolador HT48E10, toda baseada em registradores (a maioria disponível para escrita e leitura). São 23 posições com 8 bits cada (perceba que a memória de dados possui uma palavra com 8 bits – 1 byte - para todos os registradores) utilizados para os registradores de uso especial (que serão descritos mais à frente) e 64 bytes utilizados pelos registradores de uso geral (memória RAM – 40H a 7FH). O espaço dedicado a memória RAM entre um ou outro microcontrolador da mesma família pode variar.
[
É
importante salientar também que o número de
registradores de uso especial pode variar dependendo do modelo do
microcontrolador. Estes registradores auxiliam no controle dos
periféricos presentes no microcontrolador e assim é
natural que com a inclusão ou mesmo alteração de
um ou outro periférico, o número destes registradores
também seja alterado. Você não deve se preocupar
com isso neste momento.
REGISTRADORES DE USO GERAL A seguir serão descritos os registradores de uso especial presentes no microcontrolador HT48E10. - Indirecting Addressing Register (00H) – Esse registrador é utilizado para endereçamento indireto dos registradores, juntamente com o registrador MP (01H). - ACC (05H) – Toda movimentação de dados passa por este registrador. O acumulador é o registro de trabalho de um microcontrolador. É através dele que carregamos um dado na memória, realizamos operações matemáticas, etc. É neste registrador também que a ULA (Unidade Lógica Aritimética) insere os resultados de uma determinada operação artitimética. - PCL (06H) – Este registrador contem a parte menos significativa do PC (Program Counter). Alterando-se este registrador, pode-se realizar saltos de até 256 posições de memória. - TBLP
(07H) e TBLH (08H)
– Registrador “ponteiro de tabela” e “ordem alta da tabela”,
respectivamente. Utilizados em conjunto com as instruções
TABRDC e TABRDL para realizar a leitura de “dados” dentro da área
de programa. - WDTS (09H) – Registrador utilizado para o controle do Wacthdog Timer (Relógio Cão de Guarda). . - STATUS (0AH) – Registrador que informa o “estado” do microcontrolador (ULA, periféricos e outros). Este registrador é muito utilizado quando de uma operação aritimética, situações de desvio e outras. A tabela abaixo demonstra seus bits.
Tabela – Registrador de Status
Obs.: na tabela 2 o termo “ligado” deve ser interpretado como “levado ao nível lógico 1” e a palavra “desligado” como “levado ao nível lógico 0” - INTC (0BH) – Registrador de
controle
para
as interrupções presentes no microcontrolador. A tabela abaixo
demonstra seus bits.
Tabela – Registrador de controle para interrupções
- TMR (0DH) e TMRC (0EH) – Registradores de controle e uso para o periférico timer/counter.
Nesta parte da mini-série detalhei algumas partes do hardware dos microcontroladores Holtek - família HT48Exx muito importantes como a estrutura da memória e a descrição dos registradores de uso especial. Para aquele acostumado no uso de microcontroladores muita coisa pode facilmente ser assimilada. Já aquele que está iniciando pode ser sentir, num primeiro momento, um tanto perdido e até meio confuso. Se você se sentir assim, não há motivo para preocupação. Nos próximos artigos, você receberá mais informações sobre outras partes do hardware que irão ajudá-lo a compreender melhor o funcionamento e , consequentenmente, o uso do microcontrolador. Bons estudos e até a próxima! |
Copyright deste conteúdo reservado para Márcio José Soares e protegido pela Lei de Direitos Autorais LEI N° 9.610, de 19 de Fevereiro de 1998. É estritamente proibida a reprodução total ou parcial do conteúdo desta página em outros pontos da internet, livros ou outros tipos de publicações comerciais ou não, sem a prévia autorização por escrito do autor. |