Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 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.

 


Рисунок 1.26 – Схема подключения подтягивающего резистора

 

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 биты – это биты математических операций.
4, 5, 6, 7 – биты управления уровнями энергопотребления, за счёт уменьшения частоты или отключения АЛУ.

Бит 3 – это глобальное разрешение прерываний. Пока этот бит не установлен в единицу, никакие прерывания обрабатываться не будут.
#pragma vector – директива, которая определяет что нижеследующая функция является обработчиком указанного прерывания.

Список всех доступных векторов прерываний можно посмотреть в заголовочном файле для Вашего контроллера. В данном случае это msp430G2211.h.

Дребезг контактов возникает при нажатии кнопки, благодаря чему обработчик прерываний будет вызван многократно. В данном примере этого удалось избежать следующим образом:

Сразу после вызова обработчика устанавливается запрет прерываний (строка 24); после переключения состояний светодиодов делается задержка (строка 29); снова устанавливается разрешение прерываний (строка 30).

Директива volatile в 29 строке кода означает, что переменная i не будет оптимизироваться при компиляции. Если её убрать, то задержки не будет.

Задания в соответствие с вариантом указаны в таблице 1.14

 

Таблица 1.14 – Варианты заданий для лабораторной работы 3

№ Варианта Задание
  Для контроллера MSP430G221 Обеспечить зажигание красного светодиода по прерыванию от кнопки S2, при повторном нажатии горит зеленый при третьем нажатии горят оба. Цикл повторяется
  Для контроллера MSP430G2211Мигают оба светодиода, по прерыванию от кнопки S2 мигают поочередно при отпускании кнопки снова мигают оба
  Для контроллера MSP430G2211 Поочередно мигают светодиоды с частотой 2Гц по прерыванию от кнопки S2 частота меняется на 1Гц при отпускании снова 2Гц
  Для контроллера MSP430G2211 По прерыванию от кнопки S2 светодиоды начинают поочередно светится с частотой 1Гц при отпускании зажигаются оба на 3с и гаснут.
  Для контроллера MSP430F5438A Обеспечить зажигание красного светодиода при одном нажатии (прерывание от кнопки S2) на кнопку, при повторном нажатии горит зеленый при третьем нажатии горят оба. Цикл повторяется
  Для контроллера MSP430F5438A Мигают оба светодиода, по прерыванию от кнопки S2 мигают поочередно при отпускании кнопки снова мигают оба
  Для контроллера MSP430F5438A Поочередно мигают светодиоды с частотой 2Гц по прерыванию от кнопки S2 частота меняется на 1Гц при отпускании снова 2Гц
  Для контроллера MSP430F5438AПо прерыванию от кнопки S2 светодиоды начинают поочередно светится с частотой 1Гц при отпускании зажигаются оба на 3с и гаснут.
  Для контроллера MSP430F5438A Зажечь оба светодиода, по прерыванию от кнопки S2 погасить

Продолжение таблицы 1.14

  Для контроллера MSP430F5438A Обеспечить зажигание светодиодов при четырехкратном нажатии (прерывании) на кнопку S2
  Для контроллера MSP430G2211 Обеспечить зажигание светодиодов при четырехкратном нажатии (прерывании) на кнопку S2  
  Для контроллера MSP430G2211 Обеспечить зажигание светодиодов при четырехкратном нажатии (прерывании) на кнопку S2

Отчет должен содержать: название лабораторной работы, номер варианта, тема, цель, ход работы, выводы

В ходе работы необходимо привести блок схему алгоритма программы, листинг готовой программы с построчным описанием, электрическую принципиальную схему подключения контроллера к отладочному комплекту.

 

Date: 2015-06-06; view: 821; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию