Суть в чем, внешнее прерывание по спаду запускает таймер потом настраиваю прерывание по фронту, при срабатывании прерывания по фронту считываю значение счетного регистра таймера но что то делаю не правильно в протеусе смотрю вот код обработчика,почему не работает
// Place your code here if (flag==front)//если прерывание по фроту { T=TCNT1-3;//считать значение периода обращения if(uoz>T) {TCNT1=0;//обнулить таймер OCR1A=uoz-T; OCR1B=OCR1A+n; } send=1;//флаг отправки периода if(uoz<T) { TCCR1B=stop;//остаовить таймер TCNT1=0;//обнулить таймер spark=0;//сброс искры } flag=spad; MCUCR=MCUCR-1;//этот код работает ниже которйы закомментирован нет //MCUCR&=0b11111100; //MCUCR|=0b00000010;//прерывание INT0 по спаду red_led=0; //красный светодиод погасить индикация того что ВМТ } else //если прерывание по спаду { TCCR1B=start;//запустить таймер flag=front; MCUCR=MCUCR+1;//этот код работает ниже которйы закомментирован нет //MCUCR&=0b11111100; //MCUCR|=0b00000011;//прерывание INT0 по фронту OCR1A=uoz; OCR1B=uoz+n; red_led=1; //красный светодиод зажечь индикация того что до ВМТ осталось 30 градусов }
Всем мяу! подскажите,работаю с оператором switch(решил попробовать,удобная штука),написал простую программу,но светодиоды отказываются моргать...В чем может быть дело? Спойлер
*Trigger* писал(а):А Вы останавливаете таймер перед считыванием? Вообще-то, можно использовать для таких целей Input Capture.
нет таймер не останавливаю дело не в том в протеусе все работает нормальо это по таймеру а вот перенастройка прерывания не хочет выполятся так как хотелось бы я про
MCUCR&=0b11111100;//устанавливает в ноль 0,1 разряды остальные не изменяются MCUCR|=0b00000011;//устаавливает в 1 разряды 0,1 остальные не меняет
или я не прав ошибка именно в этом я увере на 100% подскажите еще один момен имнется строка char str1[7] перемеая чтоб ее сделать пустой подойдет такой метод
dimka86, повторяю для невнимательных - выложи полный код, потом можно будет обсуждать его. Я не про обработку прерывания, а про разрешение самого прерывания. Флаг прерывания может и устанавливается, но прерывание не происходит вот я о чем.
// External Interrupt(s) initialization // INT0: On // INT0 Mode: Falling Edge // INT1: On // INT1 Mode: Rising Edge GICR|=0xC0; MCUCR=0x0E; GIFR=0xC0; а так я меняю настройку MCUCR&=0b11111110;//по спаду а так MCUCR|=0b00000001;//прерывание INT0 по фронту
просто устанавливаю или сбрасываю нолевой разряд MCUCR если вам нужна моя бредятена не доведенная до ума напишите в личку, я както выложил длинный листинг получил предупреждение
Подскажите как можно реализовать функцию: не могу придумать как произвести арифметические действия с массивом такого типа: 1234.5678 обработать нужно так: 12+(34.5678/60) подталкните в какую сторону капать?