
- •24 Содержание
- •1. Введение
- •2. Содержание лекционного курса
- •3. Список рекомендуемой литературы
- •4. Компьютерные обучающие программы
- •5. Упражнения по решению задач
- •5.1. Назначение выводов, программная модель мк51
- •5.2. Типы и форматы команд мк51
- •5.3. Примеры выполнения команд мк51
- •5.4. Примеры программ обработки данных
- •Отладка прикладных программ для микроконтроллера мк51 ( Лабораторная работа )
- •7. Варианты заданий для контрольной работы №1
Отладка прикладных программ для микроконтроллера мк51 ( Лабораторная работа )
6.1. Целью лабораторной работы является приобретение навыков использования ассемблера, редактора связей и эмулятора для формирования и отладки прикладных программ для однокристальных микроконтроллеров семейства МК51, а так же экспериментальное исследование работы таймеров/счетчиков в различных режимах и системы прерываний (директория МК51).
6.2. C точки зрения программиста микроконтроллер представляет набор регистров и ячеек памяти с конкретными адресами и обозначениями. Резидентную память данных составляют четыре банка регистров общего назначения, выбор которых осуществляется установкой и сбросом битов RS1 и RS0 в PSW, 128 программно управляемых флагов пользователя (регистры с адресами 20H-2FH) и регистры с адресами 30H-7FH, которые можно использовать как ОЗУ пользователя или стек. К адресному пространству РПД непосредственно примыкают адреса регистров специальных функций.
Битовый процессор микроконтроллера позволяет установить, очистить или инвертировать любой программно доступный бит, проводить с битами логические операции И, ИЛИ (один из операндов в этом случае должен находиться в триггере переноса С), осуществлять условные переходы по нулевому или единичному состоянию тестируемого бита.
Символические обозначения программно доступных битов некоторых регистров приведены в таблице.
Регистр |
Бит 7 |
Бит 6 |
Бит5 |
Бит4 |
Бит 3 |
Бит 2 |
Бит 1 |
Бит 0 | |
P3 |
RD |
WR |
T1 |
T0 |
INT1 |
INT0 |
TxD |
RxD | |
PSW |
C |
AC |
F0 |
RS1 |
RS0 |
OV |
- |
P | |
TCON |
TF1 |
TR1 |
TF0 |
TR0 |
IE1 |
IT1 |
IE0 |
IT0 | |
IE |
EA |
- |
- |
ES |
ET1 |
EX1 |
ET0 |
EX0 | |
IP |
- |
- |
- |
PS |
PT1 |
PX1 |
PT0 |
PX0 | |
SCON |
SM0 |
SM1 |
SM2 |
REN |
TB8 |
RB8 |
TI |
RI |
6.3. С помощью любого текстового редактора записать текст программы TABLO.ASM :
MOV R0,#20H ; начальный адрес массива в РПД
MOV DPTR,#20H ; адрес таблицы символов в ПП
MOV R7,#32 ; число элементов массива
LCALL TEXT ; вызов подпрограммы TEXT
SJMP $ ; искусственный останов
TEXT: CLR A ; очистка аккумулятора
MOVC A,@A+DPTR ; пересылка символа в А
MOV @R0,А ; пересылка символа в массив РПД
DJNZ R6,$ ; временная задержка
INC R0 ; увеличение указателей памяти
INC DPTR ; на единицу
DJNZ R7,TEXT ; организация цикла обработки
RET ; массива
ORG 20H
DB ' DEAR FRIEND! WELCOME TO TOMSK'
END
6.4. Вызвать ассемблер командой а8051, следующим образом отвечая на его запросы:
sourse file [.msa/s03]=TABLO.ASM
list file [.lst}=TABLO
object file=<Enter>
options=<Enter>
Будут сформированы файлы TABLO.LST и TABLO.R03.
Вызвать редактор связей:
xlink -c8051 TABLO -o TABLO.HEX
Редактор связей сформирует файл TABLO.HEX.
Вызвать эмулятор и загрузить в него программу:
avsim51 -c1 a
Load Avoset
Enter filename: TABLO.HEX
Запустить программу на выполнение (клавиша F1) и объяснить изменение содержимого ячеек памяти при ее выполнении.
6.5. Составить комментарий к работе следующей программы:
1 0000 7F32 MOV R7,#50
2 0002 781C MOV R0,#28
3 0004 797F MOV R1,#127
4 0006 C6 M1: XCH A,@R0
5 0007 C7 XCH A,@R1
6 0008 C6 XCH A,@R0
7 0009 08 INC R0
8 000A 19 DEC R1
9 000B DFF9 DJNZ R7,M1
10 000D 80FE SJMP $
11 000F END
Пояснить результаты трансляции команд, размещенных в 9 и 10 строках программы. Что изменится, если вместо SJMP $ записать команду AJMP $ или LJMP $ ?
Проверить работу программы на эмуляторе, предварительно заполнив массив ячеек резидентной памяти данных с 28 по 127 числами от 0 до 99.
6.6. Организовать системный сброс контроллера (Reset Cpu). Обнуляется ли содержимое ячеек РПД при сбросе? Какое значение записывается в указатель стека?
Записать в первые две ячейки памяти программ программу, состоящую из одной команды 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 ?
6.7. Испытать на эмуляторе работу следующей программы, формирующей в аккумуляторе двоично-десятичный код длительности импульса (единицы и десятые доли мс) на входе INT0:
ORG 00H ; RESET
MOV TH0,#9CH ; Загрузка регистров Т/С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). Во сколько раз скорость воспроизведения программы с помощью эмулятора отличается от реального масштаба времени?
Разработать и отладить на эмуляторе индивидуальное задание (одно
из следующих в соответствии со своим вариантом):
1) бит Р2.0 должен обнулиться, если не менее, чем на пяти линиях порта Р1 установлены нулевые уровни;
2) на линии Р1.7 сформировать бит контроля четности для семиразрядного сообщения, выводимого на младшие линии этого порта из регистра В;
3) бит Р0.7 должен обнулиться, если на любых пяти из семи оставшихся линиях этого порта установлены нулевые уровни;
4) бит Р0.7 должен соответствовать логической функции F=XY+ZVS+QWR, где X,Y,Z,V,S,Q,W,R - сигналы, подаваемые на младшие линии этого порта;
5) в ячейки 20Н-27Н РПД занесена информация о состоянии 64 датчиков. Содержимое порта Р0 должно обнулиться, если число датчиков с единичным уровнем сигнала превышает число датчиков с нулевым уровнем;
6) в ячейки 20Н-2FH РПД занесена информация о состоянии 128 датчиков. Сформировать на линии Р1.0 прямоугольные импульсы, если число датчиков с нулевым уровнем превышает 10;
7) в ячейках 0,1,2 сформировать произведение двухбайтового числа (содержимое портов Р0 и Р1) на однобайтовое (содержимое порта Р2);
8) разработать программу, формирующую в регистре DPTR дополнительный код числа минус 5000 (двухбайтовый формат).
9) получить на линиях порта Р1 эффект бегущей единицы со сменой направления.
10) заполнить все четные элементы РПД логическими нулями, а нечетные - единицами.
6.9. Ответьте на контрольные вопросы:
а) назовите источники прерываний программы в МК51 в порядке убывания их приоритетов и их вектора. Как можно присвоить указанному источнику прерываний высший приоритет?
б) чему равно содержимое регистров МК51 после системного сброса?
в) чем отличаются друг от друга команды MOV 5,7 и MOV 5,#7 ?
г) отличаются ли с точки зрения ассемблера операнды RS0, 0D3H, PSW.3?
6.10. Выполните контрольную работу №1. Разработайте программу в соответствии с вашим вариантом (раздел 7) и отладьте ее с помощью эмулятора. Подготовьте листинг программы с подробным комментарием (подобно примерам 16-6, 16-7, 16-9 учебного пособия).
6.11. Файл отчета с комментариями по ходу выполнения работы, ответами на контрольные вопросы и разработанными программами переслать в Томск для зачета выполнения лабораторной работы и контрольной работы №1.