В работе рассматривается механизм внешних прерываний.




Лабораторная работа №3

По дисциплине «Микропроцессорные системы»

Прерывания. Внешние прерывания как управление ходом работы устройства.

 

Цель работы: Освоить механизм работы внешних прерываний.

-составить программу чтения состояния кнопок C51, настроить прерывания по кнопке.

-составить алгоритм ветвления программы, используя прерывания.

 

 

Рис.1 входы внешних прерываний Atmega16A

 

 

Взаимодействие микроконтроллера с внешними устройствами

Взаимодействие происходит благодаря портам ввода/вывода (I/O- input/output).

Рис.2 общее представление управлением портов I/O

 

На плате C51 подключение кнопок соответствует следующей таблице

Кнопка Порт процессора ATmega16
P32 (S2) PD2
P33 (S3) PD3
P34 (S4) PD4
P35 (S5) PD5
P36 (S6) PD6

Таб.1 соответствие кнопок битам процессора

 

Каждый порт микроконтроллера в программном виде представляет из себя 3 регистра, которые отвечают за его работу. Так как применяемый в работе процессор 8 битный, то и его ножки сгруппированы по 8 бит в группе.

Каждая ножка процессора может быть как портом входа, так и портом выхода. За работу порта отвечают регистры:

DDRx

PINx

PORTx

 

DDR (Data direction register)

Каждый бит регистра DDRх отвечает за режим работы ножки контроллера.

Записав 0 в соответствующий бит, настраиваем ножку на вход.

Записав 1- устанавливаем на вывод.

Пример: DDRD|=1<<PD4; //настройка 4 бита порта D на выход

 

PIN (Port input)

Каждый бит регистра PIN показывает текущее состояние соответствующей ножки контроллера. Каждый порт работает только на чтение.

 

PORT

При настройке соответствующего пина на вывод, регистр PORTx управляет состоянием данного пина. Установив 1 на некотором бите регистра, подаётся логическая 1 на вывод контроллера. Около +5В.

Если установить 1 в порт, настроенный на чтение, то включается подтягивающий резистор (pull-up).

DDRB|=1<<PB3; //3 бит порта B настроен на вывод
PORTB|=1<<PB3;//отправить лог.1 на 3 бит порта B

 

В работе рассматривается механизм внешних прерываний.

Как отмечалось ранее, прерывание- сигнал, сообщающий о наступлении какого-либо события. При этом выполнение текущей последовательности команд прерывается и управление передается обработчику прерывания. Прерывания позволяют своевременно обрабатывать события периферийных устройств.

Прерывания внутренние - обработчики сигналов внутренней периферии (таймеры (см. лабораторная работа№1), UART, АЦП и пр.).

Прерывания внешние - реакция на логические уровни сигналов на ножках микроконтроллера.

Таб.2 векторы прерываний контроллера Atmega16A

 

 

За конфигурации внешних прерываний отвечает регистр GICR (General interrupt control register).

Биты INT1,INT0,INT2, при записи в них 1, разрешают соответствующие прерывания.
За условие срабатывания вызова прерывания на выбранных пинах отвечает регистр MCUCR (MCU Control Register).

За настройку возникновения сигнала int0 отвечают следующие биты:

ISC01 ISC00 Описание
    По низкому уровню на int0
    Каждая смена уровня на int0
    Задний фронт int0
    Передний фронт int0

Таб.3 конфигурация прерывания int0

Аналогично настраивается режим прерывания int1:

ISC11 ISC10 Описание
    По низкому уровню на int1
    Каждая смена уровня на int1
    Задний фронт int1
    Передний фронт int1

Таб.4 конфигурация прерывания int1

Прерывание int2 возможно настроить по переднему и заднему фронту. За эту настройку отвечает 6 бит регистра
MCUCSR (MCU Control and Status Register): 0-задний фронт, 1-передний фронт.

Пример включения всех прерываний и настройки срабатывания по передним фронтам:

GICR|=(1<<7)|(1<<6)|(1<<5); /*включить все прерывания*/
MCUCR|=0x0F;/*настройка int0 и int1 срабатывание по переднему фронту*/
MCUCSR|=(1<<6);/*настройка int2 срабатывание по переднему фронту*/

Выполнение работы.

Лабораторная работа №3опирается на успешно выполненные работы №1 и №2. Результат работы представляет собой программу, выводящую бегущий огонь на светодиодах в направлении, задаваемом при помощи механизма прерываний. ЖК экран отображает текст, соответствующий направлению движения.

1.1 Создать новый проект в среде WinAVR, подготовить Makefile.

1.2 Завести функции таймера (лабораторная работа№1), функции работы с ЖК экраном (лабораторная работа №2). Для работы с кнопками подготовить функции, описываемые в файле buttons.h; для хранения глобальных переменных завести файл global.h.

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

 

Файл global.h – хранилище объявлений применяемых в проекте переменных

Файл timers.h – описание прерывания по таймеру (см. лабораторная работа№1), с добавленной case – структурой.

buttons.h – инициализация прерываний по кнопкам S2 и S3 платы C51.

Функция button_init() конфигурирует регистры, необходимые для включения и настройки пинов, отвечающих за внешние прерывания.

 

Основной файл main представлен ниже:

Обратить внимание на определение переменной mode из файла global.h!

 

1.3 Скомпилировать проект:Tools / [WinAVR] MakeAll

1.4 Подключить через ISP и запрограммировать плату C51: Tools / [WinAVR] Program

1.5 Исследовать ход работы программы и исправит ь возможные ошибки.

 

 

Самостоятельные задания

2.1 Разработать функцию, которая в момент включения платы С51 запускает «демо-режим» - выводит на ЖК сообщение с предложением о нажатии кнопок и зажигает на светодиодах платы самостоятельно разработанную студентом последовательность.

2.2 Разработать функцию нажатия свободных кнопок, изменяющую скорость бегущих огней.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-01-30 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: