Меню сайта
Администрация
579-010-666
Или воспользуйтесь формой обратной связи.
Разделы
Автолюбителям [13]
Таймер NE555 [11]
Конструктор схем [11]
Измерительная аппаратура [5]
Осциллографы [2]
На микрухах [10]
Роботы [0]
Световые эффекты [1]
Термостат [0]
Обучение PIC с нуля [17]
Чат
500
Наш опрос
Оцените мой сайт

Результат опроса Результаты Все опросы нашего сайта Архив опросов

Всего голосовало: 148
Статистика



Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » Статьи » Обучение PIC с нуля

5. Использование прерываний

Бывает так, что нужно прервать выполнение программы на некоторое время (например по переполнению таймера, по нажатию кнопки и т.д.). Ниже приведена картинка, позволяющая очень хорошо ориентироваться в прерываниях:

• GIE — бит включения прерываний
• PEIE — бит включения прерываний от периферии
• T0IE — прерывание по переполнению TMR0
• INTE — прерывание по изменению состояния пина В0
• RBIE — прерывание по изменению состояния пинов потра В0
• T0IF — флаг переполнения таймера TMR0
• INTF — флаг изменения состояния В0
• RBIF - флаг изменения хотя бы одного из пинов порта В

Периферию описывать не буду, все понятно из картинки.

Есть такое правило: Каждая переменная, которая используется в main() и в процедуре прерываний должна быть объявлена как «volatile»

Дело в том, что компилятор создает временную копию в регистре, во время прерывания переменная меняет свое значение в ОЗУ, но в регистре остается старое значение. Объявив переменную volatile, все будет происходить как задумано.

В этом примере я это использовать не буду, а просто выдам на порт В5 импульсы с частотой 500 Гц, используя прерывания переполнения таймера TMR0.

#include
#define _XTAL_FREQ 4000000
#define tmr0presc 0x02
#define period 125
__CONFIG(WDTDIS & UNPROTECT & MCLREN & LVPDIS & HS);

void main() {
__delay_us(500);
TRISB = 0b00001111;
PORTB = 0;
OPTION &= 0b11000000;
OPTION |= tmr0presc;
T0IE = 1;
GIE = 1;
TMR0 = 255 - period + 1;
for (;;) {

}

}

interrupt isr() {

if (T0IF) {
TMR0 = 255 - period + 1;
RB5 = !RB5;
T0IF = 0;
}

}

Осциллограма с мк, одно деление — 0.5 мс.



Источник: http://diymicro.ru/?p=65
Категория: Обучение PIC с нуля | Добавил: 4ydocactus (30.05.2012)
Просмотров: 735 | Теги: pic16f628a, interrupts, прерывания, PIC микроконтроллеры | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Профиль
Суббота
18.05.2024
10:55

Новости сайта
Добавленно новых материалов:
****************************************
1.06.2012
Просьба...
Уважаемые пользователи!
Выделите пожалуйста 1 минуту вашего времени и кликните пару ссылок от рекламы на Google. Тем самым вы потдержите проект.
Спасибо!
Реклама