Основы микропроцессорной техники (А.В. Шарапов, 2008 г., 103 с.)

ЛАБОРАТОРНАЯ РАБОТА № 1. Программная модель и система команд МК51
Цель работы. Целью лабораторной работы является приобретение навыков использования ассемблера, редактора связей и эмулятора при формировании и отладке прикладных программ для однокристальных микроконтроллеров семейства MCS-51.
Программа работы
1. Скопировать для выполнения лабораторных работ файлы из директории МК51 в свою рабочую папку. Рассчитав номер варианта (от N=1 до N=10), создать программу TEST.ASM:
; Программа тестирования ассемблера
MASC EQU N
DB 11111111B,377Q,255,0FFH
DB “BEGIN”
DB RS1,PSW.4,0D0H.4,0D4H
DW 0,1234H,1000
ORG 30H
1LABEL: SJMP $
ORL A,#MASC
M1: CJNE A,P1,M1
STRT CNT
MOV TH1,#HIGH(NOT(10000)+1)
MOV TL1,#LOW(NOT(10000)+1)
MOV B,#(15*5-MASC)
ЦИКЛ: JMP ЦИКЛ
END

Прокомментировать результаты ассемблирования программы и сообщения об ошибках (создать и проанализировать файл TEST.LST). Выполняет ли ассемблер в поле операндов арифметические команды сложения, вычитания, умножения? Может ли ассемблер выполнять логические функции при обработке операндов? Как можно отредактировать текст программы, чтобы ассемблер не выдавал сообщения об ошибках?

2. Составить комментарий к работе следующей программы:
MOV R7,#16
MOV R0,#20H
MOV R1,#3FH
M1: MOV A,@R0
MOV @R1,А
INC R0
DEC R1
DJNZ R7,M1
SJMP $
END
Пояснить результаты трансляции команд, размещенных в 8 и 9-й строках программы. Что изменится, если вместо SJMP $ записать команду AJMP $ или LJMP $?
Проверить работу программы на эмуляторе, предварительно заполнив массив ячеек резидентной памяти данных с 20H по 2FH числами 00,11,22,33,44,55,66,77,88,99,AA,BB,CC,DD,EE,FF.
3. Создать файл TABLO.ASM. Проассемблировать программу и проанализировать ее листинг. Сформировать файл TABLO.HEX, загрузить программу в эмулятор и запустить на выполнение. Объяснить изменение содержимого ячеек РПД при выполнении программы. Что отображают команды, расположенные в окне памяти программ по адресам 20Н-2FH?
4. В режиме Path Code ввести в эмулятор программу умножения 16-разрядного двоичного числа (DPTR) на 8-разрядное (байт в R0). 24-разрядный результат формируется в регистрах: R1 (старший байт), R2 (средний байт), R3 (младший байт).
MOV A,DPL
MOV B,R0
MUL AB
MOV R3,A
MOV R7,B
MOV A,DPH
MOV B,R0
MUL AB
ADD A,R7
MOV R2,A
CLR A
ADDC A,B
MOV R1,A

Проверить работу программы в пошаговом режиме на тестовом примере (например, множимое — 10000=2710Н, множитель — 100=64Н, произведение — 1000000=0F4240H). Пояснить алгоритм формирования произведения. Оценить время выполнения программы.

5. Битовый процессор МК51 позволяет установить, очистить или проинвертировать любой программно доступный бит, проводить с битами логические операции И, ИЛИ (один из операндов в этом случае должен находиться в триггере переноса С), осуществлять условные переходы по нулевому или единичному состоянию тестируемого бита.

