Projeto 469 Ajustador de Volume Digital 5
DIGITAL VOLUME CHANGER 5.
Com este Projeto faremos um trocador de volume que pode ser controlado por chaves. Quando você “roda” o programa, pressione S1 e o volume do som se torna mais alto, ou pressione S2 e o volume do som se torna mais baixo, em quatro passos.
Descrições:
Vamos olhar para o fluxograma , que é muito simples. Os primeiros passos interessantes estão nas linhas #03 a #05. Qual é a condição de saída de processamento deste curto “loop”? Com o dado de entrada sofre um AND com 03H em #04, o programa tem interesse apenas no bit 0 e no bit 1. E na próxima linha #05, a condição é determinada pela instrução JZ. Isto é, se você pressionou S1 (0000 0001) ou S2 (0000 0010), o fluxo do programa pode seguir adiante.
Você pode dar atenção as linhas #07 a #09; com este código o programa está esperando que você solte as teclas(s)!
Agora, o fluxo do programa está em #0A, onde verifica o conteúdo do registrador D. Para que serve o registrador D? Os dados iniciais de entrada foram salvos em #06. E se você pressiona ambas S1 e S2, o programa ignora sua ação e retorna para #03.
Em #0C, o processamento que sucede é dividido em dois; se o registrador D for igual a 02, significa que você pressionou S2, se não, você pressionou S1. Continuando, o valor dos dados de saída é deslocado (para tornar o volume mais alto ou mais baixo) e é feita a verificação do limite. Se estiver dentro da contagem do “loop”, o fluxo do programa retorna para #02 e aguarda uma entrada de tecla.
Como resultado, quando você pressiona S1 uma vez, o volume se torna um nível mais alto e fica numa condição de espera. Se você pressiona S1 4 vezes, alcança o nível de volume mais alto. Pressionando mais uma vez S1, o volume retorna para o nível mais baixo. Esta ação se aplica também para S2.
FLUXOGRAMA
Programa
00 MOV B , #01H ; -- MOV em pilha
00 MOV B , #08H ; --
02 OUT B ;
03 IN A ;Obtém entrada
04 AND A , #03H ;
05 JZ L03H ;Aguarda pelo acionamento de S1 ou S2.
06 MOV D , A ;Salva entrada de tecla
07 IN A ;Obtém entrada.
08 AND A , #03H ;
09 JNZ L07H ;Aguarda você soltar S1 ou S2.
0A CMP D , #03H ;
0B JZ L03H ; Ambas S1 e S2 pressionadas, retorna.
0C CMP D , #02H ;
0D JZ L13H ;S2 pressionada; vai para #13.
0E CLC ;S1 Pressionada; limpa “carry flag”.
0F ROL B ;Move volume para cima.
10 CMP B , #10H ;
11 JZ L00H ;Volume máximo; troca dados.
12 JMP L02H ;Ainda dentro do “loop”, continua.
13 CLC ;Limpa “carry flag”.
14 ROR B ;Move volume para baixo.
15 CMP B , #00H ;
16 JZ L01H ;Volume mínimo; troca dados.
17 JMP L02H ;Ainda dentro do “loop”; continua.
Outros projetos sobre o assunto:
Projeto 378 Potenciômetro Eletronico
Projeto 465 Ajustador de Volume Digital 1
Projeto 466 Ajustador de Volume Digital 2