Mini curso sobre AT89C2051 e AT89C4051 , 8051 - Parte 3 - I/O's

   Nesta parte será mostrado um exemplo com IO's, onde oito delas são usadas como saídas e duas como entradas.
   Ao contrário do AVR, no 8051 as portas não tem registros de direção de dados, a leitura, escrita e configuração do pino é feito lendo ou gravando os registros P1 e P3, únicas disponíveis nos AT89c2051 e AT89c4051, ou então por meio de instruções específicas para manipulação de bits nos registros, como CLR, CPL, SETB.
  Além disso, a leitura pode ser feita de dois modos diferentes, um deles sendo a leitura do pino em si, e a outra a leitura do latch ao qual está ligado o pino, por exemplo, na instrução CPL, um bit de um registro é complementado, neste caso, a leitura é feita pelo latch, não pelo pino.
  Como existem vários modos de leitura e gravação das portas, além do pullup interno e a curva IV da porta diferente do CMOS na porta P1,  recomendo o estudo do datasheet e do Atmel C51 Hardware Manual.
  No primeiro programa, são usados 8 LED's na porta P1, e duas chaves em P3.2 e P3.3, conforme o esquema abaixo (clique para aumentar).

    O programa é mostrado a seguir, e será explicado por partes, a primeira parte é mostrada a seguir:

       Além da declaração e inicialização de variáveis, no loop uma variável contagem de 8 bits é incrementada a cada passagem pelo loop, onde as chaves 1 e 2 são lidas, a primeira altera o modo da sequencia, onde é obrigatório soltar a chave para o prosseguimento do programa.
      A segunda chave altera o tempo de espera, feito por meio de um delay, onde a cada vez que a chave é pressionada, o tempo aumenta em 25ms, alterando assim a velocidade da sequencia.

     Depois deste atraso, para cada tipo de modo, os LED's acendem conforme uma sequência já pré determinada.
     O primeiro modo envia para a porta os valores 0x00, significando LED's todos acesos e 0xFF, todos apagados, o segundo é bastante similar, apenas alterando os valores.
     Para avaliar a hora de acender ou apagar os LED's, um if avalia o bit menos significativo da variável contagem, onde será aceso para números ímpares.
    O terceiro modo é apenas enviar o valor da variável contagem para a porta, note que é necessário o complemento (operador ~), tendo em vista que os LED's estão ligados em nível lógico baixo.
    Os outros dois modos fazem com que um único LED se desloque da esquerda para a direita ou vice-versa, para isto, os três bits menos significativos da variável contagem são avaliados, de tal forma que, o número de deslocamentos de uma máscara (0x80 ou 0x01) é feito pelo for.
    Relembrando, que os operadores lógicos do C fazem estes deslocamentos.
 

  As linhas anteriores representam a função de delay, o valor no interior do for é colocado de acordo com o arquivo lst, que contém as instruções vindas da compilação, como sempre, é recomendável o conhecimento das instruções do 8051.
  Faça o download do programa em:

 http://www.megaupload.com/?d=R9DDGFLB

  Foto da montagem na protoboard:


 

  Um abraço a todos!
  Comentem!

0 comentários:

Postar um comentário