close

Вход

Забыли?

вход по аккаунту

?

Vilesov

код для вставкиСкачать
Федеральное агенТство по образованию
Государственное образовательное учреждение
высшего профессионального образования
Санкт-Петербургский государственный университет
аэрокосмического приборостроения
МИКРОКОНТРОЛЛЕРЫ
В АУДИОВИЗУАЛЬНОЙ ТЕХНИКЕ
Методические указания
к выполнению лабораторных работ
Санкт-Петербург
2008
1
Составитель кандидат технических наук, доцент Л. Д. Вилесов
Рецензент кандидат технических наук, доцент В. С. Павлов.
Методические указания содержат рекомендации по подготовке и методику выполнения лабораторных работ по дисциплине
«Микроконтроллеры в аудиовизуальной технике», изучаемой
студентами специальности 201400 по направлению 002031 «Радиотехника».
Лабораторные работы выполняются в дисплейном классе на
персональных ЭВМ с использованием алгоритмического языка
Аssembler и моделирующего пакета прикладных программ
Avsim-51.
предназначены для студентов очного факультета и могут быть
рекомендованы для студентов других специальностей, изучающих архитектуру микроконтроллеров и их программирование.
Методические указания подготовлены к публикации кафедрой «Радиопередающих и телевизионных систем» по рекомендации редакционно-издательского совета Санкт-Петербургского
государственного университета аэрокосмического приборостроения.
Редактор В. П. Зуева
Верстальщик С. Б. Мацапура
Сдано в набор 14.03.08. Подписано к печати 25.04.08.
Формат 60×84 1/16. Бумага офсетная. Печать офсетная. Усл.-печ. л. 2,5.
Уч.-изд. л. 2,6. Тираж 50 экз. Заказ №
Редакционно-издательский центр ГУАП
190000, Санкт-Петербург, Б. Морская ул., 67
© ГУАП, 2008
2
ЛАБОРАТОРНАЯ РАБОТА № 1
ПРОСТЕЙШИЕ ОПЕРАЦИИ С РЕГИСТРАМИ РОН,
АККУМУЛЯТОРОМ И РЕГИСТРОМ PSW
МИКРОКОНТРОЛЛЕРА
Цель работы: изучение языка Assembler, его применение при
выполнении простейших команд с использованием основных регистров микроконтроллера МК51, а также оформление программы в формате Assembler и ее отладка в симуляторе Avsim-51.
1. МЕТОДИЧЕСКИЕ УКАЗАНИЯ
Ассемблер как язык символического кодирования
Основные требования к программе на языке Ассемблер. Для
написания программы на языке Assembler приняты следующие
основные положения:
– используются буквы латинского алфавита и цифры,
– имена (идентификаторы) – это символы ASCII-кода,
– разделители – (:;,).
– каждая команда располагается на одной строке,
– максимальная длина строки 132 символа (лучше <80),
– максимальна длина слова 31 символ,
– комментарий располагается после точки с запятой и может
занимать всю строку, можно использовать для комментария русский алфавит,
– нет различия между строчной и заглавной буквой (за исключением метки).
Текстовый редактор – любой, работающий с ASCII-символами.
Формат программы
Каждая строка имеет 4 поля, разделенных хотя бы одним пробелом (лучше клавишей Tabl):
– поле метки (метка необязательна, но если есть, то заканчивается «: »);
– для микроконтроллера МК51 двоеточие может и отсутствовать, но тогда метка должна обязательно начинаться с первой
3
колонки; метка может ставиться в любой колонке, если ее имя
оканчивается двоеточием.
– поле операции (мнемоники), например, MOV, ADD, MUL,
DIV и т. д.,
– поле операндов содержит (два, один или ни одного операнда);
примеры команд, у которых нет операндов: NOP (нет операций),
RET (возврат из подпрограммы в основную программу: выгружает старший и младший байты PC-программного счетчика из стека), RETI (возврат из подпрограммы обработки прерывания).
– поле комментариев (начинается после символа точка с запятой ‘;’).
Метка – символ адреса команды, в строке которой расположена метка.
Имя метки связано с 16-битным адресом, где расположен 1-й
байт помеченной команды. Имя метки может появиться только
один раз.
Директивы ассемблера
Директивы или псевдокоманды указывают программе
Аssembler порядок ассемблирования, размещают в программной
памяти (ПЗУ) информацию, присваивают численные значения
символическим именам, резервируют память и т. д.
Директива располагается в поле команд, в поле метки наименование может отсутствовать.
Примеры.
Директива EQU − присвоить:
R8
EQU
08h
; идентификатору R8:=08h, где := знак присвоения,
h – обозначение представления числа в шестнадцатиричном коде.
Директива ORG − начало, указывает адрес следующей выполняемой команды:
ORG
200H
Директива END
; 200H − адрес следующей выполняемой команды.
; конец программы (может отсутствовать).
Регистр аккумулятора А
Все операции в МК выполняются в арифметико-логическом
устройстве (АЛУ). Результат операции сохраняется в аккумуляторе А (8-разрядном регистре).
Регистр PSW (Program Status Word)
Регистр PSW – 8-разрядный регистр словосостояния или регистр флагов отображает состояние АЛУ при выполнении программы.
4
Биты PSW
Обозначения
7
С
6
АС
5
F0
4
RS1
3
RS0
2
OV
1
–
0
P
Назначение битов PSW.0 – PSW.7:
С (бит 7) – флаг переноса (заема) из бита 7 аккумулятора;
АС (бит 6) – флаг дополнительного переноса (заема) из бита 3 аккумулятора А при образовании младшего полубайта (D0..D3) в А;
F0 (бит 5) – флаг состояния, определяемый пользователем;
RS1, RS0 – биты-указатели банка рабочих регистров:
RS1 RS0
00
01
10
11
Банк-0
Банк-1
Банк-2
Банк-3
OV (бит 2) – флаг переполнения указывает состояние переполнения аккумулятора; P (бит 0) – бит паритета – четного числа 1-ц
в аккумуляторе.
Оформление программы и работа в симуляторе SIM-51
Для того чтобы написать программу на языке Assembler необходимо открыть файл Sim51.exe, выполнив при этом следующие
действия.
1. Выбрать файл для редактирования с расширением asm.
Для этого в главном меню выбрать Файл\Файл и записать имя
нового файла с расширением asm, например, а.asm.
Предварительно, выбрав в меню Файл\Директорий, убедитесь, что находитесь в директории (папке), где будет размещаться редактируемый файл.
Для выбора файла, редактируемого ранее, выполните Файл\
Файл, далее клавиша Enter и в открывшемся окне клавишамистрелками выбрать нужный файл.
Если файл открыт или выбран правильно, то внизу окна будет
прописан путь к редактируемому файлу. Иначе появляется запись: Файл не выбран.
Выход в главное меню – ESC.
2. Написать новый или отредактировать старый файл.
Для этого войти в Редактор, при этом открывается окно редактирования файла (редактор текста, файл Ne.com). Написать и
отредактировать программу, используя клавишу F1 – Help.
Файловые команды редактора1.
5
6
MOV A,R0\
MOV R0\,R0"
no memory
no memory
no memory
no
no
no
no
no
0219H
021BH
021EH
021FH
0220H
0221H
0222H
0223H
0224H
0225H
Ints A
En 0
Pr
SBUF:
S T1
0 0
0 0
In
TH/TL
00 00
00 00
Data Space
0020 00 00
0028 00 00
0030 00 00
0038 00 00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
________
________
________
________
Data Space
00:
0000 21 00 00 00 00 00 00 00 !_______
0008 21 00 00 00 00 00 00 00 !_______
0010 00 00 00 00 00 00 00 00 ________
0018 00 00 00 00 00 00 00 00 ________
п FF FF FF FF
п 21:!
RB:11
п 21:!
B:00
R4\00
R6\00
R5\00
R7\00
Timers
T0:
T1:
G/T/M1/M0
00 0 0
00 0 0
00:
FF:
P2
FF:
P3
FF:
11111111
11111111
11111111
11111111
11111111
SCON:00000000
Ports
P0
11111111
FF:
11111111
P1
11111111
X1 T0 X0 Edg IT IE
0 0 0
X0: 0 0
0 0 0
X1: 0 0
Out PCON:0xxxxxxx
TF/TR
0 0
0 0
>Clear, Fill, Move, Search Memory
Memory Patch Quit Reset Set setUp View eXecute --space-- ESC to screen
memory
memory
memory
memory
memory
RS0
R0,#21H
RS0
RS1
R0\,#22H
DP:0000
R0\00:
R1\00:
R2\00
R3\00
SETB
MOV
CLR
CLR
MOV
020EH
0210H
0212H
0214H
0216H
data
D3 78 21
00 00 00
00 00 00
addr
PC:020A п C2
SP: 07
п 21
00
R0,#21H
RS1
RS0
R0,#21H
MOV
SETB
CLR
MOV
0206H
0208H
020AH
020CH
V1.31
FLAGS
SCL SPD DSP SKP CURSOR
AC F0 OV P OFF HI ON OFF
MENU
0 0
0
0
Cycles: 5
8051/8751 AVSIM 8051 Simulator/Debugger
CPU REGISTERS
C Accumulator
0 00100001 : 21:!
OPERATION
0200H MOV A,#21H
0202H MOV R0,#21H
0204H SETB RS0
LABEL
F3 E – Сохранение и выход.
F3 S – Сохранить и не выходить. Сохраните файл? (Y или N).
F3 Q – Выход без сохранения. Изменения (замены) будут потеряны (Y или N).
F3 N – Редактировать новый файл.
F3 X – Два окна редактирования.
F3 W – Сохранение текста до курсора.
F3 A – Добавить в конец редактируемого файла другой файл.
F3 C – Закрыть файл. Закрыть файл и открыть новый? (Y или
N).
3. Файл может быть написан также в любом другом текстовом
редакторе, например, в документе Блокнот, но сохранен с расширением asm.
4. Выполнить ассемблирование файла и преобразовать его в
HEX – формат.
Для этого в главном меню выбрать: Компиляция\Ассемблер.
В результате ассемблирования получаем объектный модуль-файл
с расширением obj. Если он не содержит ошибок, то выбрать Построитель в меню Компиляция.
При наличии ошибок, обнаруженных компилятором, вернутся в редактор текста и исправить ошибки. Построитель преобразует код файла с расширением obj в формат hex фирмы Intel, в
котором и будет осуществляться прожиг ячеек ПЗУ МК.
2. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
Написать программу на языке Assembler для МК-51, используя директивы EQU, ORG и мнемоники: MOV – операция пересылки и ADD – операция сложения двух чисел.
Пример оформления программы.
S
G
EQU
EQU
255
255
; идентификатору s:=255
;----------------------------------------START
; программа стартует с нулевого адреса ПЗУ
LJMP BEGIN
; безусловный переход на метку BEGIN
ORG 200H; адрес
;ячейки ПЗУ, которой соответствует метка
;BEGIN
;----------------------------------------BEGIN
; тело программы
;---------------------------------------END
7
Пояснения к программе.
1. Программа стартует с нулевого адреса с помощью команды
LGMP BEGIN;
безусловный переход на метку BEGIN (по адресу начала программы в ПЗУ);
2. Тело программа должно содержать:
• Операции пересылки чисел из ПЗУ констант в регистры нулевого банка РОН: R0 и R1.
Например, MOV R0,#S; константа, численное значение которой обозначено как S, извлекается из ПЗУ констант и пересылается в регистр R0. Символ # (решетка) – признак непосредственной адресации. Аналогично записывается команда пересылки
константы G в регистр R1.
• Операцию пересылки данных из регистра R0 в A: команда
MOV A,R0
• Операцию сложения данных: числа в регистре А (аккумулятора) с числом в регистре R1: команда
ADD A,R1;
Выбрать S и G такими, чтобы результат сложения чисел превышал 255.
Выполнить по шагам программу в с использованием симулятора МК51.
Для этого в главном меню выбрать опцию Симулятор. В открывшемся окне выбрать микроконтроллер 8051. После чего открывается окно симулятора, содержащее основные блоки микроконтроллера.
Для загрузки программы в симулятор микроконтроллера выбрать клавишами-стрелками в меню симулятора (внизу окна):
Loud\Program или для ускорения горячими клавишами: F3\L\
P. В строке Enter filename: ввести имя загружаемого файла с расширением hex.
Выполнить программу по шагам: клавиша F10 – шаг вперед,
F9 – шаг назад, F1 - выполнение всей программы. Выход из программы симулятор Quit\Exit или F3\Q\E. Отмена текущей команды: Ctrl+C.
При пошаговом выполнении наблюдать в окне симулятора
содержимое регистров: PC (Program Counter-программного счетчика), R0, R1, А и бита С (флага переноса) в регистре PSW. Обозначение скобок в табл. 1, например, (R0) расшифровывается как
«содержимое по адресу R0».
8
На стр. 6 показано содержимое окна симулятора для микроконтроллера МК51.
Таблица 1
(PC)
(адреса ячеек ПЗУ)
(R0)
(R1)
(A)
(C)
0000
3. СОДЕРЖАНИЕ ОТЧЕТА
Отчет должен содержать:
результат выполнения работы в виде распечатки программы в
форматах asm и lst, а также в виде заполненной табл. 1, отображающей процесс выполнения программы в МК-51.
Библиографический список
Основная литература:
1. Новожилов О. П. Основы микропроцессорной техники:
Учеб. пособие в двух томах. Т.1. М.: ИП РадиоСофт, 2007. 432 с.
2. Угрюмов Е. П. Цифровая схемотехника. СПб.: БХВ- СанктПетербург, 2001. 528 с.
Дополнительная литература:
3. Бородин В. Б., Шагурин М. И. Микроконтроллеры. Архитектура, программирование, интерфейс. М.: ЭКОМ, 1999. 400 с.
4. Казаченко В. Ф. Микроконтроллеры: руководство по применению 16-разрядных микроконтроллеров Intel MCS-196/296
во встроенных системах управления. М.: ЭКОМ, 1997. 688 с.
9
ЛАБОРАТОРНАЯ РАБОТА № 2
МОДЕЛИРОВАНИЕ ОПЕРАЦИЙ СЛОЖЕНИЯ
И ВЫЧИТАНИЯ В СИМУЛЯТОЕ AVSIM-51. РАБОТА
С ДАМПОМ-0 ВНУТРЕННЕГО ОЗУ МИКРОКОНТРОЛЛЕРА
Цель работы: для однобайтной шины данных микроконтроллера МК-51 написать программу сложения двухбайтных чисел
и затем программы вычитания однобайтных и вычитания двухбайтных чисел. Используя симулятор Avsim-51, промоделировать операции сложения и вычитания и отобразить результаты в
Дампе-0 внутреннего ОЗУ микроконтроллера.
1. МЕТОДИЧЕСКИЕ УКАЗАНИЯ
1.1 Сложение двухбайтных чисел
Сложить два двухбайтных числа. Например, S=4422h и
G=FFFFh, моделируя эту операцию по шагам в Avsim51.
Блок-схема алгоритма сложения двухбайтных чисел приведена на рис.1.
Пояснения к блок-схеме алгоритма сложения
Для сложения двухбайтных чисел сначала складываются
младшие байты чисел (команда ADD). Результат сложения находится в регистре аккумулятора А, а при наличии переноса еще и
в бите С регистра PSW.
Содержимое А выгружается и пересылается в регистр результата (2h+16).
Затем происходит сложение старших байтов чисел с учетом
переноса в бит С (команда ADDC). Результат сложения старших
байтов из А пересылается в регистр (1h+16).
Используется JNB PSW.7, LAB – команда условного перехода
на метку LAB (конец программы), если флаг переноса в регистре
PSW не установлен (результат сложения – двухбайтный). Иначе
перенос: (C=1) из регистра PSW пересылается в ячейку (0h+16),
фиксируя при этом трехбайтный результат операции суммирования двухбайтных чисел. В битовых операциях флаг переноса
обозначается как С.
На блок-схеме на рис.1 приняты следующие обозначения.
(А) – содержимое А;
(<S) – младший байт содержимого ячейки S;
10
S:=4422h
G:=FFFFh
Присвоение численных значений
Start
Ljmp BEGIN
Старт программы
(R2):=(<S)
(R1):=(>S)
Запись младшего и старшего
байтов числа S в регистры
(2h+8):=(<G)
(1h+8):=(>G)
Запись младшего и старшего
байтов числа G в ячейки ОЗУ
(A):=(R2)
(A)+(2h+8)
(2h+16):=(A)
Сложение младших байтов S
и G. Результат в регистре А
и бите С регистра PSW,
пересылка результата из А в
ячейку (2h+16)
(A): =(R1)
ADDC A,1h+8
(1h+16):=(A)
(B.0):=(C)
Переход на LAB,
если (С)=0
Сложение старших байтов S
и G с учетом переноса в бите
С регистра PSW. Результат в
регистре А и бите С PSW
Нет
(C)=0
JNB PSW.7, LAB
LAB
Да
(0h+16):=(B)
END
Рис. 1.Блок схема алгоритма сложения двухбайтных чисел приняты
следующие обозначения
(>S) – старший байт содержимого ячейки S;
2h+8 – адрес 10-й ячейки внутреннего ОЗУ: 2*16 0 +8;
ADDC – команда сложения однобайтных чисел с учетом переноса, хранящегося в бите С регистра PSW:
(A):=(A) + (Addres) + (C),
где (Addres) – содержимое регистра с адресом Addres.
MOV B.0,C – операция с битами: бит С регистра PSW пересылается в бит 0 регистра В, который обозначается как В.0.
11
1.2. Вычитание однобайтных чисел
Для представления отрицательных чисел необходимо учитывать знак. Его отображает старший разряд числа, представленного в виде двоичного кода: 0 – знак (+), 1 – знак (-).
Представление отрицательных и положительных чисел в пределах 1-го байта возможно в диапазоне +127..0..-128. Старший
разряд – знаковый.
Ниже приводится представление положительных и отрицательных чисел в пределах одного байта. Старший разряд – знаковый.
0 111 1111 =+127
........
0 000 0010 =2
0 000 0001 =1
0 000 0000 =0
--------------------------1 111 1111 =-1
1 111 1110 =-2
1 111 1101 =-3
1 111 1100 =-4
1 111 10 11 =-5
........
1 000 0000 =-128
Для выполнения операции вычитания отрицательные числа
записываются в виде дополнительного кода, а затем выполняется операция сложения.
Для получения дополнительного кода (представления отрицательного числа) необходимо выполнение трех операций:
1. Взятие модуля отрицательного числа;
2. Инверсия модуля отрицательного числа (замена единиц на
нули, а нулей на единицы);
3. Сложения результата инверсии с 1-й.
Например, получим представление числа –9 в дополнительном коде.
Знак
0 000 1001
1 111 0110
+ 1
1 111 0111
–
–
–
–
число +9
инверсия
сложение с 1-й
дополнительный код (число -9)
Пример. Получить результат вычитания: 4–9.
0 000 0100 – число +4
+ 1 111 0111 – число -9 в доп. коде
----------------------------------------------------1 111 1011 – число -5 (дополнительный код)
12
Дополнительный код числа весьма сложен для восприятия
при его отображении. Поэтому при выводе дополнительного кода
(отрицательного числа) необходимо получить его модуль и знак.
Для получения модуля нужно:
1. Сохранить старший бит (знак) числа, например, переслать
его в бит переноса С регистра PSW.
2. Инвертировать дополнительный код.
3. Сложить результат инверсии с 1-й.
Например, получим модуль и знак числа -5, представленного
в дополнительном коде.
Знак
1 111 1011 – число -5 в доп. коде
0 000 0100 – инверсия
+
1
----------------------------------------------------0 000 0101 – модуль числа -5.
Знак числа содержится в бите С регистра PSW.
Для выполнения данной части лабораторной работы потребуются команды:
CPL A
INC A
JNB bit, LAB
; инверсия А
; инкремент (A):=(A) + 1
;команда условного перехода JNB на метку LAB, если бит
bit неустановлен
1.3. Вычитание двухбайтных чисел
Для вычитания двухбайтных чисел потребуется команда
SUBB A, Аddres (вычитание с заемом), которая вычитает число
из содержимого аккумулятора (А) вместе с флагом переноса (C).
Результат вычитания в аккумуляторе в пределах (0..255):
(A):=(A) – (Addres) – (C),
где (Addres) – содержимое регистра с адресом Addres. Знак результата – флаг переноса регистра PSW; (С)=0/1,
Следует вспомнить, что для двоичного кода заем = 2, для десятичного кода заем =10, для 16-ричного кода заем =16.
Например, получим разность чисел в десятичной системе
счисления:
1-255= -254 (результат представлен в прямом коде). Представим этот же пример в 16-ричном коде.
01 h
- FF h
-------------1 02 h
13
Вычитание осуществляется поразрядно справа налево. Если в
каком-либо разряде вычитаемое больше уменьшаемого, то требуется заем, равный 16, из соседнего старшего разряда, а содержимое этого старшего разряда уменьшается на 1. Заем при вычитании старших разрядов берется из бита С регистра PSW.
Результат вычитания представлен в аккумуляторе в дополнительном коде: (А)=02 h, так как результат вычитания <0. Знак
числа (-) есть заем из бита переноса. При этом (C)=1.
Алгоритм вычитания двухбайтных чисел
1. Загружаются младший и старший байты числа S соответственно в ячейки регистров РОН нулевого банка: R2 и R1.
2. Загружаются младший и старший байты числа G соответственно в ячейки 2h+8 и 1h+8.
3. Выполняется вычитание младших байтов S-G (команда
SUBB A). Результат вычитания в дополнительном коде (если результат меньше нуля) из регистра А пересылается в регистр отображения результата: 3-я строка ОЗУ, Дамп-0, регистр 2h+16.
Флаг переноса (С) запоминается в регистре В.
4. В аккумуляторе (А) дополнительный код преобразуется в
прямой (модуль числа) и отображается в 4-й строке ОЗУ, Дамп-0,
регистр 2h+24. Восстанавливается флаг переноса: бит С регистра
PSW.
5. Выполняется вычитание старших байтов S-G (команда
SUBB A). Результат вычитания в дополнительном коде из А пересылается в регистр отображения результата: 3-я строка ОЗУ,
Дамп-0, регистр 1h+16. Флаг переноса (бит С) запоминается в регистре В.
6. В аккумуляторе (А) дополнительный код преобразуется в
прямой код (при этом выполняется только операция инверсии:
команда CРL, так как операция сложения с 1 должна быть выполнена в для младших байтов) и отображается в 4-й строке ОЗУ,
Дамп-0, регистр 1h+24.
7. Восстанавливается флаг переноса в бите С.
8. Делается переход к концу программы (на метку LAB), если
флаг переноса PSW.7 не установлен.
9. Иначе, если (С) =1, знак результата вычитания отображается в ячейке 0h+16 ( для дополнительного кода) и ячейке 0h +24
(для прямого кода).
14
2. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1. Написать программу сложения двухбайтных чисел на языке Assembler согласно блок-схеме на рис.1. Промоделировать задачу сложения в симуляторе Avsim-51, выполняя программу по
шагам.
2. Написать программу вычитания однобайтных чисел на
языке Assembler согласно второму разделу методических указаний и промоделировать ее в Avsim-51.
3. Написать программу вычитания двухбайтных чисел на
языке Assembler согласно третьему разделу методических указаний и промоделировать ее в Avsim-51.
4. Исходные данные должны отличатся от приведенных ниже
в примерах содержания отчета.
3. СОДЕРЖАНИЕ ОТЧЕТА
Отчет должен содержать:
1. Исходные данные и результат выполнения программы сложения двухбайтных чисел, представленные в Дампе-0 ОЗУ микроконтроллера, где числа отображены в шестнадцатиричном
коде. Например,
Data Space
0000
0008
0010
0018
00
00
01
00
44
FF
44
00
22
FF
21
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
2. Исходные данные и результат выполнения программы вычитания однобайтных чисел, представленные в Дампе-1 ОЗУ
микроконтроллера. Например,
Data Space
0000 00 04 00 00 00 00 00 00
0008 00 F7 00 00 00 00 00 00
0010 00 FB 00 00 00 00 00 00
0018 01 05 00 00 00 00 00 00
Первая строка – уменьшаемое в регистре R1. Вторая строка –
вычитаемое в ячейке 2h+8, третья строка – результат вычитания
в дополнительном коде в ячейке 2h+16. Четвертая строка – результат вычитания в прямом коде: знак в ячейке 1h+24, а модуль в ячейке 2h=24.
15
3. Исходные данные и результат выполнения программы вычитания двухбайтных чисел представлены в Дампе-0 ОЗУ микроконтроллера. Например,
Data Space
0000 00 22 44 00 00 00 00 00
0008 00 FF FF 00 00 00 00 00
0010 01 22 45 00 00 00 00 00
0018 01 DD BB 00 00 00 00 00
4. Результаты выполнения работы оформить в виде распечаток в форматах asm и lst.
Библиографический список
Основная литература:
1. Новожилов О. П. Основы микропроцессорной техники:
Учеб. пособие в двух томах. Т.1. М.: ИП РадиоСофт, 2007. 432 с.
2. Угрюмов Е. П. Цифровая схемотехника. СПб.: БХВ- СанктПетербург, 2001. 528 с.
Дополнительная литература:
3. Бородин В. Б., Шагурин М. И. Микроконтроллеры. Архитектура, программирование, интерфейс. М.: ЭКОМ, 1999. 400 с.
4. Казаченко В. Ф. Микроконтроллеры: руководство по применению 16-разрядных микроконтроллеров Intel MCS-196/296
во встроенных системах управления. М.: ЭКОМ, 1997. 688 с.
16
ЛАБОРАТОРНАЯ РАБОТА № 3
РЕЖИМЫ АДРЕСАЦИИ
Цель работы: исследовать возможные режимы адресации при
программировании микроконтроллера МК-51. Промоделировать
режимы адресации, используя симулятор Avsim-51.
1. МЕТОДИЧЕСКИЕ УКАЗАНИЯ
При выполнении команды задается код операции-КОП (мнемоника) и операнды (адреса ячеек ОЗУ, в которых находятся
данные).
КОП
Операнд-1
Операнд-2
В зависимости от вида адресации команды микроконтроллера могут быть однобайтными, двухбайтными и трехбайтными.
Например, если регистры ОЗУ микроконтроллера не являются
регистрами общего назначения (РОН), то при выполнении операции пересылки (MOV) из регистра в регистр, длина команды
составляет 3 байта. Первый операнд – адрес байта приемника,
второй – адрес байта источника.
КОП
Адрес байта-приемника
Адрес байта-источника
Второй операнд может быть константой, находящейся в ПЗУ
констант микроконтроллера. Иногда адрес первого операнда
удается разместить в том же байте, где и код операции и длина
команды уменьшается до 2 байт. При работе с регистром аккумулятора А и регистрами общего назначения (РОН) длину команды
удается сократить до одного байта.
При программировании необходимо стремиться, чтобы команды были наиболее короткими. Чем короче команды, тем
быстрее выполняется команда. Рассмотрим виды адресации, используемые в МК-51.
Непосредственная адресация (работа с константами)
При непосредственной адресации первый операнд – адрес
ячейки ОЗУ микроконтроллера, а второй – является константой.
Константы могут быть представлены в двоичном, десятичном
и шестнадцатиричном кодах. Например, число 13 можно записать как
17
00001101b – двоичный код;
13 – десятичный код;
Dh – шестнадцатиричный код.
Рассмотрим примеры. Команда
MOV A, #37h
– пересылка константы 37h в регистр аккумулятора А. Первый байт содержит как код операции (MOV), так и признак того,
что работа выполняется с регистром аккумулятора А. Длина команды 2 байта, время выполнения 1 цикл.
Команда
MOV R0, #33
– пересылка константы 33 в регистр R0 (регистр общего назначения). Длина команды также 2 байта, время выполнения
1 цикл.
Имена идентификаторов R0..R7, их соответствие указателю
номера банка: битам RS1 и R0 регистра PSW, а также ячейкам
ОЗУ микроконтроллера приведены в табл.1.
Таблица 1
№ банка
Биты PSW
(RS1, RS0)
Адреса ОЗУ
(R0..R7)
0
00
0h..0h+7
1
01
0h+8..0h+15
2
10
0h+16..0h+23
3
11
0h+24..0h+31
Например, если выбран 0-й банк: (RS0)=0, (RS1)=0, то имена
идентификаторов R0..R7 соответствуют ячейкам ОЗУ: 0h..0h+7.
Можно выбрать другой банк РОН, например, 1-й банк: код 01.
При этом имена R0..R7 соответствуют ячейкам (0h+8)… (0h+15).
Длина команды и время выполнения при этом не изменятся по
сравнению с предыдущим случаем (0-й банк, код 00).
Но если какой-либо из банков регистров не выбран (всего 4
банка), то длина команды и число циклов возрастут. Например,
при выбранном банке 10, команда пересылки константы 34 в регистр 0h+24
MOV 0h +24, #34
имеет длину 3 байта и время выполнения команды 2 цикла.
18
Прямая адресация
При прямой адресации 2-й операнд и 3-й операнд (если он
есть) являются адресами регистра аккумулятора А или внутреннего ОЗУ микроконтроллера.
Например, команда
MOV A, 24
пересылает данные из 24 ячейки ОЗУ в регистр аккумулятора А,
данные в 24 ячейке сохраняются. Длина команды 2 байта, время
выполнения 1 цикл.
Команда
MOV 45h, 48h
пересылает данные из ячейки с адресом 48h в ячейку по адресу
45h, данные в ячейке 48h сохраняются. Длина команды 3 байта,
время выполнения 2 цикла, т. е. больше, чем в случае прямой
адресации через аккумулятор.
Регистровая адресация
позволяет реализовать самые короткие команды микроконтроллера при адресации к регистру аккумулятора А и РОН.
Например,
MOV A, R0
пересылает данные из регистра R0 в регистр аккумулятора А.
Длина команды 1 байт, время выполнения 1 цикл.
Команда
MOV R0, 9h
пересылает данные из 9 ячейки ОЗУ в ячейку по адресу 0h (банк0 РОН). Длина команды 2 байта и время выполнения 2 цикла
(возросли в 2 раза).
Косвенная адресация
Используется как указатель на адрес, где находятся данные.
Применяется для работы с памятью (массивами данных). Косвенная адресация может осуществляться через регистр аккумулятора или через прямо адресуемый регистр ОЗУ микроконтроллера,
а также использовать непосредственную адресацию для работы с
константами в ПЗУ МК.
Для внутреннего ОЗУ микроконтроллера при косвенной адресации для хранения адреса используются только регистры R0 и
R1.
Например.
Из ячейки, адрес которой 30h, необходимо переслать данные
в регистр А, используя косвенную адресацию.
19
MOV 30h, #CAh ; в ячейку по адресу 30h записали данные CAh
MOV R1, #30h ; в R1 записали адрес ячейки 30h (как константу)
MOV A, @R1
; данные CAh пересылаются в аккумулятор (косвенно, через R1).
Длина команды 1 байт, время выполнения 1 цикл. Символ
@ – признак косвенной адресации. Идентификатор @R1 обозначает, что регистр R1 содержит адрес ячейки, в которой находятся пересылаемые данные.
Другие виды косвенной адресации:
MOV @Ri,A; i=0,1; где косвенно адресуемый регистр является приемником,
пересылка данных из аккумулятора по адресу в регистре Ri; I=0,1.
MOV <direct>,@Ri; i=0,1, <direct> – прямо адресуемый регистр в ОЗУ МК
MOV @Ri,<direct>,
MOV @Ri,#data; i=0,1
Косвенная адресация к внешнему ОЗУ осуществляется через
регистр DPTR, предназначенный для работы с внешней памятью. Регистр DPTR состоит из 2 8-разрядных регистров DPH и
DPL, предназначенных для работы с внешней памятью. Регистр
DPH содержит старший байт адреса ОЗУ, регистр DPL содержит
младший байт адреса ОЗУ. Таким образом, обеспечивается адресация к ОЗУ по 16-разрядной шине адреса.
Для обращения к внешнему ОЗУ сначала необходимо записать в регистры DPH и DPL адрес ячейки внешнего ОЗУ (старший и младший байты). Например,
MOV DPH, #01h
MOV DPL, #11h.
Затем выполнить команду пересылки данных из внешнего ОЗУ
или во внешнее ОЗУ: мнемоника MOVX.
Например,
MOVX A, @DPTR
– команда пересылки данных из ячейки памяти внешнего ОЗУ,
адрес которой (DPTR)=0111h, в аккумулятор. Длина команды 1
байт, время выполнения 2 цикла. По сравнению с косвенной адресацией к внутреннему ОЗУ (через регистры R0 или R1) время
выполнения команды при работе с внешней памятью увеличилось в два раза.
2. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
Написать программу, в которой были бы отражены все виды
адресации, описанные в методических указаниях. Программа
должна позволить заполнить табл.2 и табл.3. Для работы с банками регистров использовать команды
20
SETB bit ; бит установлен,
CLR bit ; бит сброшен,
где bit =RS1 или RS0.
Таблица 2
Режимы
адресации
Банк регистров
РОН
КОП: MOV
Операнды
Длина команды
(в байтах)
Число
циклов
Длина команды
(в байтах)
Число циклов
А, #
00
R0, #
Непосредственная
R0, #
01
0h+24, #
A, 0h+24
Прямая
00
ОЗУ ↔ ОЗУ;
ОЗУ ≠ R0..R7
00
A
11
R0
Регистровая
↔ R0;
↔ 0+8h;
Таблица 3
Режим
адресации
Косвенная
ОЗУ
Внутреннее
ОЗУ
Внешнее
ОЗУ
КОП (MOV)
Операнды
A
A
↔ R1;
↔ DPTR;
Для измерения числа циклов необходимо подключить счетчик циклов, используя меню AVSIM51: F3 → S → Y.
Для измерения длины команды использовать программный
счетчик PC (Program Counter), который фиксирует адрес очередной выполняемой команды в ПЗУ микроконтроллера и при нажатии на клавишу F10 увеличивает свое значение на число байт,
равное длине команды.
21
3. СОДЕРЖАНИЕ ОТЧЕТА
Отчет должен содержать:
Результат выполнения работы в виде распечатки программы
в форматах asm и lst, а также в виде заполненной табл. 1, отображающей процесс выполнения программы в МК51.
Библиографический список
Основная литература:
1. Новожилов О. П. Основы микропроцессорной техники:
Учеб. пособие в двух томах. Т.1. М.: ИП РадиоСофт, 2007. 432 с.
2. Угрюмов Е. П. Цифровая схемотехника. СПб.: БХВ- СанктПетербург, 2001. 528 с.
Дополнительная литература:
3. Бородин В. Б., Шагурин М. И. Микроконтроллеры. Архитектура, программирование, интерфейс. М.: ЭКОМ, 1999. 400 с.
4. Казаченко В. Ф. Микроконтроллеры: руководство по применению 16-разрядных микроконтроллеров Intel MCS-196/296
во встроенных системах управления. М.: ЭКОМ, 1997. 688 с.
22
ЛАБОРАТОРНАЯ РАБОТА № 4
РАБОТА С МАССИВОМ ДАННЫХ, РАСПОЛОЖЕННЫМ
В ПЗУ МИКРОКОНТРОЛЛЕРА. ИНДЕКСНАЯ АДРЕСАЦИЯ
Цель работы: с помощью индексной адресации исследовать
программный доступ к массивам (таблицам), зашитым в памяти
ПЗУ микроконтроллера МК51.
1. МЕТОДИЧЕСКИЕ УКАЗАНИЯ
Для работы с массивом данных служит директива DB (define
byte) – определить байт. В ПЗУ массив данных нужно располагать так, чтобы на адреса ячеек, в которых расположен массив,
не попало управление от счетчика команд. Счетчик команд (PC)
в процессе последовательного счета должен обходить эти ячейки,
иначе дешифратор команд, расположенный в АЛУ микроконтроллера, будет воспринимать данные массива в ПЗУ как коды
ложных команд, и как следствие их выполнение.
Пример размещения массива данных в ПЗУ микроконтроллера.
N.
EQU 8
; число элементов массива
--------------------START
LJMP BEGIN; адрес метки 200h
.ORG 400h ;
M
; М – адрес начала массива =400h
.DB 32, 33, 34, 96, 36, 22, 38, 06; размещение числового массива
или тоже самое поэлементно
.DB 32
; число 32 занесли в ячейку 400h
.DB 33
; число 33 занесли в ячейку 4001h
.DB 34
.
.
.
.DB 06
; конец массива (ячейка 407h)
-------------------------.ORG 200h
BEGIN
Тело программы
END
Программа применяется для осуществления доступа к массивам (таблицам), зашитым в памяти ПЗУ.
23
Точка перед директивой – признак директивы, позволяет выделить ее в программе.
Индексная адресация
Индексной называется косвенная адресация по сумме базового и индексного регистров.
Применяется, например, для просмотра таблиц, зашитых в
программную память (ПЗУ).
Блок-схема программы
Begin
MOV DPTR,#M
(B):=N
(R1):=0
Установка счетчика циклов в
регистрах: B – на убывание,
R1 – на возрастание
(R0):=(0h+8h)
Установка счетчика адресов
ОЗУ в регистре R0: на
возрастание
LAB 1
MovC A,@A+DPTR
MOV @R0,A
(R0):=(R0)+1
(R1):=(R)+1
(A): =(R1)
Да
Нет
END
Индексная адресация: данные
из ПЗУ в пересылаются в
регистр А
Косвенная адресация:
данные из регистра А
пересылаем по адресу,
который находится в R0
Подготавливаем регистр А
для загрузки очередного
байта из ПЗУ
Декремент и переход на LAB1, если
(B)<>0:
DJNZ B,LAB1
(B)<>0
24
Начальный адрес массива
заносим в DPTR
Адрес ячейки массива состоит из двух компонентов:
Addr = base + offset,
где base – база; offset – смещение (индекс).
Базовым является 16-разрядный регистр DPTR (DPH, DPL),
а индексным – регистр аккумулятора А. Например, для чтения
массива данных из ПЗУ с начальным адресом, определяемым
меткой М, необходимо выполнить команды
MOV DPTR, #M
MOVC A,@A+DPTR
; в регистр DPTR загружается адрес первой ячейки
;маcсива
; в регистр А переслать байт из ячейки ПЗУ с адресом
; (DPTR)+(A),
где знак ( ) обозначает содержимое регистра с адресом, указанным в скобках.
Для проверки правильности записи массива в ПЗУ выполните чтение данных из ПЗУ с пересылкой их в Дамп-0 внутреннего
ОЗУ: ячейки 8h..Fh.
Для этого необходимо написать программу размещения массива данных в ПЗУ и чтения этих данных в виде их выгрузки в
Дамп-0 внутреннего ОЗУ микроконтроллера.
Далее приведена блок-схема программы. Программа за 8 циклов пересылает данные массива из ПЗУ в ячейки 8h...Fh Дампа-0
ОЗУ микроконтроллера.
Для этого в регистр B записывается число ячеек массива в
ПЗУ. В процессе выполнения осуществляется циклический декремент содержимого регистра В.
В начале программы регистр R0 содержит начальный адрес
ячейки ОЗУ, начиная с которого будут располагаться выводимые данные из ПЗУ.
Первый байт данных пересылается из ПЗУ сначала в регистр
А с помощью индексной адресации к ячейке ПЗУ, а затем из регистра А в ячейку по адресу 8h – начальный адрес ОЗУ для выводимого массива. Для вывода данных используется косвенная
адресация к регистру R0.
Регистр А выполняет две функции: при индексной адресации
к массиву данных в ПЗУ используется как инкрементируемый
регистр смещения (offset), а при косвенной адресации к регистру
R0 используется для пересылки данных в ОЗУ МК. Поэтому данные в А необходимо все время обновлять в процессе выполнения
программы. Для выполнения инкрементирования А используем
регистр R1, результат инкрементирования которого пересылаем
снова в А в конце каждого цикла выполнения программы.
25
Содержимое R1 и R0 циклически инкрементируются и за
счет косвенной адресации к ячейкам ОЗУ с адресом в R0 байты
данных последовательно пересылаются из ПЗУ в ячейки 8h..Fh
ОЗУ.
2. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
Программно занести 8 байт данных в ячейки ПЗУ согласно
указаний по их размещению в программной памяти микроконтроллера.
Написать программу ввода массива данных в ОЗУ из ПЗУ согласно приведенной блок-схеме и указаний по размещению данных в ПЗУ микроконтроллера.
В пошаговом режиме наблюдать за ходом выполнения программы в симуляторе SIM51,представив также распечатку массива данных в Дампе-0.
3. СОДЕРЖАНИЕ ОТЧЕТА
Отчет должен содержать:
Результаты работы в виде распечаток программы в форматах
asm и lst и отображенный массив в Дампе-0 ОЗУ (ячейки 8h..
Fh).
Библиографический список
Основная литература:
1. Новожилов О. П. Основы микропроцессорной техники:
Учеб. пособие в двух томах. Т.1. М.: ИП РадиоСофт, 2007.432 с.
2. Угрюмов Е. П. Цифровая схемотехника. СПб.: БХВ- СанктПетербург, 2001. 528 с.
Дополнительная литература:
3. Бородин В. Б., Шагурин М. И. Микроконтроллеры. Архитектура, программирование, интерфейс. М.: ЭКОМ, 1999. 400 с.
4. Казаченко В. Ф. Микроконтроллеры: руководство по применению 16-разрядных микроконтроллеров Intel MCS-196/296
во встроенных системах управления. М.: ЭКОМ, 1997. 688 с.
26
ЛАБОРАТОРНАЯ РАБОТА №5
КОМАНДЫ БЕЗУСЛОВНЫХ И УСЛОВНЫХ ПЕРЕХОДОВ
СИМЕЙСТВА МИКРОКОНТРОЛЛЕРОВ МК51.
ПОИСК МАКСИМАЛЬНОГО И МИНИМАЛЬНОГО
ЗНАЧЕНИЙ В МАССИВЕ ДАННЫХ
Цель работы: изучить команды безусловных и условных переходов в системе команд семейства МК51, использовать команды условных переходов в программе поиска максимального и
минимального значений в массиве данных.
1. МЕТОДИЧЕСКИЕ УКАЗАНИЯ
Система команд семейства МК-51 имеет 42 мнемонических
обозначения. В сочетании с конкретными способами адресации и
типами данных имеем 111 обозначений-типов команд. Например,
мнемоника MOV используется 18-ю различными командами.
Из 111 команд 64 выполняются за 1 машинный цикл (МЦ)
или 1 мкс, 45 – за 2 МЦ (2мкс), две команды MUL ((целочисленное умножение) и DIV (целочисленное деление) выполняются аппаратно за 4 МЦ (4 мкс).
Для ветвления при выполнения программы предназначены
команды безусловных и условных переходов.
Команды безусловных переходов
Команда LCALL <addr 16> – длинный вызов подпрограммы
(в пределах 64К адресного пространства программной памяти
(ПЗУ). Например, команда
LCALL SUBR
выполняет безусловный переход на метку SUBR, где метка- символ
16-битного адреса, “абсолютный вызов подпрограммы”, размещенной по указанному адресу. Длина команды 3 байта, время выполнения 2 МЦ. Рассмотрим алгоритм выполнения этой команды:
1. Содержимое счетчика команд (РС):=(РС)+3, так как длина
команды 3 байта, а каждая ячейка ПЗУ содержит один байт.
2. Чтобы можно было всегда вернуться к основной программе, адрес точки выхода из основной программы загружается в
стек1. Для этого содержимое указателя стека инкрементируется:
1 Стек – область ОЗУ микроконтроллера. Работа со стеком и регистр SP-указатель стека описаны в работе №6.
27
(SP)1:=(SP)+1 и в стек записывается младший байт счетчика команд: ((SP))2:=(PC[7 – 0]). Затем операции повторяются еще один
раз для старшего байта PC. (SP): =(SP)+1; ((SP)):=(PC[15 – 8]).
3. Программный счетчик настраивается на адрес начала подпрограммы (метка SUBR). Для этого в счетчик команд РС загружается старший и младший (2-й и 3-й) байты команды LCALL
SUBR. (PC):=<addr[15 – 0]>.
4. Выполняемая подпрограмма заканчивается командой RET,
по которой в счетчик команд из стека возвращается адрес точки выхода из основной программы (сначала старший байт, затем
младший):
(РС):=((SP)); (>PC), (SP) – 1
(PC):=((SP)); (<PC), (SP) – 1.
Команда
АCALL <addr 11> - вызов подпрограммы в пределах 2К программной памяти. Команда более короткая, чем LCALL. Длина
команды 2 байта, время выполнения 2МЦ. Алгоритм выполнения команды ACALL такой же, как для команды LCALL, но с
учетом более короткой длины команды (2 байта).
Команда LJMP3 <addr 16> – длинный переход по указанному
адресу. Старший и младший байты программного счетчика PC
загружаются последовательно 2-м и 3-м байтами команды LJMP
(безусловное ветвление в программе по указанному адресу).
Команда AJMP <addr 11> – “абсолютный переход «по указанному адресу внутри страницы объемом 2К байт ПЗУ, длина команды 2 байта, время выполнения 2 МЦ.
Команда SJMP <offset8> – короткий переход (безусловное
ветвление в программе по указанному адресу). Offset8 – обозначение метки, которая должна быть расположена в пределах
–128...+127 от (РС)+2. Адрес метки задается с помощью индексной адресации
addr=base + offset8,
где base = (PC)+2; offset 8 – смещение. Длина команды 2 байта, поэтому к содержимому программного счетчик РС добавляется 2. Вычисление смещения offset8 выполняется автоматически
в ЦПУ (центральном процессорном устройстве) при ассемблиро1 (SP) обозначает содержимое по адресу SP.
2 ((SP)) обозначает содержимое по адресу, который находится в регистре SP
(косвенная адресация).
3 мнемоника JMP сокращенное от JUMP (прыжок).
28
вании по известному положению метки и адресу конца команды
SJMP: (PC)+2.
Команды условных переходов
Команды условных переходов содержат обращения к регистрам с побитовой адресацией.
Команда JB <bit>,<offset8>; “переход, если бит установлен”,
выполняется только для регистров, которые допускают обращение к битам, <bit> – адрес бита, <offset8> – адрес метки. Вычисление адреса метки см. в команде SJMP. Длина команды 3 байта,
время выполнения 2 цикла. Пример команды
JB ACC.2, LAB
<bit>1,<offset8>;
Команда JNB
“переход, если бит не установлен (JUMP NO BIT)”. Длина команды 3 байта, время выполнения 2 МЦ.
Команда JC <метка>; переход по адресу <метка>, если флаг
переноса в регистре PSW установлен: (С)=1. Длина команды 2
байта, время выполнения 2 цикла.
Команда JNC <метка>; переход по адресу <метка>, если флаг
переноса в PSW не установлен: (С)=0. Длина команды 2 байта,
время выполнения 2 цикла.
Команда JZ <метка>; переход, если содержимое регистра аккумулятора (А)=0. Длина команды 2 байта, время выполнения 2
цикла.
Команда JNZ <метка>; переход по адресу <метка>, если содержимое регистра аккумулятора (А)<>0 (JUMP NO ZERO).
Длина команды 2 байта, время выполнения 2 цикла.
Команда CJNE A,<direct addr>2, <метка>; «сравнение и переход, если неравно»: по адресу <метка>, если (А)<>(<direct
addr>). Допускает различные виды адресации: прямую, непосредственную, регистровую и косвенную. Длина команды 3 байта, время выполнения 2 МЦ. Примеры команды с мнемоникой
CJNZ
CJNE A,#data8, <метка> ;
CJNE Rn,#date8, <метка> ; n=0 – 7
CJNE @Ri,#date8, <метка>; i=0,1.
1 <bit> – адрес бита.
2 <direct addr> – прямая адресация к ячейке ОЗУ по адресу addr.
29
Блок-схема программы поиска
максимального и минимального значения
Begin
Число циклов перебора
элементов массива
(B):=N-1
(R0):=(08h)
Начальный адрес массива в
ОЗУ – регистре R0
(10h):=(08h)
Первое значение массива в
регистре результата
LAB2
Первое значение массива в
регистре A
(A):=(10h)
Да
(R0):=(R0)+1
Адрес следующей ячейки ОЗУ
SUBB A ,@R0
Вычитание с заемом:
если (A)>((R0)), то (С)=0,
если A<=((R0)), то (С)=1
(С)<>0
Переход на LAB3, если,
бит неустановлен(С)=0:
команда JNС LAB3
Нет
(10h): =((R0))
LAB3
Да
Содержимое ячейки 10h
заменяем большим
значением
Декремент и переход на LAB2,
если (B)<>0:
Команда DJNZ B, LAB2
(B)<>0
Нет
END
Команда
DJNZ <direct addr>,<метка>; “декремент и переход, если не
нуль”, содержимое – (<direct addr>) декрементируется и если неравно 0, то происходит переход по адресу <метка>.
Длина команды 3 байта, время выполнения 2 МЦ. Для укорочения команды необходимо <direct addr> заменить на РОН:
DJNZ Rn,<метка>; n=0 – 7, длина команды 2 байта, время
2 МЦ.
30
2. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1. Используя результаты работы №4 (пункты 1 и 2) сгенерировать однобайтный массив данных в ПЗУ микроконтроллера,
затем переслать этот массив в ячейку 8h..Fh Дампа-0 ОЗУ микроконтроллера.
2. Используя команды условного и безусловного переходов
написать программу поиска максимального и минимального
значений в полученном массиве согласно приведенной блок-схеме алгоритма. В алгоритме упорядочения массива по убыванию
мнемонику JNC заменить на JC.
3. В пошаговом режиме наблюдать за ходом выполнения
программы в симуляторе SIM51, представив распечатку массива данных, а также максимального и минимального значений в
Дампе-0 ОЗУ. В ячейках (8h..Fh) – массив, в ячейке 10h – максимальное значение, в ячейке 18h – минимальное значения.
3. СОДЕРЖАНИЕ ОТЧЕТА
Отчет должен содержать:
1. Распечатки программы в форматах asm и lst,
2. В Дампе-0 ОЗУ отобразить упорядоченные массивы (по убыванию и возрастанию).
Библиографический список
Основная литература:
1. Новожилов О. П. Основы микропроцессорной техники:
Учеб. пособие в двух томах. Т.1. М.: ИП РадиоСофт, 2007. 432 с.
2. Угрюмов Е. П. Цифровая схемотехника. СПб.: БХВ- СанктПетербург, 2001. 528 с.
Дополнительная литература:
3. Бородин В. Б., Шагурин М. И. Микроконтроллеры. Архитектура, программирование, интерфейс. М.: ЭКОМ, 1999. 400 с.
4. Казаченко В. Ф. Микроконтроллеры: руководство по применению 16-разрядных микроконтроллеров Intel MCS-196/296
во встроенных системах управления. М.: ЭКОМ, 1997. 688 с.
31
ЛАБОРАТОРНАЯ РАБОТА №6
РАБОТА СО СТЕКОМ. ОБРАБОТКА СИГНАЛОВ ВНЕШНИХ
ПРЕРЫВАНИЙ ОТ АУДИОВИЗУАЛЬНЫХ УСТРОЙСТВ
Цель работы: изучить работу со стеком в микроконтроллере
при обработке сигналов внешних прерываний, поступающих от
аудиовизуальных устройств.
1. МЕТОДИЧЕСКИЕ УКАЗАНИЯ
Стек (в переводе – штабель) – область ОЗУ с быстрой загрузкой и выгрузкой информации. Для работы со стеком имеется
специальный 8-разрядный регистр SP (Stack Pointer) – указатель
стека. Слова (байты) загружаются в ОЗУ (выгружаются из ОЗУ)
по принципу: “последним вошел / первым вышел”. По команде
сброс cодержимому указателя стека (SP):=07h. Таким образом,
аппаратно определяется дно стека 07h.
Обычно стек используется для перехода из основной программы к подпрограмме (команда LCALL), а также при обработке
сигнала внешнего прерывания. При этом адрес точки выхода
из основной программы, а также промежуточные результаты
вычислений, полученные в основной программе, запоминаются
в стеке, чтобы по окончании выполнения подпрограммы к ним
можно было вернуться, выгрузив их из стека. Например, содержимое аккумулятора и содержимое регистра словосостояния
(PSW) пересылаются в стек.
Пусть дно стека (SP)=07h. Для загрузки в стек байта информации используется мнемоника PUSH (поместить). Например,
Загрузка в стек
(PSW)
SP+1
SP
Дно стека
32
(A)
09h
08h
07h
Выгрузка из стека
(PSW)
SP-1
(A)
09h
08h
07h
SP
Дно стека
запись в стек содержимого регистра аккумулятора А выполняется командой
PUSH A,
по которой содержимое указателя стека инкрементируется:
(SP):=(SP)+1 и в ячейку 08h записывается (А). Для загрузки в
стек (PSW) операции повторяются:
PUSH PSW; (SP):=(SP)+1, (09h):=(PSW).
Выгрузка информации из стека происходит в обратном порядке: мнемоника POP (вытолкнуть). Сначала по команде
POP PSW; (PSW):=(09h),
после чего следует декремент содержимого указателя стека:
(SP):=(SP)-1. Затем следует команда
POP A; (A):=(08h), (SP):=(SP)-1.
Во всех случаях операции выполняются только с содержимым
ячейки стека, на которую направлен указатель.
Поскольку первые ячейки ОЗУ обычно заняты под банки регистров РОН, то в начале программы дно стека переопределяют
командой пересылки (мнемоника MOV) в более удаленные ячейки от начала ОЗУ (свободную часть адресного пространства ОЗУ
микроконтроллера). Например, по команде
MOV SP, #50h; дном стека становится 80-я ячейка ОЗУ.
Обработка сигналов внешних прерываний
Сигнал внешнего прерывания, поступающий от аудио или
визуального устройства, необходим для передачи управления от
текущей программы к подпрограмме обработки внешнего прерывания. У микроконтроллера MK-51 два источника внешних
прерываний:
1. INT0 – вывод P3.2 порта 3:
2. INT1 – вывод P3.3 порта 3.
33
Прерывание может быть либо по уровню (переход из 1 в 0),
либо по фронту (отрицательный перепад) в зависимости от значений управляющих битов в регистре ТСОN (регистре управления).
Реакция на любой запрос внешнего прерывания осуществляется передачей управления от текущей программы к подпрограмме обработки прерывания. Передача осуществляется командой
LCALL (аппаратно). Адрес перехода (вектор прерывания) фиксирован (аппаратно) для каждого источника прерывания. В частности, для векторов внешних прерываний адреса соответственно
равны:
INTO – 003h:
INT1 – 00Bh.
Обычно при использовании внешнего прерывания в соответствующей ячейке адреса (вектора прерывания) располагается команда LJMP <Метка> (безусловный переход по адресу <Метка>:
начало подпрограммы обработки прерывания).
Взаимодействие между различными источниками прерываний определяется регистрами:
IP – регистр приоритетов прерывания;
IE – регистр разрешения прерывания;
TCON – регистр управления.
Когда запрос прерывания принят на обслуживание, то:
1. Текущая команда выполняется до конца.
2. Аппаратно формируется команда LCALL: Длинный переход в пределах 64К памяти программ по адресу 03h (для сигнала
INT0).
3. Текущее значение счетчика команд PC (адрес следующей
команды) запоминается в стеке: сначала старший байт, затем –
младший. Это позволяет после возврата из подпрограммы обслуживания прерывания вернуться в прерванную программу.
4. В счетчик команд загружается адрес вектора прерывания,
например 003h (для INT0) и на этом выполнение команды LCALL
заканчивается.
5. В ячейке ПЗУ с адресом 003h должна быть размещена команда
LJMP SUBR, где SUBR – метка начала подпрограммы обработки прерывания.
6. В начале подпрограммы в стек загружаются промежуточные результаты прерванной программы. Например,
34
PUSH PSW
PUSH A
PUSH DPL
PUSH DPH
Программа обработки внешнего прерывания.
В конце программы промежуточные результаты выгружаются
в обратном порядке:
POP
POP
POP
POP
DPH
DPL
A
PSW
7. Заканчивается подпрограмма обработки прерывания командой RETI, которая выгружает из стека адрес возврата к основной программе и помещает его в PC.
Перед подпрограммой обработки внешнего прерывания в основной программе нужно определить всю цепочку разрешений
прерывания для данного источника.
Например, для прерывания INT0 (по фронту) необходимо выполнить следующие команды, устанавливающие разрешение
прохождения сигнала прерывания:
SETB IT0 ;
;
SETB EX0 ;
рываний)
SETB EA ;
SETB IP0 ;
ваний)
разрешение прерывания по фронту в TCON (регистре управления)
бит IE0 устанавливается аппаратно в TCON
частное разрешение прерывания в IE (регистре разрешения преобщее разрешение прерывания в IE
приоритет INT0 выше других в IP (регистре приоритетов преры-
2. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
Внешним устройством микроконтроллера является аналогоцифровой преобразователь (АЦП), который преобразует, например, сигнал звука в цифровую форму. Схема соединения АЦП и
микроконтроллера МК-51 приведена на рис.1.
От генератор тактовых импульсов происходит запуск АЦП
и отсчет аналогового сигнала преобразуется в цифровую форму
(параллельный 8-разрядный код).
Конец преобразования фиксируется отрицательным перепадом АЦП готов, который является сигналом внешнего прерывания INT0.
Подпрограмма обслуживания внешнего прерывания разрешает считывание кода из АЦП в порт Р1 (команда CLR P2.0) и
35
17
Сигнал
0..3 В
D9
D1
АЦП D0
1108ПВ1
22
1
D2...D9
8
Р1
9
10
Р0
11
МК51
АЦП
готов
24
Прерыв INT 0
Р3
Р2
Запуск АЦП
Разрешение
считывания
кода
Рис. 1. Схема подключения АЦП к микроконтроллеру МК51
параллельный код считывается через порт P1 в регистр А и ячейки ОЗУ микроконтроллера.
Завершение команды обслуживания внешнего прерывания
фиксируется командой RETI и цикл преобразования следующего отсчета аналогового сигнала на входе АЦП повторяется.
ОСОБЕННОСТИ СТАРТОВОЙ
ЧАСТИ ПРОГРАММЫ
START
LJMP BEGIN
ORG 03H
LJMP SUBR
ORG 200H
BEGIN:
MOV SP,#50H
36
;команда б/у длинного перехода (в пределах 64К)
;с адреса 000H на метку начала основной программы:
;адрес вектора прерывания INT0
;переход на подпрограмму обработки прерывания c
; 03H по адресу (метка SUBR – подпрограмма обра;ботки прерывания)
;адрес следующей выполняемой команды 200H
;инициализация (переопределение) стека
Begin
Инициализация стека
Установка разрешений
внешнего прерывания по
INT0
Установка в регистре R2
числа циклов ввода данных
из АЦП
R2:=CYCLES
Начальный адрес
внутреннего ОЗУ в R0
(R0):=32
Начальное число на
выходе АЦП (входе P1)
(P1):=0
M_LOOP
Симуляция INT0:
MOV P3,#11111011
Ожидание INT0
SJMP M_LOOP
SUBR
Да
(R2)<>0
Декремент и переход на
M_LOOP, если
(R2)<>0
Нет
LJMP END_PRОG
END_PRO
G
END
37
БЛОК-СХЕМА ПРОГРАММЫ
ОЖИДАНИЕ ПРЕРЫВАНИЯ
M_LOOP:
; SJMP M_LOOP
; б/у переход на метку M_LOOP (петля), ожидание внешнего прерывания с частотой машинных циклов аппаратно (в программе заблокировать)
MOV P3,#11111011B; АЦП готов
;программная имитация прерывания по INT0
;декремент и переход на метку M_LOOP, если
; (R2)<>0
DJNZ R2,M_LOOP
LJMP END_PROG
ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЯ
SUBR:
PUSH PSW
PUSH A
CLR P2.0
MOV A,P1
MOV @R0,P1
INC R0
INC P1
SETB P2.0
SETB P3.2
POP A
POP PSW
RETI
;содержимое регистра PSW переслать в стек
;содержимое регистра А переслать в стек
;разрешение на считывание кода из АЦП
;(A):=(P1)=(АЦП), пересылка кода в регистр А
;((R0)):=(P1) пересылка по адресу в R0 содержимого
; (P1)
;адрес следующей ячейки ОЗУ для записи очередной выборки
;следующий отсчет АЦП
;запрет считывания кода (команда для АЦП)
;разрешение программной имитации внешнего прерывания
;извлечение из стека и пересылка в регистр А
;извлечение из стека и пересылка в регистр PSW
;возврат из стека точки выхода из основной про;граммы в PC.
3. СОДЕРЖАНИЕ ОТЧЕТА
Отчет должен содержать:
1. Распечатки программы в форматах asm и lst.
2. В Дампе-1 ОЗУ с 32 ячейки по 64 ячейку отобразить данные, полученные из АЦП (путем циклической симуляции: INC
R0) в подпрограмме обработки внешнего прерывания.
Библиографический список
Основная литература:
1. Новожилов О. П. Основы микропроцессорной техники:
Учеб. пособие в двух томах. Т.1. М.: ИП РадиоСофт, 2007. 432 с.
2. Угрюмов Е. П. Цифровая схемотехника. СПб.: БХВ- СанктПетербург, 2001. 528 с.
38
Дополнительная литература:
3. Бородин В. Б., Шагурин М. И. Микроконтроллеры. Архитектура, программирование, интерфейс. М.: ЭКОМ, 1999. 400 с.
4. Казаченко В. Ф. Микроконтроллеры: руководство по применению 16-разрядных микроконтроллеров Intel MCS-196/296
во встроенных системах управления. М.: ЭКОМ, 1997. 688 с.
Содержание
Лабораторная работа № 1. Простейшие операции
с регистрами рон, аккумулятором и регистром psw
микроконтроллера...........................................................
Лабораторная работа № 2. Моделирование операций
сложения и вычитания в симулятое avsim-51.
Работа с дампом-0 внутреннего озу микроконтроллера.........
Лабораторная работа № 3. Режимы адресации..................
Лабораторная работа № 4. Работа с массивом данных,
расположенным в пзу микроконтроллера.
Индексная адресация.......................................................
Лабораторная работа №5. Команды безусловных
и условных переходов симейства микроконтроллеров мк51.
Поиск максимального и минимального значений
в массиве данных.............................................................
Лабораторная работа №6. Работа со стеком. Обработка
сигналов внешних прерываний от аудиовизуальных
устройств........................................................................
3
10
17
23
27
32
39
Документ
Категория
Без категории
Просмотров
0
Размер файла
378 Кб
Теги
vilesov
1/--страниц
Пожаловаться на содержимое документа