- •Введение.
- •1. Архитектура и система команд однокристального микроконтроллера i8051.
- •Принцип работы однокристального микроконтроллера i8051.
- •1.2. Система команд.
- •1.2.1.Способы указания адреса.
- •1.2.2. Группы команд.
- •2.Архитектура и программное обеспечение учебное контроллера мк 52 – эм02.
- •2.1. Команды «монитора».
- •Выполнение задания.
- •3.1. Условие задачи.
- •3.2.Разработка алгоритма.
- •3.3. Текст программы на языке Ассемблер.
- •3.4. Отладка.
Выполнение задания.
3.1. Условие задачи.
@55 := 35H + / 7DH
Если R6 + #46 = #35H
Или R7.2 = #0 , то: 29H := #135
5554 := 3DH3CH + @0072Hp
Иначе:
29H.1 := #0, 29H.5 := #1
Переводим исходные коды операндов в шестнадцатеричный вид, т.к. все адреса и данные вводятся в микроконтроллер в шестнадцатеричном виде. (Табл. 1)
-
Исходные коды операндов
Коды операндов в шестнадцатеричном виде
#46
#2EH
#0
#0H
@55
@37H
#135
#87H
55
37H
54
36H
#1
#1H
Табл. 1. Таблица кодов операндов программы в шестнадцатеричном виде;
3.2.Разработка алгоритма.
Алгоритм разработан в соответствии с условием задачи и представлен в виде блок-схемы.
На рис.4 показана блок-схема алгоритма для варианта задания приведенного выше. Как видно алгоритм имеет разветвленную структуру. В зависимости от результата выполнения первых двух операций, выполнение дальнейших операций происходит по различным ветвям алгоритма.
Рис. 4. Блок-схема алгоритма.
3.3. Текст программы на языке Ассемблер.
Текст программы на языке АССЕМБЛЕР составлен в соответствии с блок-схемой показанной на рис.4.
-
LJMP STRT ;
Инициализация
STRT:
MOV PSW , 0# ;
Начальные условия
MOV A , R6 ;
ADD A , #46 ;
CLR C ;
SUBB A , #35H ;
JZ , B2 ;
MOV A , R7;
JB ACC.2 , B1 4
Выполнение условий
B2:
MOV A, 7DH ;
CPL A ;
XRL A , 35H ;
MOV R0 , #55 ;
MOV @R0 ,A ;
MOV 29H , #135 ;
SJMP , END ;
Невыполнение условий
B1:
MOV DPTR , # 0072H ;
CLR A ;
MOVC A , @(A+DPTR);
MOV R1 , A ;
MOV A , #1 ;
MOVC A , @(A+DPTR);
MOV R2 , A ;
CLR C ;
MOV A , R1 ;
ADD A , 3CH ;
MOV 54 , A ;
MOV A , R2 ;
ADD A , 3DH ;
MOV 55 , A ;
SETB 29.5H ;
CLR 29.1H ;
LJMP C100H ;
После того, как программа составлена, выполнена ручная компиляция программы, то есть перевод всех мнемокодов операций программы в машинный код, с использованием таблиц системы команд.
Адр |
Код |
Мет |
Мнемокод |
Комментарий |
Стартовая точка программы |
||||
0000 |
02 00 30 |
|
LJMP STRT ; |
Переход к началу программы |
Инициализация |
||||
0030 |
75 D0 00 |
STRT: |
MOV PSW , 0# ; |
Выбор регистрового банка 0 |
Начальные условия |
||||
0033 |
EE |
|
MOV A , R6 ; |
Пересылка в аккумулятор из регистра R6 |
0034 |
24 2E |
|
ADD A , #46 ; |
Сложение аккумулятора с константой #2EH |
0036 |
C3 |
|
CLR C ; |
Сброс переноса |
0037 |
94 35 |
|
SUBB A , #35H ; |
Вычитание из аккумулятора константы #35H и займа |
0039 |
60 04 |
|
JZ , B2 ; |
Переход на B2, если аккумулятор равен нулю |
003B |
EF |
|
MOV A , R7; |
Пересылка в аккумулятор из регистра R7 |
003C |
20 E1 0D |
|
JB ACC.2 , B1 |
Переход на В1, если бит равен единице |
Выполнение условий |
||||
003F |
E5 7D |
B2: |
MOV A, 7DH ; |
Пересылка в аккумулятор прямо-адресуемого байта 7DH |
0041 |
F4 |
|
CPL A ; |
Сброс аккумулятора |
0042 |
65 35 |
|
XRL A , 35H ; |
Исключающее ИЛИ аккумулятора и прямо-адресуемого байта 35H |
0044 |
E8 37 |
|
MOV R0 , #55 ; |
Загрузка в регистр константы #37H |
0046 |
F6 |
|
MOV @R0 ,A ; |
Пересылка в РПД из аккумулятора |
0047 |
75 29 87 |
|
MOV 29H , #135 ; |
Пересылка по прямому адресу 29H константы #87H |
004A |
80 1A |
|
SJMP , END ; |
Переход внутри страницы |
Невыполнение условий |
||||
004C |
90 00 72 |
B1: |
MOV DPTR, # 0072H; |
Загрузка указателя данных |
004F |
E4 |
|
CLR A ; |
Сброс аккумулятора |
0050 |
93 |
|
MOVC A , @(A+DPTR); |
Пересылка в аккумулятор байта из ПП |
0051 |
F9 |
|
MOV R1 , A ; |
Пересылка в регистр R1 из аккумулятора |
0052 |
74 01 |
|
MOV A , #1 ; |
Загрузка в аккумулятор константы #1 |
0054 |
93 |
|
MOVC A , @(A+DPTR); |
Пересылка в аккумулятор байта из ПП |
0055 |
FA |
|
MOV R2 , A ; |
Пересылка в регистр R2 из аккумулятора |
0056 |
C3 |
|
CLR C ; |
Сброс переноса |
0057 |
E9 |
|
MOV A , R1 ; |
Пересылка в аккумулятор из регистра R1 |
0058 |
25 3C |
|
ADD A , 3CH ; |
Сложение аккумулятора с прямо-адресуемым байтом 3CH |
005A |
F5 36 |
|
MOV 54 , A ; |
Пересылка по прямому адресу 36H аккумулятора |
005C |
EA |
|
MOV A , R2 ; |
Пересылка в аккумулятор из регистра R2 |
005D |
25 3D |
|
ADD A , 3DH ; |
Сложение аккумулятора с прямо-адресуемым байтом 3DH |
005F |
F5 37 |
|
MOV 55 , A ; |
Пересылка по прямому адресу 37H аккумулятора |
0061 |
D2 4D |
|
SETB 29.5H ; |
Установка бита |
0063 |
C2 49 |
|
CLR 29.1H ; |
Сброс бита |
0065 |
02 C1 00 |
END: |
LJMP C100H ; |
Конец программы |
Табл.2. Таблица текста программы (листинг) в машинных кодах и параллельно на языке Ассемблер с комментариями для каждой операции.
После перевода производён ввод текста откомпилированной программы с пульта учебного МК в его память с помощью команд монитора. Необходимо помнить, что программа должна начинаться с адреса 0030Н.