
ПСМПС (лаб)
.pdf121
Текущая настройка окна LED Menu может быть сохранена в файле с помощью команды контекстного меню (File | Save) или (File | Save As) , а впоследствии загружена командой (File | Load).
3.2. Управление семисегментным индикатором
Рассмотрим другой пример, демонстрирующий принцип управления одним разрядом семисегментного индикатора, который подключается к порту Р1 микроконтроллера, как это показано на рис. 6.5а. Реализуем программу, которая последовательно высвечивает цифры на индикаторе от 0 до 9.
1. Как и ранее, создадим новый проект и введем в основной файл исходного текста проекта следующую программу:
main SEGMENT CODE bitseg SEGMENT BIT stack SEGMENT IDATA
CSEG AT 0 USING 0
ORG 0H ljmp reset
;-------------------------------------------------------
;СЕГМЕНТ КОДА
RSEG main
;ИНИЦИАЛИЗАЦИЯ КОНТРОЛЛЕРА reset:
mov SP, #stack - 1 mov P1, #0FFh
mov r0, #10 mov r1, #0
;выводим подряд все цифры от 0 до 9
ss:call prind
; здесь можно выполнить задержку inc r1
mov a,r1 djnz r0, ss
122
;ОБЛАСТЬ ФОНОВЫХ ЗАДАЧ forever:
sjmp forever
;ПОДПРОГРАММА ВЫВОДА НА СЕМИСЕГМЕНТНЫЙ ИНДИКАТОР
prind: |
push |
psw |
; Сохранение регистра PSW в стеке |
|
push |
DPH |
; Сохранение регистра DPTR в стеке |
|
push |
DPL |
|
|
mov |
DPTR,#zg |
; Загрузка адреса знакогенератора |
|
movc |
a,@a+DPTR ; Считывание кода цифры в А |
|
|
mov |
c,bufT |
; Считывание буфера точки |
|
mov |
acc.7,c |
; Запись значения точки в старший |
|
cpl a |
|
; разряд |
|
|
; обращение А (в зависимости от |
|
|
mov |
|
; общего провода) |
|
p1,a |
; Вывод полученного кода в порт P1 |
|
|
pop |
DPL |
; Восстановление регистра DPL |
|
pop |
DPH |
|
|
pop |
psw |
; Восстановление регистра psw |
|
ret |
|
; Выход из подпрограммы |
; Таблица преобразования в семисегментный код |
|||
zg: |
DB |
11000000B |
; Символ 0 |
|
DB |
11111001B |
; Символ 1 |
|
DB |
10100100B |
; Символ 2 |
|
DB |
10110000B |
; Символ 3 |
|
DB |
10011001B |
; Символ 4 |
|
DB |
10010010B |
; Символ 5 |
|
DB |
10000010B |
; Символ 6 |
|
DB |
11111000B |
; Символ 7 |
|
DB |
10000000B |
; Символ 8 |
; |
DB |
10010000B |
; Символ 9 |
|
|
|
;СЕГМЕНТ СТЕКА
RSEG stack DS 10h
;-------------------------------------------------------
;БИТОВЫЙ СЕГМЕНТ
RSEG bitseg

