Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> (Winavr) несколько прерываний не хотят дружить, 2 прерывания не работают корректно  
:(
    Опции темы
Семен78
Дата 10.8.2009, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 31.3.2008
Где: Kazan

Репутация: нет
Всего: нет



делаю прогу под (tiny2313) в winavr  
  для контроля зависания компа  -  комп переодически шлет импульс  и  если очередной не пришол вовремя то контроллер делает сброс 
   
    для наколенной проверки  вешаю на ногу диод и на другую кнопку  -   диод мигает а  тыкание кнопки частое должно прерывать мигание диода пока щелкается кнопка -  но получается лишь продлить период мигания диода
 
Код

int c=0;

ISR(INT0_vect){c=1;}   //  прерывание от кнопки 

ISR(TIMER1_OVF_vect)
{TCNT1=65500;if (c==1){c=0;} else {PORTB^=1<<3;}}  // прерывание по таймеру  -  лампа гаснет или загорается 
  

int main(void)
{
TIMSK=0x80;  // Timer 1 Overflow Interrupt: On

TCNT1=65500; // значение счетного регистра  -  чтоб до переполнения было около 1 сек.

DDRB|=_BV(3);// Вывод порта настраеваем как выход (диод) 

PORTD&=~_BV(PD2);// вешаем 0  на вход кнопки
 
GIMSK=0b01000000; //разрешаем прерывание int0 -  кнопка
MCUCR=0x03; // int by rising front -  для кнопки 

sei(); //   общее разрешение прерывания  (sreg 0100000....)

while (1);
 }





  т.е.   прерывание по кнопке срабатывает лишь 1 раз  сколько бы не нажимать   -   после очередной сработки по таймеру опять только раз   -  а надо чтоб постоянно  -  в чем причина не пойму
PM MAIL   Вверх
Mazzi
Дата 11.8.2009, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



Исправь прерывание от таймера вот так
Код

ISR(TIMER1_OVF_vect)
{TCNT1=65500;if (c==1){c=0; PORTB = LAMP_OFF; } else {PORTB^=1<<3;}}  // прерывание по таймеру  -  лампа гаснет или загорается 

и будет тебе счастье.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
Семен78
Дата 11.8.2009, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 31.3.2008
Где: Kazan

Репутация: нет
Всего: нет



попробовал 
   не получилось счастья smile

Добавлено через 1 минуту и 32 секунды
попробовал без переменной - просто в прерывании кнопки менять показания счетного регистра - тоже не помогло

Код


ISR(INT0_vect){TCNT1=65500;} 
ISR(TIMER1_OVF_vect){TCNT1=65500; PORTB^=1<<3;}    

int main(void){ 
CLKPR=0x80;CLKPR=0x08;//Cryst Oscil division:256 
// Timer/Counter 1 initialization 
TCCR1A=0x00;// Mode: Normal top=FFFFh 
TCCR1B=5;// Clock value: /1024 
TIMSK=0x80;// Timer 1 Overflow Interrupt: On 
TCNT1=65500; 

DDRB|=_BV(3);// Вывод порта настраеваем как выход (диод) 
PORTD&=~_BV(PD2);// вешаем 0   -  на кнопку с + 
  
GIMSK=0b01000000; //разрешаем прерывание int1 
MCUCR=0x03; // int by rising front 
sei(); 
while (1); 
}

PM MAIL   Вверх
Семен78
Дата 12.8.2009, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 31.3.2008
Где: Kazan

Репутация: нет
Всего: нет



не было подтяга к  земле   -  вот причина
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.1022 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.