Nobre e estimado amigo Ze.
Sim, eu já sabia como ligar e desligar um led. O fator complicador é quando se tem que piscar e efetuar o desligamento por um botão. Exatamente o meu caso com o PWM.
Muitos conhecedores de código C pelo que pesquisei pela internet, tem diferentes 'aproaches' para essa tarefa de desligar o pisca pisca. Uns com mais eficiencia, outros com menos e vi alguns códigos que simplesmente não funcionam.
Então percebendo que o meu problema se restringia a arquitetura do PIC, talvez mais do que a linguagem C em si, resolvi passar a tarde inteira estudando um assunto fascinante: 'INTERRUPTS' do pic que os compiladores utilizam na sua própria linguagem.
Foi então depois de ler sobre o assunto, que é profundo por sinal, com várias designações, que consegui finalmente resolver o meu problema ao escrever uma instrução que se mostrou bem sucedida.
Abaixo está o código que redigi. Nunca imaginei que esse mundo dos programadores fosse tão intrincado, complexo, polêmico e durante algum tempo, simplesmente inatingível para mortais que estão ávidos por conhece-lo como eu. Estou começando a ficar viciado nisso e já durmo e acordo pensando em C. Parece uma cachaça.
Consegui. Meu Deus, que trabalho. Mas consegui.
- Código: Selecionar todos
BYTE signal = 0;
//#use fast_io(c)
#include <lcd.c>
#int_rb
void button_isr()
{
delay_ms (20); //debounce
if( !input(PIN_B7) && !signal )
signal = 1;
else
if( !input(PIN_B7) && signal )
signal = 0;
}if ( (SW4 && !ISPRESSED_KEY4) )
{
ISPRESSED_KEY4=TRUE;
INT16 time1;
INT16 time2;
INT16 time3;
time1=748;
time2=430;
time3=292;
if(cont==1)
do
{
if(signal)
{
setup_timer_2(T2_DIV_BY_4,249,1);
set_pwm1_duty(time1);//enable PWM
setup_ccp1(CCP_PWM); //enable PWM
delay_ms(100);
output_high(pin_c2);
delay_ms(10);
setup_ccp1(CCP_OFF);//disable PWM
delay_ms(1000);
output_low(pin_c2);
delay_ms(10);
}
}
while (TRUE);
}