123
bufT: DBIT 1
END
2. Отладку проекта можно выполнить, как и ранее, с использованием модуля LED Debug. Вместо одиночного светодиода в окно LED Menu необходимо добавить любой доступный семисегментный индикатор и сопоставить выводам сегментов индикатора линии соответствующего порта ввода/вывода (P1^0, P1^1 и т.д.). В процессе пошаговой отладки можно будет визуально наблюдать за перебором цифр на индикаторе (рис. 6.15).
Рис. 6.15. Использование модуля LED Debug при отладке проекта
3.3.Задания
1.Модифицируйте программу из п. 3.1 таким образом, чтобы все четыре светодиода сначала последовательно зажигались, а затем последовательно гасились.
2.Модифицируйте программу из п. 3.2 таким образом, чтобы можно было наблюдать обратный отсчет цифр от 9 до 0.
4.Контрольные вопросы
1.Что такое порт в/в микроконтроллера?
2.Почему порты Р1-Р3 микроконтроллера MCS-51 называют «квазидвунаправленными»?
3.Какую нагрузочную способность обеспечивают линии портов в/в микроконтроллера MCS-51? Каким образом можно увеличить нагрузочную способность линии порта в/в?
4.Что такое семисегментный код?
124
Лабораторная работа №7
ПЕРИФЕРИЙНЫЕ УСТРОЙСТВА МИКРОКОНТРОЛЛЕРА MCS-51. СИСТЕМА ПРЕРЫВАНИЙ. ТАЙМЕРЫ-СЧЕТЧИКИ
И ИХ ИСПОЛЬЗОВАНИЕ. ОТЛАДОЧНЫЕ ФУНКЦИИ µVISION2
1. Цель работы
Цель данной лабораторной работы состоит в изучении особенностей системы прерываний микроконтроллера семейства MCS-51. Студент должен получить понятие о прерываниях как механизме реализации асинхронного обслуживания сигналов от внешних и внутренних устройств. Важнейшей частью материала данной лабораторной работы является детальное рассмотрение структуры, функционирования и программирования такого периферийного устройства как таймер-счетчик микроконтроллера MCS-51. В раздел для теоретического изучения включен также краткий материал об отладочных функциях среды µVision2, которые позволяют воспроизводить сигналы на выводах микроконтроллера, имитируя работу простых внешних устройств или их функциональных частей. В практической части работы приведены примеры программирования таймера-счетчика и его использования для задания интервалов времени.
2. Основные теоретические сведения
2.1. Система прерываний MCS-51
Система прерываний микроконтроллеров решает задачи, аналогичные прерываниям в универсальных микропроцессорах – обеспечение построения систем реального времени, когда в реальном масштабе времени микроконтроллер способен реагировать на внешние и внутренние события.
Система прерываний в архитектуре MCS-51 включает пять источников
– два внешних и три внутренних (рис. 7.1). Однако с развитием архитектуры и появлением новых моделей число источников прерываний увеличилось и в некоторых микроконтроллерах, например в 8xС51GB их количество достигло 15. Однако при рассмотрении системы прерываний ограничимся классической схемой с пятью источниками.
Из пяти источников прерываний внешними являются прерывания от входов INT0# и INT1#, внутренними – переполнение двух таймеровсчетчиков, а также прием-передача последовательного порта.

