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