A explicação deste tutorial presume que a chave esteja montada da seguinte forma:
Para isso teríamos, em tese, dentro do looping principal:
//**************************************************************
while (1){
LATD = contador; // coloca na porta D o conteúdo da variável contador
if (PORTBbits.RB0 == 0) { // detecta o pressionamento da chave em B0
contador++; // incrementa o contador de a chave estiver pressionada
}
}
//**************************************************************
Em tese, o programa acima funciona, ou seja, a sua lógica está correta.
Porém, na prática este código se torna ineficiente, pois o nosso microcontrolador executa este código em uma velocidade muito alta, e dessa forma ao pressionar a chave ele passa diversas vezes pelo comando de teste da chave (if), o que provoca o resultado de “corrida” do contador (o contador incrementa mais de uma posição).
Para solucionar é necessário após a detecção de chave pressionada aguardar que ela seja solta.
O truque consiste em abrir um looping para deixar preso o programa até que o botão seja solto.
//**************************************************************
while (1){
LATD = contador; // coloca na porta D o conteúdo da variável contador
if (PORTBbits.RB0 == 0) { // detecta o pressionamento da chave em B0
while (PORTBbits.RB0 == 0);
contador++; // incrementa o contador de a chave estiver pressionada
}
}
//**************************************************************
O comando while (PORTBbits.RB0 == 0); fica preso em um looping enquanto que a chave estiver pressionada. Enquanto a condição for verdadeira (chave pressionada) o comando while não executa nada ( o “;” no final do comando while)
Nenhum comentário:
Postar um comentário