Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Redfern89
0 / 0 / 0
Регистрация: 05.11.2018
Сообщений: 14
1

Условия в прерываниях ATmega328

12.01.2019, 16:34. Просмотров 124. Ответов 5

Доброго времени суток! Очень странно работают условия во внешнем прерывании. Вот код:

C
1
2
3
4
5
6
7
8
ISR (INT0_vect) {
    static unsigned char INT0_CNT = 0;
    
    if (INT0_CNT == 34) INT0_CNT = 0;
    
    INT0_CNT++;
    USORT_Transmit(INT0_CNT);
}
вот в чем прикол, как только пришло первый раз 34 прерывания - в терминале все нормально, т.е.:

Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
второй раз пришло 34 прерывания:

Код
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 1 2 3 4
а если убрать условие if (INT0_CNT == 34) INT0_CNT = 0;, то все нормально считает от 0 до
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2019, 16:34
Ответы с готовыми решениями:

Запутался в прерываниях
В общем стоит такая задача: Через мультиплексор на вход контроллера последовательно подаются 4...

USART на прерываниях
Добрый день. Я делаю терморегулятор на 18В20 и АтТини2313. Терморегулятор принимает через усарт...

Антидребезг в прерываниях ATmega8
Здравствуйте. Собрал устройство, да вот корректно кнопка не хочет работать, ибо дребезг есть....

TWI конечный автомат на прерываниях
Здравствуйте уважаемые форумчане! Написал программу для мк мега16 обмена данными с модулем по шине...

Принцип работы с периферией на прерываниях.
Здравствуйте. Attiny85, Atmel Studyo 6, язык C, Пинборд 2. Мучаюсь с велосипедом. Переключаемый...

5
pyzhman
785 / 480 / 65
Регистрация: 15.05.2012
Сообщений: 2,718
13.01.2019, 08:13 2
Цитата Сообщение от Redfern89 Посмотреть сообщение
до ∞
Должно до 255-ти.
C
1
USORT_Transmit
Проверена?

Опять же, источник внешнего прерывания - что?
0
Kukuxumushu
1285 / 569 / 105
Регистрация: 13.06.2015
Сообщений: 1,949
Завершенные тесты: 2
15.01.2019, 18:50 3
Цитата Сообщение от Redfern89 Посмотреть сообщение
static unsigned char INT0_CNT = 0;
Ну вот зачем так делать? Какие-то религиозные предрассудки мешают использовать глобальную переменную?
0
ValeryS
Модератор
7401 / 5599 / 710
Регистрация: 14.02.2011
Сообщений: 19,047
Завершенные тесты: 1
15.01.2019, 19:00 4
Цитата Сообщение от Kukuxumushu Посмотреть сообщение
Какие-то религиозные предрассудки мешают использовать глобальную переменную?
как раз использование глобальных и есть глупость
если переменная используется только в одной функции то используют static, по всем свойствам она такая же как и глобальная, но испортить её из вне не получится. Область видимости не давст
0
Kukuxumushu
1285 / 569 / 105
Регистрация: 13.06.2015
Сообщений: 1,949
Завершенные тесты: 2
15.01.2019, 19:16 5
ValeryS, угу, она ещё там у него при каждом прерывании по идее в ноль инициализируется.
0
ValeryS
Модератор
7401 / 5599 / 710
Регистрация: 14.02.2011
Сообщений: 19,047
Завершенные тесты: 1
15.01.2019, 19:32 6
Цитата Сообщение от Kukuxumushu Посмотреть сообщение
она ещё там у него при каждом прерывании по идее в ноль инициализируется.
С какого перепугу?
почитай про модификацию static
0
15.01.2019, 19:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2019, 19:32

обработка инкрементального энкодера на прерываниях (asm)
Приветствую сообщество. Пытаюсь нарулить на ассемблере код обработки энкодера, оно вроде...

Atmega328-PU прошить
Собрал намедни ардуино совместимую плату с Atmego328-PU. При прошивке его "параллельным"...

ATmega328 и proteus
Привет, только начал осваивать proteus, сделал схему ATmega328 + LED. void loop() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru