Projeto 469 Ajustador de Volume Digital 5

24/07/2014 11:09

 

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