Não sou programador de PIC. Mas eu jogaria fora esta sua rotina.
Vamos repensar um pouco.
Se entendi sua rotina. Ele verifica o sinal alto em C6.
Quando ele chamar a rotina de atraso, se ocorrer mudancas em C6, seu programa só vai voltar a interrogar o pino após sua rotina de delay. Ou seja se voce colocar 6 segundos de atraso, somente após terminar a rotina de atraso que o pic vai voltar a ler c6 !
Crie uma variavel contador:
- Código: Selecionar todos
Contador=0;
crie outra variavel:
- Código: Selecionar todos
pegatroxa=0;
leia o pino C6. Quando ele cair para zero, ver se a variavel pegatroxa ja foi setada. Caso contrario, sete a variavel pegatroxa
- Código: Selecionar todos
pegatroxa=1;
e incremente o contador.
- Código: Selecionar todos
contador++;
Pq a variavel pegatroxa ? Pq quando ele detectar a mudanca do pino, vai incrementar contador. Com a pegatroxa nao. Ele só vai incrementar contador quando o sinal de C6 for baixo e a variavel pegatroxa =0.
Quando o sinal em C6 voltar a alto, zere pegatroxa.
- Código: Selecionar todos
if (pin_c6)
{pegatroxa=0}
else
{
if (pegatroxa=0)
{ pegatroxa=1;
contador++
}
if (contador=80)
{ contador=0;
manda_pulso(pin_a0);
}
}
A variavel pegatroxa impede que o contador seja incrementado varias vezes enquanto o sinal estiver baixo.
a funcao manda_pulso() é sua funcao que vai enviar o pulso que voce quer.
Tenta isso. Qualquer coisa me procura no MSN.
O problema é só logica.
Voce tem que se preucupar com o sinal de pin_c6 durante a duração da rotina manda_pulso.