Pessoal, eu fiz esse programa para medir a largura de um pulso e reproduzir este valor numa saída, porem são tantos detalhes nos timers que eu estou meio perdido, eu testei o programa assim e ele não está funcionando, alguem pode me ajudar?!
#include "D:\Experiência_PIC\experiencia_pic.h"
#ZERO_RAM
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Definição e inicialização das variáveis *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
long int tempo_high=20;
short int identifica_pulso=0;
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Definição e inicialização dos port's *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#use fast_io(a)
#use fast_io(b)
#byte porta = 0x05
#byte portb = 0x06
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* ENTRADAS *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// As entradas devem ser associadas a nomes para facilitar a programação e
//futuras alterações do hardware.
#bit entrada = portb.0 // Entrada do pulso que eu quero analisar
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* SAÍDAS *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// As saídas devem ser associadas a nomes para facilitar a programação e
//futuras alterações do hardware.
#bit led_green = portb.1 //acende o led verde
#bit led_red = portb.2 //acende o led vermelho
#int_TIMER1
TIMER1_isr()
{
led_red=0;
}
#int_EXT
EXT_isr()
{
if(identifica_pulso)
{
tempo_high = (get_timer0 ()+1) * 256;
ext_int_edge(0, L_TO_H);
identifica_pulso=0;
return;
}
set_timer0 (0);
ext_int_edge(0, H_TO_L);
identifica_pulso=1;
}
void main()
{
setup_vref(FALSE);
setup_comparator(NC_NC_NC_NC);
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
setup_timer_2(T2_DIV_BY_16,255,1);
enable_interrupts(INT_EXT | INT_TIMER1);
ext_int_edge(0, L_TO_H);
enable_interrupts(global);
set_tris_a(0b11111111); // configuração da direção dos pinos de I/O
set_tris_b(0b11111001);
porta=0x00; // limpa porta
portb=0x00; // limpa portb
led_red=0;
led_green=0;
while(true)
{
led_red=1;
set_timer1 (65536-tempo_high-1);
delay_us(20);
}
}