André Pereira
Continuação:
Dando
continuidade com o nosso trabalho sobre o uso e configuração das I/Os dos
microcontroladores da Zilog linha Z8 Encore, vamos falar mais um pouco dos periféricos
e outras particularidades do microcontrolador e desenvolver algum exemplo
prático.
Configurando os I/Os para operação de funções alternativas.
Quando os pinos de I/Os são configurados para operação de funções
alternativas, é dado acesso a funções especiais do microcontrolador como os
TIMERS, Comunicação serial e demais periféricos. Para definir as I/Os para
operação de funções alternativas, o registro de endereço do port em questão,
deve ser definido como tipo de função alternativa que se queira naquele pino ou
port e o registro de controle deve ser preenchido com valores pertinentes aos
pinos do port específico envolvido com a função que se deseja usar nesse pino.
A tabela a seguir lista as funções alternativas associadas com cada pino do
port dos microcontroladores Z8 Encore XP.
Por exemplo, digamos que se decida
usar o periférico Timer 0 do microcontrolador Z8 Encore XP, configurando ou
definindo o pino do PORTA para operação de função alternativa. Só e somente a
função de saída no pino é considerado nesse exemplo.
O código do exemplo 1, mostra como é configurado ou definido o pino PA1
do PORTA para operação de função alternativa configurando os bits apropriados
no registradores adequados.
Exemplo 1 :
/***************************************************/
// inicialização
//
/****************************************************/
PAADDR = 0x02 ; // Registro do endereço do
PORTA seleciona sub-registro de função alternativa.
PACTL |= 0X02 ; // Registro de controle do
PORTA seta saída do TIMER0.
PAADDR = 0X01 ; // Registro de endereço do PORTA sub-registro
de direção de dados.
PACTL &= 0Xfd ; // Registro de
controle do PORTA define bit 1 como saída, se Timer 0 selecionado.
PAADDR = 0X03 ; // Registro de endereço do PORTA seleciona o
sub-registro de controle de saída.
PACTL &= 0Xfd ; // Registro de
controle do PORTA define o bit 1 como push-pull.
PAADDR = 0X00 ; // Permite bloquear os sub-registros contra
alterações inadvertidas depois de configurados.
Exemplo 2 :
/*****************************************************/
// Inicialização
//
/*****************************************************/
PAADDR = 0X02 ; // Registro de endereço do
PORTA seleciona sub-registro de função alternativa.
PACTL |= 0X01 ; // Registro de controle do PORTA define
entrada do Timer0.
PAADDR = 0X01 ; // Registro de endereço do
PORTA seleciona sub-registro de direção de dados.
PACTL |= 0X01 ; // Registro de controle do PORTA define bit 0
como entrada, se Timer 0 selecionado.
PAADDR = 0X00 ; // Permite bloquear os
sub-registros contra alterações inadvertidas depois de configurados.
NOTA: Os registros dos ports de A~H
selecionam as funcionalidades dos I/Os acessíveis através dos registros de
controle dos ports de A~H. Definindo os pinos dos ports como 1 nos registros
dos endereços dos ports de A~H, através dos registros de controle dos ports,
habilita o port correspondente para operação de função alternativa.
Definindo as I/Os como
operação de modo misto.
Agora que aprendemos como definir os
pinos dos microcontroladores Z8 Encore como entrada, saída e operação de função
alternativa, temos, aqui, um exemplo de como usar, simultaneamente, pinos
diferentes no mesmo PORT como entrada, saída e operação de função alternativa.
Por exemplo, assuma que você queira
usar o pino do Timer 0 como saída definindo isso no pino PA1 do PORTA.
Deseja-se usar os pinos PA4 e PA5 como entrada, deseja-se, também,
usar os pinos PA6 e PA7 como saídas dreno aberto. Depois de definir isso nos
registradores, você deseja ler dados dos pinos [4,5] e escrever dados nos pinos
[6,7] com lógica [1,0].
O código a seguir
ilustra melhor como configurar o PORTA para operação mista.
/******************************************************************************/
// Inicialização
//
/*****************************************************************************/
PAADDR = 0x02 ; // Registro de endereço do
PORTA seleciona sub-registro de função alternativa.
PACTL |= 0x02 ; // Registro de controle do
PORTA define saída do Timer 0, demais pinos livres como I/O.
PAADDR = 0x01 ; // Registro de endereço do PORTA seleciona
sub-registro de direção de dados.
PACTL &= 0x3d ; //3d = 00111101 define os bits 1,6 e 7 como
saída e os pinos 4 e 5, como entrada.
PAADDR = 0X03 ;
// Registro de endereço do PORTA seleciona o sub-registro de controle de
saída.
PACTL &= 0Xfd ;
// Registro de controle do PORTA define o bit 1 como push-pull.
PAADDR = 0X00 ;
// Permite bloquear os sub-registros contra alterações inadvertidas
depois de configurados.
data = code ; // Lê os dados do registro de entrada do
PORTA para dentro da variável 'data'.
data = data & 0x03 ; // Faz uma operação lógica
AND com 00110000 para mascarar os valores dos bits 4 e 5.
PAOUT = data | 0x40 ; //Faz uma operação lógica OR do
valor em data com 01000000 e escreve no registro de saída do
PORTA
para setar os bits [6,7] para [1,0].
Conclusão :
Os pinos de I/Os são facilmente
configuráveis usando os registros de endereços de ports junto com os registros
de controle dos ports e seus respectivos sub-registros como explicado nesse
documento.
O pino de qualquer I/O pode ser usado
como fonte de interrupção externa quando configurados, somente, como entrada.
A tabela neste documento, acima
descrita, demonstra que as funções de periféricos on-chip dos
microcontroladores Z8 Encore XP depende de posição de bitsnos ports.
O acesso aos I/Os dos ports é feito
através do registro de dados de entrada e de saída.
Nesse ponto,
finalizamos a parte de ensinar a acessar, configurar e usar os recursos de
pinos e periféricos dos microcontroladores da Zilog para quem tivesse alguma
dúvida. Nos posts seguintes, estarei procurando implementar algumas aplicações
de exemplos para que o que foi ensinado possa ser visto no mundo real e ajudar
aos demais a entenderem o fascinante mundo dos microcontroladores, em especial,
os da zilog, a projetarem seus circuitos e projetos. Espero que tenham gostado
e até a terceira parte dessa série.