Разработать и отладить на эмуляторе индивидуальное задание (одно из следующих в соответствии со своим вариантом):
1) бит Р2.0 должен обнулиться, если не менее чем на пяти линиях порта Р1 установлены нулевые уровни;
2) на линии Р1.7 сформировать бит контроля четности для семиразрядного сообщения, выводимого на младшие линии этого порта из регистра В;
3) бит Р0.7 должен обнулиться, если на любых пяти из семи оставшихся линий этого порта установлены нулевые уровни;
4) бит Р0.7 должен соответствовать логической функции F=X⊕Y, где X и Y — сигналы, подаваемые на младшие линии этого порта;
5) в ячейки 20Н-27Н РПД занесена информация о состоянии 64 датчиков. Содержимое порта Р0 должно обнулиться, если число датчиков с единичным уровнем сигнала превышает число датчиков с нулевым уровнем;
6) в ячейки 20Н-2FH РПД занесена информация о состоянии 128 датчиков. Сформировать на линии Р1.0 прямоугольные импульсы, если число датчиков с нулевым уровнем превышает 10;
7) в регистре DPTR сформировать разность двухбайтового числа (содержимое портов Р0 и Р1) и однобайтового (содержимое порта Р2);
8) разработать программу, формирующую в регистре DPTR дополнительный код числа минус 5000 (двухбайтовый формат);
9) получить на линиях порта Р1 эффект бегущей единицы со сменой направления;
10) заполнить все четные элементы РПД логическими нулями, а нечетные — единицами.

Контрольные вопросы
• Чему равно содержимое регистров МК51 после системного сброса?
• Чем отличаются друг от друга команды MOV R5,7 и MOV 5,#7?
• Транслировать команду JBC F0,$-7.
• Как выполняется команда MUL AB?
• С помощью каких команд можно прочитать в регистр В информацию с датчиков, подключенных к линиям порта Р1?
• Как в режиме окна заполнить исходной информацией массив РПД с адресами 70Н…7FH?

