Descrição
O
objectivo desta montagem é permitir que, com recurso a
4 comutadores, se possa seleccionar um de 4 estados possíveis
para um conjunto de 8 LEDs, ligados no porto P1.
Seleccionável com o 1º comutador, ligado ao pino P2.0,
os 8 LEDs ligados ao porto 1, deverão acender e apagar
em simultâneo.
O 2º comutador, ligado ao pino P2.1, deve acender um dos
8 LEDs ligados a P1, e ir sucessivamente acendendo o que se LED
que se encontra á sua direita, apagando o anterior, de
tal forma que quando o 8º LED, após apagado, seja
acendido o 1º. Isto dará a ideia de rotação para a direita, do
LED aceso.
Com o 3º comutador, ligado em P2.2, o procedimento deverá ser
identico, mas a rotação do LED aceso deverá ser feita para a esquerda.
Com o 4º comutador activo, ligado em P2.3, deverão estar em cada
momento 2 LEDs acesos, começando do exterior, isto é, 1º e 8º
LEDs, e progredindo para o centro, na seguinte sequência: 1-8,
2-7, 3-6 e 4-5, após o que fará o inverso, 3-6, 2-7, 1-8, e assim
sucessivamente. A ideia que dá é que os LEDs se dirigem um para
o outro, colidem e afastam-se, sendo novamente repetido o processo.
Para que seja possível visualizar as comutações, aceso - apagado,
dos LEDs, é necessário que os mesmos permaneçam num dado estado
por algum tempo, pois caso contrário, a nossa vista não consegue
distinguir as comutações de estado, isto é, um LED deverá permanecer
por algumas dezenas de milissegundos no estado aceso e o mesmo
quando está apagado, para que se perceba que está a piscar, pois
caso contrário, com a velocidade de execução das instruções do
microcontrolador, o LED pareceria estar permanentemente aceso.
Este delay necessário, foi efectuado de forma simples, sem recurso
a temporizadores (timers), recorrendo-se apenas a 2 ciclos encadeados
onde os registos R7 e R6, vão sendo decrementados da seguinte
forma: Por cada decremento de R7, R6, iniciado com o valor 255,
será sucessivamente decrementado até atingir 0, após o que R7
será novamente decrementado de 1, e R6 novamente 266 vezes, e
assim sucessivamente até que R7 atinja o valor 0. Durante todo
este tempo, o, ou os LEDs estarão permantemente acesos, ou apagados,
alterando o seu estado no ciclo seguinte.
A intrução "DJNZ Rn,rel" demora 4 ciclos de clock a ser executada
por um DS89C420. Se o cristal usado tiver uma frequência de 11.0952MHz,
temos T=0.09us, o que significa que a instrução demorará 0.36us
a ser executada. Como temos 256*256=65536 intruções DJNZ para
executar, o tempo consumido pela rotina de delay será de 23.6ms.
Um 8051 consome tipicamente 24 ciclos de relógio para executar
a intrução DJNZ, ou seja, demora 2.17us a executá-la. Então o
tempo consumido pela rotina será de 2.17us * 65536 intruções =
142.2ms. Percebe-se melhor neste caso o piscar dos LEDs.
_