
- •Часть 1. Лабораторная работа №1 устройства ввода Краткие теоретические сведения
- •Пример приложения
- •Задания для самостоятельного выполнения
- •Контрольные вопросы
- •Устройства вывода. Работа с принтером Краткие теоретические сведения
- •Компонент tPrintDialog
- •Пример программы
- •Процедура печати текста из Memo
- •Процедура печати картинки из Image
- •Задания для самостоятельного выполнения
- •Контрольные вопросы
- •Часть 2. Практическая работа №1
- •Теоретические сведения
- •Задание для самостоятельного выполнения
- •Теоретические сведения
- •Практическая работа №2
- •Теоретические сведения
- •Практическая работа №3
Практическая работа №3
Тема: Таймеры.
Цель: Научиться разрабатывать программы для МК, использующие таймеры.
Задание 1
1.1. Разработайте программу для МК ATmega32, использующую прерывание по переполнению и прерывание по сравнению таймера-счетчика Timer0, работающего в нормальном режиме. Начальное значение счетного регистра таймера TCNT0 и значение регистра сравнения OCR0 установите в соответствии со значениями, приведенными в таблице 1, в соответствии с предложенным преподавателем вариантом.
Таблица 1 – Варианты начальных значений регистра TCNT0 и значений регистра OCR0
Вариант |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
TCNT0 |
10 |
20 |
30 |
40 |
50 |
60 |
70 |
80 |
90 |
100 |
110 |
120 |
OCR0 |
100 |
125 |
138 |
149 |
116 |
205 |
223 |
156 |
176 |
222 |
198 |
230 |
Частота работы таймера должна равняться тактовой частоте контроллера и составлять 4МГц. Для конфигурирования контроллера воспользуйтесь генератором начального кода. Обратите внимание, что значения счетных регистров и регистров сравнения в генераторе начального кода задаются в шестнадцатеричной системе счисления.
В обработчиках прерываний по переполнению (interrupt [TIM0_OVF] void timer0_ovf_isr(void)) и по сравнению (interrupt [TIM0_COMP] void timer0_comp_isr(void)) таймера Timer0 организуйте инвертирование уровней сигналов на ножках, выбранных из таблицы 2 в соответствии со своим вариантом.
Таблица 2 – Варианты выводов
Вариант |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
Переполнение |
PA0 |
PA1 |
PA2 |
PA3 |
PA5 |
PA6 |
PB0 |
PB4 |
PB2 |
PB3 |
PB5 |
PB6 |
Сравнение |
PA1 |
PA2 |
PA3 |
PA4 |
PA6 |
PA7 |
PB3 |
PB2 |
PB3 |
PB4 |
PB6 |
PB7 |
Опишите глобальную переменную типа char и в тело основной функции программы добавьте единственную строку, в которой этой переменной присваивалось бы значение счетного регистра таймера-счетчика Timer0.
1.2. В симуляторе VMLab разработайте проект, с помощью которого проверьте правильность работы написанной программы. Проект должен позволять просматривать уровни сигналов на двух выходах контроллера, указанных в таблице 2, и значение описанной в программе глобальной переменной. Проведите измерение периодов изменения сигналов.
В отчет включите задание, текст программы, текст проекта в VMLab, диаграммы изменения напряжения на выводах контроллера, полученные в VMLab, измеренные значения периодов.
Задание 2
2.1. Разработайте программу для МК ATmega32, позволяющую подсчитывать количество импульсов. Используйте для этого таймер-счетчик Timer1, тактируя его внешним сигналом по спаду (On falling edge), подаваемым на входную ножку T0 (PB1), подтянутую к питанию. Таймер должен работать в режиме CTC on top=OCR1A, при этом значение в регистре сравнения должно равняться значению, выбранному из таблицы 3.
Таблица 3 – Варианты значений регистра OCR1A
Вариант |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
OCR1A |
10 |
12 |
13 |
14 |
16 |
20 |
22 |
15 |
17 |
23 |
19 |
25 |
Опишите глобальную переменную типа unsigned int и в тело главной функции программы добавьте единственную строку, в которой этой переменной присваивалось бы значение счетного регистра таймера-счетчика Timer1.
2.2. В симуляторе VMLab разработайте проект, с помощью которого проверьте правильность работы написанной программы. Для подачи сигнала тактирования используйте ключ К0, подключенные одним выводам к тактовому входу таймера, а вторым к земле (в VMLab - VSS). Проект должен позволять просматривать значение описанной в программе глобальной переменной.
В отчет включите краткую формулировку задания, текст программы, текст проекта в VMLab, укажите в отчете пределы изменения значений счетного регистра таймера-счетчика Timer1.
Задание 3
3.1. Разработайте программу автомата «бегущий огонь» для МК ATmega32, переключающую лампочки с периодом, максимально приближенным к периоду, указанному в таблице 4. Переключение должно осуществляться в обработчике переполнения таймера. В обработчик переполнения таймера добавьте инвертирование сигнала на каком-либо выводе контроллера, чтобы можно было измерить период срабатывания таймер.
Таблица 4 – Периоды времени
Вариант |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
Период, с |
0,2 |
0,3 |
0,4 |
0,5 |
0,6 |
0,7 |
0,8 |
0,9 |
1 |
1,2 |
1,5 |
2 |
3.2. В симуляторе VMLab разработайте проект, с помощью которого проверьте правильность работы написанной программы. Проект должен позволять наблюдать переключение светодиодов, заменяющих лампочки. Измерьте период срабатывания таймера.