Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
MonoRec
1 / 1 / 2
Регистрация: 24.11.2013
Сообщений: 84
1

Обработка запросов прерываний

22.05.2015, 13:25. Просмотров 797. Ответов 12
Метки нет (Все метки)

Добрый день! необходима помощь.


1)Светодиоды загораются, слева направо.
2)После нажатия кнопки SW1 формируется запрос на прерывание INT1, в результате
обработки которого процесс останавливается на включенном диоде.
3)После нажатия кнопки SW3 формируется запрос на прерывание INT0, в результате обработки которого
процесс переключения светодиодов возобновляется с места остановки.

C++ (Qt)
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
35
36
37
38
39
ISR (INT0_vect)
{
\\\\\
}
ISR (INT1_vect)
{
\\\\\
}
int main(void)
{
    DDRB= 0xFF;
    PORTB = 0xFF;
    DDRD = 0x00;
    PORTD = 0xFF;
    d=1;
    while (1)
    {
        if (d == 1)
        r=0b10000000; // Присваивание r начального значения
        while (r != 0)
        {
            PORTB = r^0xFF; // Вывод значения r в порт В
            _delay_ms(1000);
            if (d == 1 )
            {
                r>>=1;
            }
 
    if(!(PIND & (1 << 4)))
                {
                         ////////////
                }
       if(!(PIND & (1 << 0)))
                {
                ////////////    
                }
        }
}
}
С 1 пунктам разобрался. Помогите разобраться с 2 и 3.

