#include <mega2560.h> #include <delay.h>#include <alcd.h> unsigned int tempo_do_pulso, borda_de_subida;// Timer1 input capture interrupt service routineinterrupt [TIM1_CAPT] void timer1_capt_isr(void){// Place your code here }void main(void){// Declare your local variables here// Crystal Oscillator division factor: 1#pragma optsize-CLKPR=(1<<CLKPCE);#ifdef _OPTIMIZE_SIZE_#pragma optsize+#endif//saida para o pulso de 10 microsegundosDDRB=(1<<DDB5);PORTB=(0<<PORTB5);//entrada do ICP1...pull up ativadoDDRD=(0<<DDD4); PORTD=(1<<PORTD4);//não calculei o prescaler para que o timer faça overflow.. sera que precisa?// Port E in// Timer/Counter 1 initialization// Clock source: System Clock// Clock value: 2000,000 kHz// Mode: Normal top=0xFFFF// Noise Canceler: Off// Input Capture on Rising Edge// Timer Period: 32,768 ms// Input Capture Interrupt: OnTCCR1B=(1<<ICES1) | (1<<CS11);TIMSK1=(1<<ICIE1);lcd_init(16);#asm("sei")while (1) { if (PORTD.4==1) { borda_de_subida = ICR1H; } else { tempo_do_pulso = ((borda_de_subida/2)*29.1); } lcd_gotoxy(0,1); lcd_puts("Dist.: "); lcd_gotoxy(7,1); lcd_putchar(tempo_do_pulso+0x30); }}
fiz este codigo no codevision e simulei no proteus mas nao funcionou ... o que esta errado alguem pode me ajudar?
quero capturar o tempo de borda de subida..
e o que significa => High e o Low
ICR1H=0x00;
ICR1L=0x00;
e porque tem alguns uC que usam somente ICR1?