Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РГР.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.08 Mб
Скачать

Индивидуальные задания

Вариант

Текст задания

1

Разработать программу, которая, используя прерывание от счетчика 0, увеличивает значение какого-либо регистра на 1 каждую секунду и выводит значение на панель светодиодов.

Вектор прерывания: OC0addr

2

Разработать программу, которая увеличивает значение какого-либо регистра по переполнению счетчика 1 и выводит результат на панель светодиодов.

Вектор прерывания: OVF1addr

3

Разработать программу, которая, используя прерывание от счетчика 1, увеличивает значение какого-либо регистра на 1 каждую секунду и выводит значение на панель светодиодов.

Вектор прерывания: OC1Aaddr/ OC1Baddr

4

Разработать программу, которая увеличивает значение какого-либо регистра по переполнению счетчика 0 и выводит результат на панель светодиодов.

Вектор прерывания: OVF0addr

5

Разработать программу, которая увеличивает значение какого-либо регистра по прерыванию INT0, которое инициируется спадающим фронтом сигнала, и выводит результат на панель светодиодов.

Вектор прерывания: INT0addr

6

Разработать программу, которая увеличивает значение какого-либо регистра по прерыванию INT1, которое инициируется спадающим фронтом сигнала, и выводит результат на панель светодиодов.

Вектор прерывания: INT1addr

7

Разработать программу, которая увеличивает значение какого-либо регистра по прерыванию INT0, которое инициируется нарастающим фронтом сигнала, и выводит результат на панель светодиодов.

Вектор прерывания: INT0addr

8

Разработать программу, которая увеличивает значение какого-либо регистра по прерыванию INT1, которое инициируется нарастающим фронтом сигнала, и выводит результат на панель светодиодов.

Вектор прерывания: INT1addr

9

Разработать программу, которая увеличивает значение какого-либо регистра по переполнению счетчика 2 и выводит результат на панель светодиодов.

Вектор прерывания: OVF2addr

10

Разработать программу, которая, используя прерывание от счетчика 2, увеличивает значение какого-либо регистра на 1 каждую секунду и выводит значение на панель светодиодов.

Вектор прерывания: OC2addr

11

Разработать программу, которая увеличивает значение какого-либо регистра по прерыванию INT2, которое инициируется спадающим фронтом сигнала, и выводит результат на панель светодиодов.

Вектор прерывания: INT2addr

12

Разработать программу, которая увеличивает значение какого-либо регистра по прерыванию INT2, которое инициируется нарастающим фронтом сигнала, и выводит результат на панель светодиодов.

Вектор прерывания: INT2addr

Микроконтроллер в стенде STK 500 работает на частоте 3.68 MHz.

Контрольные вопросы:

  1. Алгоритм обслуживания прерываний.

  2. Тип стека и особенности его организации.

  3. Как разрешить (запретить) обработку маскируемых прерываний?

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

  5. Программные средства для передачи управления в подпрограмму обработки прерывания.

Система прерываний AtMega16.

Аналого-цифровой преобразователь

Освоение алгоритмов обслуживания прерываний микроконтроллера AtMega16, формирование навыков программирования АЦП.

Введение

ATMega16 содержит 10-битовый АЦП (рис. 1), вход которого может быть соединен с одним из восьми выводов Port A. АЦП AtMega16 нужно опорное напряжение для сравнения с входным (если измеряемое равно опорному, то получаем максимальный код в двоичном виде). Опорное напряжение подается на вывод ADRef, или может использоваться внутренний генератор с фиксированным напряжением 2,65 В.

Рис. 1. Структурная схема модуля АЦП

АЦП включается установкой бита ADEN в регистре ADCSR. После преобразования 10-битовый результат оказывается в 8-битовых регистрах ADCL и ADCH. По умолчанию младший бит результата находится справа (то есть в bit 0 регистра ADCL, так называемое правое ориентирование). Но порядок следования битов на левое ориентирование можно сменить, установив бит ADLAR в регистре ADMUX. Это удобно, если требуется получить 8-битовый результат. В таком случае требуется прочитать только регистр ADCH. В противном случае нужно сначала прочитать регистр ADCL, а потом ADCH чтобы быть уверенным в том, что чтение этих двух регистров относится к результату одного преобразования.

Одиночное преобразование может быть вызвано записью бита ADSC в регистр ADCSR. Этот бит остается установленным все время, занимаемое преобразованием. Когда преобразование закончено, бит автоматически устанавливается в 0. Можно также начинать преобразования по событиям из разных источников. Модуль АЦП также может работать в режиме «свободного полета». В таком случае АЦП постоянно производит преобразование и обновляет регистры ADCH и ADCL новыми значениями.

Для выполнения преобразования модулю АЦП необходима тактовая частота. Чем выше эта частота, тем быстрее будет происходить преобразование (оно обычно занимает 13 тактов, первое преобразование занимает 25 тактов). Но чем выше частота (и выше скорость преобразования), тем менее точным получается результат. Для получения максимально точного результата модуль АЦП должен тактироваться частотой в пределах от 50 до 200 КГц. Если необходим результат с точностью менее 10 бит, то можно использовать частоту больше 200 КГц. Модуль АЦП содержит делитель частоты, чтобы получать нужную тактовую частоту для преобразования из частоты процессора.

Рис.2 Регистр ADMUX

Регистр ADMUX (рис.2) задает входной контакт порта A для подключения АЦП, ориентирование результата и выбор опорного напряжения. Если установлен бит ADLAR, то результат левоориентирован. Опорное напряжение от внутреннего генератора задается выставленными в 1 битами REFS1 и REFS0. Если оба бита сброшены, то опорное напряжение берется от контакта AREF. В случае если REFS1=0, а REFS0=1, опорное напряжение берется от AVCC с внешним конденсатором, подключенным к AREF. Выбор контакта (рис.3) ввода выполняется следующим образом:

Рис.3. Выбор аналогового входа

Регистр контроля и статуса АЦП ADCSR представлен на рис.5:

Рис.5. Регистр контроля и статуса ADCSR

Бит ADEN=1 включает модуль АЦП.

Запись единицы в ADSC запускает цикл преобразования. В режиме «свободного полета» (бит ADATE=1) запись единицы запускает первое преобразование, последующие запускаются автоматически.

ADIF – флаг прерывания АЦП. Этот бит устанавливается в 1, когда АЦП завершено преобразование и в регистрах ADCL и ADCH находятся актуальные данные. Этот флаг устанавливается даже в том случае, если прерывания запрещены. Это необходимо для случая программного опроса АЦП. Если используются прерывания, то флаг сбрасывается автоматически. Если используется программный опрос, то флаг может быть сброшен записью лог.1 в этот бит.

ADIE – если в этом бите установлена единица, и прерывания разрешены глобально, то при окончании преобразования будет выполнен переход по вектору прерывания от АЦП.

Биты ADPS2, ADPS1, ADPS0 задают коэффициенты предделителя частоты.

Более подробная информация о программировании АЦП представлена в электронном учебнике на сайте dfe.karelia.ru. Не забывайте, чтобы прерывание от какого-либо модуля работало, должен быть инициализирован сам модуль.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]