Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
24.09.2007, 13:42
|
|
Временная регистрация
Регистрация: 04.05.2007
Сообщений: 54
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
прерывания в WinAVR
Почему в WinAVR не работает такая программка ?
// AT90S2313, компилятор WinAVR
unsigned char mVar = 0;
ISR (TIMER0_OVF0_vect)
{ TCNT0 = 0;
PORTB = mVar++;
}
void main (void)
{ DDRB = 0xFF;
TIMSK = 2;
TCNT0 = 0;
TCCR0 = 5;
sei();
while(1)
{
PORTB = mVar;
}
}
Мне нужно использовать переменную именно в цикле;
|
|
|
|
24.09.2007, 14:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
24.09.2007, 16:42
|
|
Гражданин KAZUS.RU
Регистрация: 29.06.2006
Сообщений: 638
Сказал спасибо: 37
Сказали Спасибо 56 раз(а) в 41 сообщении(ях)
|
попробуйте так
Код:
|
ISR (TIMER0_OVF0_vect)
{
TCCR0 = 5;
PORTB = mVar++;
} |
|
|
|
|
25.09.2007, 06:45
|
|
Временная регистрация
Регистрация: 04.05.2007
Сообщений: 54
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Прошу пардону, в текст письма вкралась очепятка,
правильный текст программы
// AT90S2313, компилятор WinAVR
unsigned char mVar = 0;
ISR (TIMER0_OVF0_vect)
{ TCNT0 = 0;
mVar++;
}
void main (void)
{ DDRB = 0xFF;
TIMSK = 2;
TCNT0 = 0;
TCCR0 = 5;
sei();
while(1)
{ PORTB = mVar;
}
}
Если я помещаю строку PORTB = mVar; в процедуру обработки прерывания, все работает.
Если переношу в цикл while(1), переменная не меняется.
Почему, не понимаю.
|
|
|
|
25.09.2007, 08:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Попробуй ее volatile обозвать - avr123.nm.ru/05a.htm
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
25.09.2007, 09:44
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Сообщение от jsv001
|
Если я помещаю строку PORTB = mVar; в процедуру обработки прерывания, все работает.
Если переношу в цикл while(1), переменная не меняется.
Почему, не понимаю.
|
В таком случае, скорее всего, создается новая локальная переменная с тем же именем, ничего общего не имеющая с той, что объявили вверху. От этого и нужно отталкиваться - или объявить верхнюю с спецификатором extern или создать заголовочный файл и поместить туда описание переменной. volatile тоже можно попробовать
В принципе, то, что Вы написали, в нормальных компиляторах должно работать - это уже особенности конкретного компилятора.
|
|
|
|
25.09.2007, 09:52
|
|
Гражданин KAZUS.RU
Регистрация: 29.06.2006
Сообщений: 638
Сказал спасибо: 37
Сказали Спасибо 56 раз(а) в 41 сообщении(ях)
|
Цитата:
|
Если я помещаю строку PORTB = mVar; в процедуру обработки прерывания, все работает.
Если переношу в цикл while(1), переменная не меняется.
Почему, не понимаю
|
в codevision работает тот код который вы дали изменил только название функции прерывания
|
|
|
|
26.09.2007, 05:16
|
|
Временная регистрация
Регистрация: 04.05.2007
Сообщений: 54
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Волатила помогла, все работает.
Спасибо за совет.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Прерывания в LPC21xx
|
Vitek_S |
Микроконтроллеры, АЦП, память и т.д |
1 |
30.05.2009 22:34 |
Прерывания в AVR
|
uk8amk |
Микроконтроллеры, АЦП, память и т.д |
3 |
17.10.2008 14:25 |
Прерывания AT89C2051
|
awix |
Микроконтроллеры, АЦП, память и т.д |
6 |
21.09.2008 20:57 |
Прерывания на atmega8
|
klim |
Микроконтроллеры, АЦП, память и т.д |
4 |
16.09.2008 11:05 |
Прерывания в ATmega128
|
Святослав |
Микроконтроллеры, АЦП, память и т.д |
2 |
10.02.2006 16:28 |
Часовой пояс GMT +4, время: 17:52.
|
|