Добавлено через 7 минут
Подправил.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ISR (INT0_vect)
{
    if(!(PIND & (1 << 4)))
                {
                         ////////////
                }
}
ISR (INT1_vect)
{
       if(!(PIND & (1 << 0)))
                {
                ////////////    
                }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2015, 13:25
Ответы с готовыми решениями:

ATMega16. Обработка прерываний
Добрый день. Не могли бы Вы помочь разобраться со следующей задачей: Модифицировать приведенную...

Обработка запросов прерываний
Помогите написать программу для Atmega48 После запуска программы включен светодиод LED5. При...

Обработка прерываний
Доброго времени суток. Пытаюсь выполнить пример программы с использованием прерывания, взятый из...

Обработка программных прерываний...
Всем привет! выполняем лабораторные работы на MASMe, преподаватель дал задание, уже второй день не...

Обработка аппаратных прерываний
Доброго вечера. Уважаемые форумчане, кто нибудь сталкивался с таким? Необходимо написать...

12
pyzhman
1149 / 508 / 73
Регистрация: 15.05.2012
Сообщений: 2,895
22.05.2015, 14:37 2
STK500?
0
MonoRec
1 / 1 / 2
Регистрация: 24.11.2013
Сообщений: 84
22.05.2015, 14:54  [ТС] 3
Да Stk500
0
pyzhman
1149 / 508 / 73
Регистрация: 15.05.2012
Сообщений: 2,895
22.05.2015, 16:12 4
SW1 и SW3 куда подключены?
0
22.05.2015, 16:12
MonoRec
1 / 1 / 2
Регистрация: 24.11.2013
Сообщений: 84
22.05.2015, 16:26  [ТС] 5
К порту D
SW1 = PD0
SW3 = PD2
0
pyzhman
1149 / 508 / 73
Регистрация: 15.05.2012
Сообщений: 2,895
22.05.2015, 16:59 6
А альтернативные функции портов PD0 и PD2 какие?
0
MonoRec
1 / 1 / 2
Регистрация: 24.11.2013
Сообщений: 84
22.05.2015, 17:03  [ТС] 7
Альтернативные функции? То есть?
PD0\PXD\PCINT16
PD2\INT0\PCINT17
0
pyzhman
1149 / 508 / 73
Регистрация: 15.05.2012
Сообщений: 2,895
22.05.2015, 17:10 8
А надо INT0 и INT1.

Добавлено через 1 минуту
Чтобы было так:
Цитата Сообщение от MonoRec Посмотреть сообщение
нажатия кнопки SW1 формируется запрос на прерывание INT1
Цитата Сообщение от MonoRec Посмотреть сообщение
нажатия кнопки SW3 формируется запрос на прерывание INT0
0
MonoRec
1 / 1 / 2
Регистрация: 24.11.2013
Сообщений: 84
22.05.2015, 17:18  [ТС] 9
То есть подключить SW1 к INT0, SW3 к INT1.

Добавлено через 2 минуты
а как сделать остановку (INT1) и возобновление (INT0) огонька?
0
pyzhman
1149 / 508 / 73
Регистрация: 15.05.2012
Сообщений: 2,895
22.05.2015, 17:28 10
Цитата Сообщение от MonoRec Посмотреть сообщение
подключить SW1 к INT0, SW3 к INT1
Перечитайте еще раз свое задание и мои цитаты из вашего задания.

Добавлено через 1 минуту
Остановку сделать просто - не двигаться. Возобновление - двигаться.
0
MonoRec
1 / 1 / 2
Регистрация: 24.11.2013
Сообщений: 84
22.05.2015, 17:58  [ТС] 11
Цитата Сообщение от pyzhman Посмотреть сообщение
Сообщение от MonoRec
подключить SW1 к INT0, SW3 к INT1
Перечитайте еще раз свое задание и мои цитаты из вашего задания.
Добавлено через 1 минуту
Остановку сделать просто - не двигаться. Возобновление - двигаться.
SW1 к INT1, SW3 к INT0
Не двигаются, то есть можно вести пустой цикл с проверкой на нажатие кнопки. Так можно делать?
C++ (Qt)
1
2
3
4
ISR (INT1_vect)
{
    while ((PIND & (1 << 2)))   {}
}
А как быть с возобновлением? Оставить функцию пустой?
C++ (Qt)
1
2
3
ISR (INT0_vect)
{
}
0
pyzhman
1149 / 508 / 73
Регистрация: 15.05.2012
Сообщений: 2,895
22.05.2015, 18:19 12
C
1
while ((PIND & (1 << 2))) * {}
Это в реальном железе, коим является стенд, будет сбоить, поскольку есть такая бяка как дребезг контактов.
Пустая функция ничего не даст.
Как останавливается движение на дороге? Зажигается красный цвет светофора. А возобновляется? Правильно, зажигается зеленый. В нашем случае, программистском - тухнет красный.
0
MonoRec
1 / 1 / 2
Регистрация: 24.11.2013
Сообщений: 84
22.05.2015, 18:39  [ТС] 13
Цитата Сообщение от pyzhman Посмотреть сообщение
Код C
1
while ((PIND & (1 << 2))) * {}
Это в реальном железе, коим является стенд, будет сбоить, поскольку есть такая бяка как дребезг контактов.
Пустая функция ничего не даст.
Как останавливается движение на дороге? Зажигается красный цвет светофора. А возобновляется? Правильно, зажигается зеленый. В нашем случае, программистском - тухнет красный.
А если так?
C++ (Qt)
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
35
36
37
38
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
volatile unsigned char d;
unsigned char r;
ISR (INT0_vect)
{
    d=1;
}
ISR (INT1_vect)
{
    d=0;
}
int main(void)
{
    DDRB= 0xFF;
    PORTB = 0xFF;
    DDRD = 0x00;
    PORTD = 0xFF;
    d=1;
    EIMSK  =  (1<<INT0)  | (1<<INT1);
    EICRA  =  (1<<ISC11) | (0<<ISC10) | (1<<ISC01) | (0<<ISC00);
    sei();
    while (1)
    {
        if (d == 1)
        r=0b10000000;
        while (r != 0)
        {
            PORTB = r^0xFF; 
            _delay_ms(100);
            if (d == 1 )
            {
                r>>=1;
            }   
        }
    }
}
0
22.05.2015, 18:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2015, 18:39

Обработка прерываний мыши
Добрый день. Задан курсовик-игра с щёлканьем мыши по появляющимся в рандомном месте квадратам....

Обработка прерываний таймера
Пытаюсь написать программу, которая перехватывает прерывание таймера и выдает звуковой сигнал...

Обработка стандартных прерываний
Прерывание должно выгружаться из памяти (восстановление стандартного вектора прерываний и...


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

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

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