МИНОБРНАУКИ РОССИИ
__________________________________________________
Санкт-Петербургский государственный электротехнический
университет «ЛЭТИ» им. В.И. Ульянова (Ленина)
__________________________________________________
МИКРОПРОЦЕССОРНЫЕ СИСТЕМЫ
Отчет по лабораторной работе №3
Вариант бригады №5
Выполнили:
Жариков В.В
Шумилов Н.С.
Факультет: КТИ
Группа №: 2307
Проверил:
Зуев И.С
Подпись:
________
Санкт -Петербург
СПбГЭТУ “ЛЭТИ”
2015 г.
Лабораторная работа №3
Изучение режимов работы таймера/счетчика в микроконтроллере
Цель работы:
Ознакомление с некоторыми применениями таймера/счетчика в микроконтроллере.
Изучение вопросов программирования и применения таймера/счетчика в основных режимах его работы.
Задания на лабораторную работу
Вывод результата эксперимента осуществляется через порт P1 контроллера.
Разработать программу аппаратно-программной задержки, обеспечивающую наблюдение эффекта "Бегущего огня" на индикаторных светодиодах. Вид и частота "бегущего огня" определены вариантом задания (номер бригады).
Совместно с таймером/счетчиком при выполнении лабораторной работы необходимо использовать подпрограмму задержки. Сигнал прерывания TF0 из С/Т0 вызывает модуль программной задержки, реализуемой с использованием соответствующего кода, загружаемого в регистр МК и декрементируемого после очередного сигнала прерывания из Т/С0. Разрешение прерывания от Т/С0 осуществляется установкой бита IE.1 в регистре масок прерывания IE и установкой бита IE.7 для общего разрешения прерывания (смотрите описание системы прерывания в лабораторной работе №4).
В режиме реального времени реализация задержки только посредством таймера при частоте тактирования микроконтроллера 6Mгц для 16-битного Т/С составляет около 130 мс, что недостаточно для визуального наблюдения за "бегущим огнем", используемым в качестве индикатора результатов эксперимента.
В режиме моделирования процессы в ОМК идут медленнее в сотни раз. Поэтому настройка C/T0 иная, чем в режиме реального времени
В соответствии с заданием определить длительность и количество вызовов подпрограммы задержки для режимов реального времени и моделирования.
Возврат из подпрограммы программной задержки обеспечивается командой RETI, восстанавливающей содержимое программного счетчика РС из стека. В стек РС загружается автоматически по аппаратно сформированному коду команды LCALL. В РС при прерывании от Т/С0 загружается код адреса 000BH, в котором находится команда перехода к подпрограмме обработки соответствующего прерывания.
А. Разрешение счета обеспечивается битом GATE, устанавливаемым в регистре TMOD.
В. Разрешение счета обеспечивается внешним сигналом, поступающим на вход прерывания INT0 (в макете обозначен IO).
Вариант задания |
Вид бегущего огня |
Время свечения светодиода/СИД/ /в секундах/ |
5 |
Слева-направо; горят 4 СИД |
0,5 |
2. Изучить особенность работы Т/С0 в режиме 2.
Разработать программу подсчета числа внешних сигналов /событий/. Источником сигналов является внешний сигнал, поступающий на вход Т0, режим работы Т/С0 – режим 2. Для наблюдения выполнения программы загрузить в TL0 и TH0 одинаковые коды, например 0F8H. Результатом выполнения программы является код числа сигналов, выведенный в P1.
Cтруктурные схемы работы T/C для изучаемых режимов
Режим 1. Работа Т/С в этом режиме показана на рис. на примере Т/С0. В этом режиме разрядность Т/С - 16 бит, при переходе Т/С из состояния "все единицы" в состояние "все нули" устанавливается флаг прерывания TF0. Входной синхросигнал таймера разрешен (поступает на вход Т/С), когда управляющий бит GATE (блокировка) равен 0, либо на внешний вход запроса прерывания INT0 поступает уровень 1. Необходимо отметить, что установка бита GATE в 1 позволяет использовать таймер для измерения длительности импульсного сигнала, поступающего на вход INT0.
Режим 2. В режиме 2 переполнение (переход из состояния 11...1 в 00...0) 8-битного счетчика TL0 приводит к формированию флажка TF0 и автоматической загрузке в TL0 байта из регистра TH0 Т/С0, заданного предварительно программным способом. При перезагрузке содержимое TH0 остается неизменным. В этом режиме T/C0 и T/C1 функционируют одинаковым образом. Работа Т/С0 показана на рис.
- 28 -
Описания алгоритмов и листинги программ
Программа к заданию 1 устанавливает флаги разрешения прерывания, устанавливает режим таймера (режим 1) и запускает таймер, после чего в бесконечном цикле с меткой DIVIDER проверяет значение счетчика вызовов процедуры обработки прерывания от T/C0, если оно равно ограничению (об этом ниже), то циклически сдвигает инициализированный формой «бегущего огня» аккумулятор, подает значение аккумулятора на порт P1, и сбрасывает R0. Процедура обработки прерывания от T/C0 просто инкрементирует R0
Желаемую частоту обновления индикаторов в (1/0.5 c) = 2 Гц можно получить делением тактовой частоты в 6МГц сначала на 2^16 посредством T/C0, а затем на ~46 посредством программного делителя, отсюда ограничение на число вызовов - 46
Поскольку в режиме симуляции процессы протекают в сотни раз медленее, для демонстрации корректности работы программы в нее были внесены некоторые изменения (см. комментарии в коде)
Листинг программы к заданию 1
$mod52
ORG 000h
JMP MAIN
ORG 000Bh
JMP DELAY
ORG 0100h
MAIN:
MOV A, #0F0h ;Форма "бегущего огня"
MOV R0, #0
SETB IE.1 ;Разрешение прерываний от T/C0
SETB IE.7 ;Общее разрешение прерываний
MOV TL0, #0F8h ;Для наблюдения в режиме симуляции, закомментить
MOV TH0, #0FFh ;Для наблюдения в режиме симуляции, закомментить
SETB TMOD.7 ;Установка режима таймера
SETB TCON.4 ;Запуск таймера
;Желаемой частоты (1/0.5 c.) = 2 Гц можно добиться делением тактовой частоты в 6МГц
;сначала на 2^16 посредством T/C0, а затем на ~46 посредством программного делителя.
DIVIDER: ;Программный делитель
;CJNE R0, #46, DIVIDER ;Раскомментить
MOV P1, A ;Выводим наш "огонь" в порт
RR A ;Циклически сдвигаем наш "огонь"
MOV R0, #0
JMP DIVIDER
ORG 0120h
DELAY: ;Подпрограмма задержки
MOV TL0, #0F8h ;Закомментить
MOV TH0, #0FFh ;Закомментить
INC R0
RETI
END
Листинг программы к заданию 2
$mod52
ORG 0000h
JMP MAIN
ORG 000Bh ;Обработка прерывания TF0
JMP TM0
MAIN:
MOV TMOD, #00000110b ;Устанавливаем режим работы 2 таймера
MOV TL0, #0f8h
MOV TH0, #0f8h
MOV IE, #10000010b;
MOV P1, #0h
MOV TL1,#1h
SETB TR0; Запуск таймера
M1: JMP M1
TM0:; Прерывание таймера 0;
MOV P1,TL1
INC TL1
RETI
END