quinta-feira, 25 de abril de 2013

Jornal Ícone Ed. 206 - Zilog - Usando os pinos de I/Os dos Microcontroladores Z8 encore XP - parte 2

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.

Nenhum comentário:

Postar um comentário