Как правильно прочитать ICR1 в программе обработки прерываний (захват по спаду).
interrupt [TIM1_CAPT] void timer1_capt_isr(void){
#asm("cli")
tc1=ICR1;
ct2=(unsigned char)PING&0b00001111;
dat=(unsigned long)tc1*16;
.......}
В Дашите рекомендуют ( unsigned int i; TCNTn=0x1FF; i=TCNTn
В поле глобдр. перемен. пишу: ICR1=0x1FF;
unsigned int tc1;
interrupt [TIM1_CAPT] void timer1_capt_isr(void){
#asm("cli")
tc1=ICR1;
.............}
CVAVR выдёт: missing"(" ICR1=0x1FF;
Есть ещё варианты ,но незнаю куда и как записывать:
//#define IN_PORT16(PORT) *(int*)&(PORT ## L)
//#define OUT_PORT16(PORT, VALUE) (*(int*)26 = (VALUE), PORT ## H = *(char*)27, PORT ## L = *(char*)26)
//#define OUT_PORT16_CONST(PORT, VALUE) (PORT ## H = (VALUE) ›› 8, PORT ## L = (VALUE))
Далее по ходу программы нужно сбрасывать ICR1,TCNT1 в 0.
Если написать tc1=ICR1L; и TCNT1L=0 то всё работает, но правильно считает до 8000. C ATmega128 вроде и так работает: tc1=ICR1; Адреса TCNT1,ICR1 у mega1281 и mega128 разные.
Помогите пожалуйста! Программа работает (в Протоусе) а данных нет.