- •ТехничЕские требования
- •Содержание пояснительной записки
- •Анализ задания
- •1.1 Формирование кодовой таблицы и набора дискретных сигналов
- •1.2 Общая характеристика микроконтроллера ххххх
- •1.2.1 Организация памяти и программная модель
- •1.2.3 Таймеры/ счетчики
- •1.2.4 Система прерываний
- •1.3 Размещение кодовой таблицы сигналов в памяти
- •1.4 Порт вывода дискретных сигналов
- •1.5. Порядок работы генератора сигналов
- •Кодовая таблица символов
- •2 Разработка структурной схемы генератора сигналов
- •3 РазработкА функциональной схемы генератора сигналов
- •4 РазработкА принципиальной схемы генератора сигналов
- •Общие рекомендации
- •5 Разработка алгоритма работы и управляющей программы генератора
- •Загрузочный файл программы
- •Общие сведения
5 Разработка алгоритма работы и управляющей программы генератора
Алгоритм работы и управляющая программа генератора разрабатываются на основе решений, принятых при анализе технического задания и создании электрической схемы устройства. На этом этапе разработчик должен учитывать особенности архитектуры микроконтроллера и его возможности.
Пример.
Согласно заданию программируемый генератор формирует дискретные сигналы, соответствующие последовательности символов *ПРИМЕР*. Предусмотрено несколько режимов работы устройства, сопровождающихся соответствующей индикацией. Блок-схема алгоритма работы генератора приведена на рисунке 5.1.
Рисунок 5.1 - Блок-схема алгоритма работы генератора сигналов
Микроконтроллер выполняет управляющую программу, размещенную во внешней памяти программ. Так как область младших адресов памяти программ отведена под обработку прерываний, основная программа размещается по адресу 40h.
Пример блок-схемы алгоритма работы управляющей программы генератора приведен на рисунке 5.2.
При получении сигнала «Reset» генератор переходит в режим «Сброс». Производится инициализация микроконтроллера: загрузка начальных значений регистров-указателей и счетчиков, настройка системы прерываний и таймеров. Индикация режима производится светодиодами, подключенными к линиям Р1.2 и Р1.3, поочередно зажигающимися на 0,4 с в течение 1,6 с. Таким образом, всего осуществляется 4 цикла индикации, для подсчета которых используется регистр R2.
Затем генератор переходит в режим «Ожидание», производится опрос сигнала «Start», подаваемого на линию Р1.1 микроконтроллера. Индикация режима производится светодиодом, подключенным к линии Р1.4.
Если на линию Р1.1 подается уровень логического нуля генератор переводится в режим «Пуск», включается таймер Т0 и начинается формирование дискретных сигналов Q1-Q8.
Если на линии Р1.1 устанавливается уровень логической единицы, таймер выключается, формирование выходных сигналов прекращается и генератор снова переводится в режим «Ожидание».
В каждом цикле выдачи дискретных сигналов в порт вывода последовательно записываются 8 кодовых комбинаций. Кодовая таблица сигналов хранится во внешней памяти данных по адресу 9000h.
Кодовые комбинации на входах порта вывода обновляются каждые 0,1 мс. Для обеспечения заданной длительности используется таймер/счетчик Т0, работающий в режиме восьмиразрядного таймера с автоперезагрузкой. Перед первым пуском таймера в регистр TH0 записывается число 38h, которое автоматически перезагружается в регистр TL0 при переполнении таймера. Для выбора режима работы таймера в регистре TMOD устанавливаются соответствующие значения битов C/T, М0 и М1. Для включения таймера в регистре TCON устанавливается бит TR0.
Чтение кодовых комбинаций из памяти, их запись в порт вывода и организация нового цикла выдачи сигналов выполняются при обработке запроса прерывания от таймера Т0. Для разрешения прерывания от таймера Т0 необходимо в регистре IE установить бит ЕТ0 и снять блокировку всех прерываний, установив бит ЕА.
Для обслуживания прерывания таймера Т0 в ячейку памяти программ с адресом 0Вh записывается код команды безусловного перехода к подпрограмме обработки прерывания TIMER.
Чтение кодовой таблицы производится с использованием косвенной адресации через регистр-указатель данных DPTR. Регистр общего назначения R3 используется как счетчик, для контроля количества кодовых комбинаций, записанных в порт вывода. После выдачи последней кодовой комбинации регистр-указатель DPTR и регистр-счетчик R3 загружаются начальными значениями.
Адрес порта вывода дискретных сигналов AB00h принадлежит внешней памяти данных. Запись в порт вывода текущей кодовой комбинации производится с использованием косвенной адресации. Порт Р2 используется для адресации старшего байта адреса, а регистр R0, как регистр-указатель младшего байта адреса.
Пример блок-схемы алгоритма работы подпрограммы обработки прерывания таймера приведен на рисунке 5.3.
На рисунке 5.4 приведены примеры блок-схем алгоритмов работы подпрограмм формирования временных интервалов 400, 100 и 1 мс.
В качестве пояснения к программе укажите в специальной таблице имена переменных, их назначение, а так же специализацию регистров общего назначения. Для примера см. таблицу 5.1.
Создание и отладка рабочей программы генератора производится при помощи интегрированной среды разработки программного обеспечения Keil mVision.
Таблица 5.1 – Назначение переменных, меток и регистров, используемых в программе
Имя |
Значение |
Назначение |
ADR_ TABLE |
9000h |
начальный адрес кодовой таблицы сигналов |
CODE_NUMB |
8d |
количество кодовых комбинаций в таблице |
BLINK |
4H |
количество циклов индикации светодиодов в режиме «Сброс» |
PORT_L |
00h |
младший байт адреса порта вывода дискретных сигналов |
PORT_H |
0ABh |
старший байт адреса порта вывода дискретных сигналов |
TimeR_X |
38H |
уставка таймера, соответствует длительности 0,1 мс при 24 МГц |
KN_START |
P1.4 |
проверка сигнала "START" |
Метка |
Назначение |
|
BEGIN |
инициализация микроконтроллера |
|
RESET |
перевод генератора в режим «Сброс» |
|
DELAY |
вызов подпрограммы формирования временного интервала 400мс |
|
wait |
перевод генератора в режим «Ожидание» |
|
OPROS |
опрос кнопки «START», ожидание прерывания таймера Т0 |
|
START |
перевод генератора в режим «Пуск» |
|
TIMER |
вход в подпрограмму обработки прерывания таймера Т0 |
|
NEXT_CODE |
выход из подпрограммы обработки прерывания таймера Т0 |
|
MS_400 |
подпрограмма формирования временного интервала 400 мс |
|
MS_100 |
подпрограмма формирования временного интервала 100 мс |
|
MS_1 |
подпрограмма формирования временного интервала 1 мс |
|
M1 |
вызов подпрограммы задержки MS_100 |
|
М2 |
вызов подпрограммы задержки MS_1 |
|
М3 |
цикл формирования задержки 1 мс |
|
TABLE |
размещение таблицы кодовых комбинаций |
|
Регистр |
Назначение |
|
R0 |
указатель младшего байта адреса порта вывода |
|
R2 |
счетчик количества циклов индикации в режиме «Сброс» |
|
R3 |
счетчик количества кодовых комбинаций, выданных в порт вывода |
|
R4 |
счетчик количества циклов вызова подпрограммы MS_400 |
|
R5 |
счетчик количества циклов вызова подпрограммы MS_1 |
|
R6 |
счетчик количества машинных циклов подпрограммы MS_1 |
|
порт Р1 |
Назначение |
|
Р1.1 |
место подключения кнопки «START», проверка сигнала «START» |
|
P1.2 |
место подключения VD1, индикация режима «Сброс» |
|
Р1.3 |
место подключения VD2, индикация режима «Сброс» |
|
P1.4 |
место подключения VD3, индикация режима «Ожидание» |
|
P1.5 |
место подключения VD4, индикация режима «Пуск» |
После проверки работоспособности программы и ее соответствия заданию в пояснительной записке приводятся:
листинг программы, содержащий результаты компиляции
(см. файл *.lst в директории проекта);
загрузочный файл программы (см. файл *.hex в директории проекта).
Рисунок 5.2 - Блок-схема алгоритма работы управляющей программы генератора
Рисунок 5.3 - Блок-схема алгоритма работы подпрограммы обработки прерывания таймера