Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Лабораторная работа 3. Тема: изучение принципов работы прерываний контроллера MSP430G2211Тема: изучение принципов работы прерываний контроллера MSP430G2211. Цель работы: изучить принцип работы с прерываниями контроллера MSP430G2211, Разработать программу в соответствии с вариантом. Ход работы. Прерывание (англ. interrupt) – сигнал, сообщающий процессору о наступлении какого–либо события. При этом выполнение текущей последовательности команд приостанавливается и управление передаётся обработчику прерывания, который реагирует на событие и обслуживает его, после чего возвращает управление в прерванный код. Пример использования прерывания.
#include "msp430G2211.h" void main() { WDTCTL = WDTPW + WDTHOLD; P1DIR &= ~BIT3; P1REN |= BIT3; P1IE |= BIT3; // Разрешение прерываний на P1.3 P1IES |= BIT3; // Прерывание происходит по 1/0 (отпусканию // нажатию) P1IFG &= ~BIT3; // Очистка флага прерываний для P1.3 P1DIR |= BIT0 + BIT6; P1OUT |= BIT0; P1OUT &= ~BIT6; __bis_SR_register(GIE); // Установка флага глобального // разре шения // прерываний while(true); } #pragma vector=PORT1_VECTOR __interrupt void P1INT() // Обработчик прерывания { P1IE &= ~BIT3; // Запрет прерываний на P1.3 P1OUT ^= BIT0; // P1.0 меняет своё состояние P1OUT ^= BIT6; // P1.6 меняет своё состояние for(volatile unsigned int i = 30000; i.= 0; i––); // Задержка P1IE |= BIT2; // Разрешение прерываний на P1.2 P1IFG &= ~BIT2; // Очистка флага прерываний для P1.2 }
В программе используются побитовые операции Си, «|=» установит соответствующий значению справа бит в регистре слева в единицу, а «&= ~» напротив установит его в 0. В данном примере по нажатию на кнопку (P1.3) происходит прерывание, которое меняет состояние двух светодиодов (P1.0 и P1.6). PxIE разрешает прерывания для пинов порта Px. Значение «1», записанное в определенный разряд позволяет получать прерывания от определенного пина. PxIES определяет по какому уровню сигнала будет происходить прерывание. В нашем случае это означает, что единица, помещенная в конкретный разряд данного регистра, позволит получать событие нажатия кнопки. И наоборот, ноль позволит получать событие отпускания кнопки. На схеме подключения (рисунок 1.26) резистор R1 нарисован показательно, на самом деле он находится внутри микроконтроллера и включается регистром P1REN.
PxIFG – флаг прерывания. В случае возникновения события нажатия кнопки он будет установлен в единицу, что и вызовет обработчик прерывания (__interrupt void P1INT()). Соответственно, сразу после обработки события флаг необходимо сбросить. Если убрать из примера строчку 31 в конце обработчика, тогда, сразу после первого нажатия кнопки, лампочки будут переключаться так, как будто вы постоянно нажимаете на кнопку. __bis_SR_register(GIE) устанавливает флаг глобального разрешения прерываний (Global Interrupt Enable) в status register. Фактически это эквивалентно записи SR |= GIE, но обращаться к регистру SR можно только по средствам функций __bis_SR_register и __get_SR_register. На рисунке 1.27 приведена схема битов в SR регистре.
Рисунок 1.27 – Схема битов в SR регистре Таким образом 0, 1, 2 и 8 биты – это биты математических операций. Бит 3 – это глобальное разрешение прерываний. Пока этот бит не установлен в единицу, никакие прерывания обрабатываться не будут. Список всех доступных векторов прерываний можно посмотреть в заголовочном файле для Вашего контроллера. В данном случае это msp430G2211.h. Дребезг контактов возникает при нажатии кнопки, благодаря чему обработчик прерываний будет вызван многократно. В данном примере этого удалось избежать следующим образом: Сразу после вызова обработчика устанавливается запрет прерываний (строка 24); после переключения состояний светодиодов делается задержка (строка 29); снова устанавливается разрешение прерываний (строка 30). Директива volatile в 29 строке кода означает, что переменная i не будет оптимизироваться при компиляции. Если её убрать, то задержки не будет. Задания в соответствие с вариантом указаны в таблице 1.14
Таблица 1.14 – Варианты заданий для лабораторной работы 3
Продолжение таблицы 1.14
Отчет должен содержать: название лабораторной работы, номер варианта, тема, цель, ход работы, выводы В ходе работы необходимо привести блок схему алгоритма программы, листинг готовой программы с построчным описанием, электрическую принципиальную схему подключения контроллера к отладочному комплекту.
|