125
MUX 1
Вывод INT0# |
“0” |
IE0 |
|
|
“1” Детектор спада Бит IT0
Бит TF0 (таймер/счетчик 0 )
MUX 1
Вывод INT1# |
“0” |
IE1 |
|
|
“1” Детектор спада Бит IT1
Бит TF1(таймер/счетчик 1 )
Бит TI (UART) |
|
|
1 |
||
Бит RI (UART) |
||
|
||
|
|
1 (03h)
2 (0Bh)
3(13h)
4(1Bh)
5(23h)
Схема приоритетов
Рис. 7.1. Упрощенная схема подсистемы прерываний MCS-51
При возникновении прерываний происходит автоматическая установка специальных флагов в функциональных регистрах. Так, активные внешние сигналы (низкого уровня) на входах INT0# и INT1# приводят к установке флагов IE0 и IE1 регистра TCON. Таймер 0 и таймер 1 используют для сигнализации выработки запросов прерываний флаги переполнения TF1 и TF0 также в регистре управления TCON, а последовательный порт использует для этого два флага – приемника RI и передатчика ТГ в регистре управления
SCON.
Реакция на любой запрос, разрешенный к обслуживанию, заключается в передаче управления от текущей программы специальной процедуре обслуживания прерываний данного типа. Осуществляется эта передача посредством команды LCALL, код которой не выбирается из памяти, а формируется внутри микроконтроллера. Адрес такого перехода в архитектуре MCS-51 соответствуетвекторупрерыванияификсировандлякаждогоисточника(табл. 7.1):
Таблица 7.1. Таблица векторов прерываний микроконтроллера MCS-51
Источник прерывания |
Вектор прерывания |
|
126 |
|
|
|
|
Внешнее прерывание INT0 |
|
0003h |
Таймер-счетчик T/C0 |
|
000Bh |
Внешнее прерывание INT1 |
|
0013h |
Таймер-счетчик T/C1 |
|
001Bh |
Последовательный порт |
|
0023h |
Из таблицы видно, что интервал между адресами составляет всего 8 байт памяти программ, поэтому по первым четырем адресам может располагаться либо очень короткая процедура, либо команда JMP – переход на область памяти, где находится более длинная процедура обслуживания. Если по адресам векторов прерываний находятся команды JMP, то имеет место так называемая таблица переходов системы прерываний.
Когда запрос прерывания принят на обслуживание, выполняется перечисленная ниже последовательность действий. Текущая команда выполняется до конца. Затем внутренне формируемая команда LCALL сохраняет текущее значение счетчика команд РС (адрес следующей команды) в стеке. Это позволяет после завершения процедуры обслуживания прерывания вернуться в прерванную программу. Далее эта команда загружает в РС адрес-вектор. Сохранение в стеке других регистров микроконтроллера, кроме РС, осуществляется программистом командами PUSH в начале процедуры обслуживания, а восстановление в конце − командами POP. Процедура обслуживания прерывания завершается командой RETI, которая выгружает из стека адрес возврата и помещает его в РС. Каждый из источников прерываний может быть разрешен или запрещен с использованием соответствующего бита регистра IE. Крометого, вэтомрегистреимеетсябитзапретавсехпрерываний(табл. 7.2).
Таблица 7.2. Структура регистра IE и назначение его битов
Имя бита |
Номер бита |
Функция |
EA |
IE.7 |
Запрещение запросов от всех источников, |
|
|
при EA = 0 |
ES |
IE.4 |
Запрещение запроса от последовательного |
|
|
порта, при ES = 0 |
ET1 |
IE.3 |
Запрещение запроса от таймера 1, при ET1= 0 |
EX1 |
IE.2 |
Запрещение запроса по входу INT1#, при EX1= 0 |
ET0 |
IE.1 |
Запрещение запроса от таймера 0, при ET0= 0 |
EX0 |
IE.0 |
Запрещение запроса по входу INT0#, при EX0= 0 |
При появлении запросов от нескольких источников очередность их обслуживания определяется с помощью механизма приоритетов прерываний. В
127
архитектуре MCS-51 имеет место двухступенчатый механизм определения приоритетов. Приоритеты первой ступени имеют два уровня: «высокий» и «низкий» и определяются значениями битов регистра IP (табл. 7.3).
Таблица 7.3. Структура регистра IP и назначение его битов
Имя бита |
Номер бита |
Функция |
PS |
IP.4 |
Определяет приоритет последовательного порта |
PT1 |
IP.3 |
Определяет приоритет таймера 1 |
PX1 |
IP.2 |
Определяет приоритет входа INT1# |
PT0 |
IP.1 |
Определяет приоритет таймера 0 |
PX0 |
IP.0 |
Определяет приоритет входа INT0# |
При «1» в определенном разряде регистра IP приоритет соответствующего источника прерывания высокий, а при «0» – низкий. При одновременном появлении нескольких запросов одного уровня очередность обслуживания определяется с помощью внутренней процедуры поллинга (последовательного опроса), который производится в порядке фиксированного старшинства источников внутри одного уровня приоритета (табл. 7.4).
Таблица 7.4. Уровни приоритетов прерываний в микроконтроллере MCS-51
Источник |
Приоритет внутри уровня |
|
Таймер 0 |
4 |
(Высший) |
Таймер 1 |
3 |
|
Вход INT0# |
2 |
|
Вход INT1# |
1 |
|
Последовательный порт |
0 |
(Низший) |
На основе двухступенчатого анализа выбирается запрос с наиболее высоким приоритетом из поступивших. Если какое-либо прерывание уже обслуживается, то его процедуру может прервать только прерывание с более высоким приоритетом. В системе обслуживания прерываний микроконтроллера MCS-51 имеется следующая особенность. По входам INT0#, INT1# могут приниматься сигналы запросов, активными значениями которых являются либо низкий уровень входного сигнала, либо перепад из «1» в «0». Тип активного значения определяется битами IT0, IT1 регистра TCON. При ITx = 0 запрос фиксируется по низкому уровню сигнала на соответствующем входе INTx#, а при ITx = 1 − по перепаду. Если запрос прерывания формируется
128
перепадом сигнала на входе INTx#, высокий и низкий уровни сигнала должны удерживаться не менее одного машинного цикла каждый. При запросе в виде низкого уровня сигнала активное значение должно удерживаться на входе до начала обработки данного запроса. Далее сигнал должен стать пассивным до завершения процедуры обслуживания.
2.2. Таймеры-счетчики и их использование
Микроконтроллеры MCS-51 имеют два 16-разрядных таймера-счетчика T/C0 и T/C1. При работе в качестве таймера содержимое соответствующего счетного регистра таймера-счетчика инкрементируется в каждом машинном цикле, т.е. через каждые 12 периодов резонатора. При работе в качестве счетчика содержимое счетного регистра инкрементируется под воздействием перехода из «1» в «0» внешнего входного сигнала, подаваемого на соответствующий вход микроконтроллера (T0 или T1). Содержимое счетчика будет увеличено на 1 в том случае, если в предыдущем цикле был считан входной сигнал высокого уровня, а в следующем – сигнал низкого уровня. Так как на распознавание перехода требуется два машинных цикла, то максимальная частота подсчета входных сигналов равна 1/24 частоты резонатора. На длительность перехода входных сигналов ограничений нет. Для гарантированного прочтения входного считываемого сигнала он должен удерживать значение «1» как минимум в течение одного машинного цикла.
Для управления режимами работы таймеров-счетчиков и для организации взаимодействия таймеров с системой прерываний используется два регистра специальных функций (TMOD и TCON), описание которых приводится в табл. 7.5-7.7 соответственно.
Таблица 7.5. Структура регистра TMOD и назначение его битов
Имя бита |
Номер бита |
Функция |
GATE |
TMOD.7 – T/C1 |
Управление блокировкой. Если бит ус- |
|
(TMOD.3 – T/C0) |
тановлен, то таймер-счетчик x разре- |
|
|
шен до тех пор, пока на входе INTx вы- |
|
|
сокий уровень, и бит TRx установлен. |
|
|
Если бит сброшен, то T/C разрешается, |
|
|
как только бит управления устанавли- |
|
|
вается. |
|
|
Если бит сброшен, то T/C разрешается, |
|
|
как только бит управления устанавли- |
|
|
|
|
|
129 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
вается. |
||
С/T |
|
|
TMOD.6 – T/C1 |
|
Бит выбора режима таймера или счет- |
|||
|
|
|
(TMOD.2 – T/C0) |
|
чика. Если бит сброшен, то работает |
|||
|
|
|
|
|
|
таймер. Если бит установлен, то рабо- |
||
|
|
|
|
|
|
тает счетчик. |
||
M1 |
|
|
TMOD.5 – T/C1 |
|
Биты режимов работы (M1, M0). |
|||
|
|
|
(TMOD.1 – T/C0) |
|
|
|
|
|
M0 |
|
|
TMOD.4 – T/C1 |
|
Биты режимов работы. (M1, M0). |
|||
|
|
|
(TMOD.0 – T/C0) |
|
|
|
|
|
|
|
|
Таблица 7.6. Режимы работы таймеров-счетчиков |
|||||
|
|
|
|
|
|
|
|
|
M1 |
|
|
M0 |
|
|
Режим работы |
|
|
0 |
0 |
|
Таймер 8048. TLx работает как 5-битный предде- |
|
|
|||
|
|
|
|
литель. |
|
|
|
|
0 |
1 |
|
16-битный таймер-счетчик. THx и TLx включены |
|
|
|||
|
|
|
|
последовательно. |
|
|
||
1 |
0 |
|
8-битный |
автоперегружаемый таймер-счетчик. |
|
|
||
|
|
|
|
THx хранит значение, которое должно быть пере- |
|
|
||
|
|
|
|
гружено в TLx каждый раз по переполнению. |
|
|
||
1 |
1 |
|
Таймер-счетчик 1 останавливается. Таймер- |
|
|
|||
|
|
|
|
счетчик 0: TL0 работает как 8-битный таймер |
|
|
||
|
|
|
|
счетчик, и его режим определяется управляющи- |
|
|
||
|
|
|
|
ми битами таймера 0. TH0 работает только как 8- |
|
|
||
|
|
|
|
битовый таймер, и его режим определяется управ- |
|
|
||
|
|
|
|
ляющими битами таймера 1. |
|
|
||
Таблица 7.7. Структура регистра TCON и назначение его битов |
||||||||
|
|
|
|
|
|
|
||
Имя бита |
|
|
Номер бита |
|
Функция |
|
||
TF1 |
|
|
TCON.7 |
Флаг переполнения таймера-счетчика 1. |
|
|||
|
|
|
|
|
Устанавливается аппаратно при перепол- |
|
||
|
|
|
|
|
нении таймера-счетчика 1. |
|
||
|
|
|
|
|
Сбрасывается также аппаратно при об- |
|
||
|
|
|
|
|
служивании прерывания. |
|
||
TR1 |
|
|
TCON.6 |
Бит управления таймера-счетчика 1. |
|
|||
|
|
|
|
|
Устанавливается / сбрасывается про- |
|
||
|
|
|
|
|
граммой для запуска / останова таймера- |
|
||
|
|
|
|
|
счетчика 1. |
|
|
|
130 |
|
|
|
|
|
TF0 |
TCON.5 |
Флаг переполнения таймера-счетчика 0. |
|
|
|
Устанавливается аппаратно при перепол- |
|
|
|
нении таймера-счетчика 0. Сбрасывается |
|
|
|
также аппаратно при обслуживании пре- |
|
|
|
рывания. |
|
TR0 |
TCON.4 |
Бит управления таймера-счетчика 0. |
|
|
|
Устанавливается / сбрасывается |
про- |
|
|
граммой для запуска / останова таймера- |
|
|
|
счетчика 0. |
|
Управление запуском/остановом таймеров-счетчиков определяется би-
тами GATE, TRx и уровнем сигнала на входе INTx (P3.2 – INT0#, P3.3 – INT1#). При GATE = 0 пуск/останов осуществляется только установкой/сбросом бита TRx, независимо от состояния на входе INTx. Такой режим обычно используется, когда нам нужно формировать задержки или временные интервалы заданной длительности.
При GATE = 1 пуск/останов также осуществляется установкой/сбросом бита TRx. Однако при этом таймер будет считать сигналы тактового генератора только в том случае, когда на его входе INTx будет присутствовать сигнал единичного уровня. Этот режим используют в случае измерения длительности какого-либо импульса. С этой целью таймер-счетчик устанавливают битом С/Tx в режим таймера (т.е. на его вход поступают импульсы с предделителя на 12), сбрасывают в «0» регистра TLx и THx, устанавливают GATE и TRx в «1», а измеряемый импульс положительной полярности подают на вход INTx. Если тактовая частота равна 12 МГц, т.е. на вход таймера подаются импульсы с частотой 1 МГц, то длительность измеряемого импульса в микросекундах равна числу, которое будет в TLx и THx после окончания импульса.
Для таймеров определено 4 режима (табл. 7.6). Однако наибольшую практическую ценность представляют всего два из них – второй и третий. В первом режиме имеет место 13-битный счетный таймер, в котором регистр THx работает как 8-разрядный счетчик, а регистр TLx используется как 5- битный предделитель. Четвертый режим экзотический: 16-разрядный таймерсчетчик T/С0 превращается в один 8-разрядный счетчик и в один 8- разрядный таймер, таймер 1 в этом режиме блокирован так, как если бы бит TR1 был сброшен.
Во втором режиме (M1= 0, M0 =1) как T/С0, так и T/С1 работают одинаково. Каждый из импульсов, поступающих на вход T/ Cx, увеличивает на 1 содержимое регистра TLx. Когда происходит переполнение последнего (т.е.