ЛАБОРАТОРНАЯ РАБОТА № 2. Таймеры и система прерываний MК51
Цель работы. Целью лабораторной работы является исследование работы таймеров/счетчиков событий в различных режимах и системы прерываний микроконтроллеров семейства MCS-51 с помощью персонального компьютера и программных средств отладки.
Программа работы
1. Зафиксировать содержимое регистров, флагов и ячеек памяти микроконтроллера после загрузки эмулятора (avsim51 –c1 a). Чему равно содержимое указателя стека? Разрешены ли прерывания? На какой режим настроены таймеры? Какая установлена скорость выполнения программы?
2. Составить комментарий к программе преобразования двоичного числа, задаваемого на линиях порта Р1, в двоичнодесятичное содержимое регистра DPTR:
MOV A,P1
MOV B,#100
DIV AB
MOV DPH,A
MOV A,#10
XCH A,B
DIV AB
SWAP A
ORL A,B
MOV DPL,A
В режиме Patch Code ввести текст программы в эмулятор и проверить ее работу в пошаговом (F10) режиме. Как выполняется команда деления? Какие флаги PSW изменяются при выполнении программы?
3. Записать в первые две ячейки памяти программ программу, состоящую из одной команды SJMP 0 (80 FE), и запустить ее на выполнение в автоматическом режиме. Почему не работают таймеры Т/С0 и Т/С1?
Установив TR0=1, проверить работу Т/С0 в режиме таймера (скорость счета изменяется клавишей F5) и счетчика событий (TMOD.2=1). Перепады на линии Т0 (Р3.4) формировать с помощью клавиши Insert. В каком диапазоне изменяется содержимое регистров TL0 и TH0 при работе T/C0 в режиме 0? Когда устанавливается флаг TF0?
Проверить работу Т/С1 в режиме 1. Установив TR1=1 и GATE1=1, проверить возможность аппаратного управления работой таймера уровнем сигнала на входе INT1 (P3.3).
Перевести Т/С0 в режим 2 (8-битный автоперезагружаемый таймер/счетчик). Установив (ТН0)=0D5H, проследить работу Т/С0 в режиме таймера и счетчика событий.
Перевести Т/С0 в режим 3 (TL0 и ТН0 функционируют как два независимых 8-битных счетчика). Возможно ли в этом режиме использование прерываний от Т/С1?
4. В режиме Patch Code ввести в эмулятор текст программы, при реализации которой регистры R0, R1, R2, R3, R4 фиксируют число выполнения подпрограмм обслуживания прерываний от различных источников, а аккумулятор работает в режиме двоичного счетчика:
ORG 00H
INC A
SJMP 0
ORG 03H
INC R0
RETI 43
ORG 0BH
INC R1
RETI
ORG 13H
INC R2
RETI
ORG 1BH
INC R3
RETI
ORG 23H
INC R4
CLR SCON.0
CLR SCON.1
RETI
Разрешить прерывания по входу INT0, установив в режиме окна ЕА=1 и ЕХ0=1. При работе программы в автоматическом режиме исследовать различие механизма обработки прерывания при IT0=0 и IT0=1 (по уровню и по срезу Р3.2).
Разрешить прерывания и по входу INT1. При IT0=IT1=0 установить INT0=INT1=0 и запустить программу. Почему не выполняется подпрограмма обслуживания прерываний по входу INT1? Повторить работу программы, установив в регистре приоритетов прерываний РХ1=1.
Разрешить все прерывания. Установить TR0=TR1=IT0=IT1=1. Запустить программу на выполнение. Убедиться, что периодически выполняются подпрограммы обслуживания прерываний по переполнению таймеров. Что происходит при изменении содержимого буферных регистров приемника и передатчика последовательного порта SBUF? Проимитировать внешние прерывания по входам INT0 и INT1.
Остановить выполнение программы. Установить все флаги прерываний (IE0, IE1, TF0, TF1, RI и TI). Продолжить выполнение программы в пошаговом режиме. Объяснить поведение микроконтроллера. В какой момент сбрасываются флаги IE0, IE1, TF0, TF1(при передаче управления подпрограмме обслуживания или по команде RETI)? Повторить эксперимент, установив в регистре приоритетов PS=1. Объяснить новую последовательность выполнения подпрограмм обслуживания прерываний. Что будет, если при выполнении подпрограммы обслуживания прерываний пришел запрос прерываний с большим приоритетом? Нужно ли сбрасывать программно флаги TF0, TF1, RI и TI?
5. Испытать на эмуляторе работу следующей программы, формирующей в аккумуляторе двоично-десятичный код длительности импульса (единицы и десятые доли мс) на входе INT0:
ORG 00H ; RESET
MOV TH0,#156 ; Загрузка регистров Т/С0
MOV TL0,#0
MOV TMOD,#0AH ; Настройка Т/С0 на режим 2
SJMP M1
ORG 0BH ; Вектор прерывания от Т/С0
ADD A,#1 ; Подпрограмма обслуживания
DA A ; прерываний
RETI ; Возврат из подпрограммы
M1: CLR A ; Очистка аккумулятора
MOV IE,#82H ;Разрешение прерываний от Т/С0
SETB TR0 ; Запуск таймера Т/С0
SJMP $ ; Зацикливание программы
Начиная с адреса 0ВН записана подпрограмма обслуживания прерываний по таймеру Т/С0. После каждого переполнения таймера (т.е. через каждые 100 мкс при частоте кварца 12 МГц) содержимое двоично-десятичного счетчика, организованного в аккумуляторе, увеличивается на единицу. Основная программа начинается с нулевой ячейки, при выполнении обходит ячейки, занятые подпрограммой, и заканчивается командой SJMP $.
Таймер Т/С0 настраивается на режим 8-разрядного счетчика с автоперезагрузкой и возможностью аппаратного запуска логической 1 на входе INT0 (перед запуском программы на этом входе надо зафиксировать логический 0). В регистр ТН0 загружается дополнительный код числа минус 100.
Проимитировав на входе INT0 импульс длительностью 10 мс, измерить секундомером реальное время работы программы при наивысшей скорости (HI). Во сколько раз скорость воспроизведения программы с помощью эмулятора отличается от реального масштаба времени?
6. Апробировать программу, реализующую на микроконтроллере К1830ВЕ51 электронные часы с индикацией часов, минут и секунд реального времени. Все операции по решению поставленной задачи выполняет подпрограмма обслуживания прерываний. Остальное время контроллер находится в режиме зацикливания основной программы.
; Начальная установка и запуск часов в 00 00 00

