PRÁTICA EM ASSEMBLY 8051
MELOKIT - Gerando melodias com AT89C2051
Aplicações:
- Caixinha de Música Eletrônica
- Campainha Musical
- Propaganda
   (exemplo: caminhão de gás)
- Brinquedos
         Dentre os circuitos eletrônicos que mais fascinam, além daqueles que geram efeitos visuais, sem dúvida são os de efeitos sonoros. Este apresentado aqui é capaz de tocar várias melodias diferentes que só dependem da gravação dos códigos certos em posições predeterminadas da memória de programa (FLASH) do microcontrolador AT89C2051 ou AT89C4051. Eventualmente, se quiserem, podem usar o AT89S52 ou qualquer outro da família MCS-51
         Montei o circuito na placa de testes, mas abaixo, um exemplo de placa exclusiva para este KIT. Para este programa não é necessário colocar a memória EEPROM indicada no esquema e com lugar reservado na placa, mas  futuramente pretendo integrar um teclado, como o deste site, com 36 teclas para tocar a melodia enquanto a mesma vai sendo gravada nesta memória.
O programa é bastante flexível em relação ao endereço inicial de cada melodia. Ela pode se iniciar nos endereços determinados por R3 e R2, destacados em amarelo.
O destaque em azul é para alterar o tempo de duração mínima de cada nota. Se o tempo é de 50mS e vc precisa que fique tocando por 3 segundos, não precisa alterar aqui... basta colocar na tabela da melodia o número de vezes que a nota deve tocar continuamente.
Ex:  db   60,22,10,00,05,10...
Tocará 3 seg. da nota F#6 (60x50mS)
Ficará 500mS em silêncio. (10x50mS)
Tocará 250mS da nota F#5 (5x50mS)
Veja todos os códigos das notas, de 00=mudo a 39=G#7 na tabela de notas, com as frequências já calculadas para um cristal de 12MHz. Outros cristais requerem um novo cálculo dos valores de recarga do timer e dos tempos.
Aqui é a parte do programa responsável pelo controle da melodia que está sendo executada. A linha alaranjada pode ser retirada, pois só serve para mostrar nos LEDs da placa de teste, em binário, o código da nota que está sendo executada.
A linha verde verifica se é para ficar em silêncio (nota muda) e salta para a respectiva rotina ou para a execução de uma nota sonora (playnota).
Enquanto o TIMER1 junto com R1 conta o tempo e número de vezes da nota, o TIMER0 é o reponsável pelo oscilador, implementado na rotina de interrupção. Uma única instrução de saída é a reponsável pela geração do som: cpl out
Na próxima página, a tabela de notas e os códigos para as melodias  apresentadas no vídeo no início desta página. Também dicas para a etapa de saída e o link para download do programa em HEX ou BIN para gravar no microcontrolador.