ORG 00H
MOV P0,#0 ; Cчетчик часов
MOV P1,#0 ; Cчетчик минут
MOV P2,#0 ; Cчетчик секунд
MOV R0,#100 ; Начальная загрузка
MOV R1,#100 ; счетчиков генератора
MOV TH1,#9CH ; секундных импульсов
MOV TMOD,#20H ; Т/С1 в режиме 2
MOV IE,#88H ; Разрешение
; прерываний от Т/С1
SETB TR1 ; Старт таймера Т/С1
MAIN: SJMP MAIN ; Основная программа
; Подпрограмма обслуживания прерываний
ORG 1BH ; Вектор прерывания
DJNZ R0,EXIT ; Задержка в одну
MOV R0,#100 ; секунду
DJNZ R1,EXIT
MOV R1,#100
JNB T0,M1 ; Коррекция минут
JNB T1,M2 ; Коррекция часов
MOV A,P2 ; Счетчик секунд
ADD A,#1
DA A
MOV P2,A
CJNE A,#60H,EXIT
MOV P2,#0
M1: MOV A,P1 ; Счетчик минут
ADD A,#1
DA A
MOV P1,A
CJNE A,#60H,EXIT
MOV P1,#0
M2: MOV A,P0 ; Счетчик часов
ADD A,#1
DA A
MOV P0,A
CJNE A,#24H,EXIT
MOV P0,#0
EXIT: RETI ; Возврат из п/п прерываний
END

При отладке программы с помощью эмулятора ход часов замедлен. Для ускорения процессов рекомендуется в регистры R0 и R1 загружать число 3, а не 100. После старта программы производится начальная загрузка регистров секундной задержки, а также счетчиков секунд, минут и часов. Таймер/счетчик Т/С1 настраивается на работу в режиме 2, когда TL1 работает как 8-битовый автоперезагружаемый таймер, а TH1 хранит значение, которое перезагружается в TL1 каждый раз по переполнении. Разрешаются прерывания от Т/С1, и после его запуска они происходят через каждые 100 машинных циклов (100 мкс при частоте кварца 12 МГц), вызывая выполнение подпрограммы обслуживания с начальным адресом 1ВН. Через 10000 прерываний, которые подсчитывают счетчики на регистрах R0 и R1, т.е. ежесекундно, меняется содержимое порта Р2, определяющее показания цифрового индикатора секунд.
Двоично-десятичный счетчик минут реализован c помощью порта Р1, аналогичный счетчик часов — с помощью Р0. При включении контроллера счетчики сбрасываются и на цифровые индикаторы заносятся нули. Установка реального времени производится в определенной последовательности. Сначала держат лог. 0 на входе Т1 до тех пор, пока индикаторы покажут требуемое число часов. Затем держат лог. 0 на входе Т0 до тех пор, пока не высветятся нужные цифры минут. Коррекция осуществляется подачей секундных импульсов на счетчики часов и минут.
Оценить минимальное и максимальное время выполнения подпрограммы обслуживания прерываний.
Контрольные вопросы
• Разрешены ли прерывания после системного сброса?
• Может ли быть прервано выполнение программы обработки прерывания с высоким уровнем приоритета?
• Транслировать команду JB ТF0,$+5.
• Что происходит при выполнении команды CJNE A,#40,M1?
• Какой флаг устанавливается после выполнения команды MOV SBUF,B?
• Какими командами можно загрузить в Т/С0 дополнительный код числа 10000?

ОТПРАВИТЬ ЗАЯВКУ
(уточните наименование работ: ТКР, ЛР, ККР, КП, ЭКЗ,
2 последние цифры пароля
к какому числу нужно выполнить работы)

Имя

Email



© 2009-2024 TusurBiz