Текст программы на языке АССЕМБЛЕР составлен в соответствии с блок-схемой показанной на рис.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; |
После того, как программа составлена, выполнена ручная компиляция программы, то есть перевод всех мнемокодов операций программы в машинный код, с использованием таблиц системы команд.
Адр | Код | Мет | Мнемокод | Комментарий |
Стартовая точка программы | ||||
02 00 30 | LJMP STRT; | Переход к началу программы | ||
Инициализация | ||||
75 D0 00 | STRT: | MOV PSW, 0#; | Выбор регистрового банка 0 | |
Начальные условия | ||||
EE | MOV A, R6; | Пересылка в аккумулятор из регистра R6 | ||
24 2E | ADD A, #46; | Сложение аккумулятора с константой #2EH | ||
C3 | CLR C; | Сброс переноса | ||
94 35 | SUBB A, #35H; | Вычитание из аккумулятора константы #35H и займа | ||
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 |
F4 | CPL A; | Сброс аккумулятора | ||
65 35 | XRL A, 35H; | Исключающее ИЛИ аккумулятора и прямо-адресуемого байта 35H | ||
E8 37 | MOV R0, #55; | Загрузка в регистр константы #37H | ||
F6 | MOV @R0,A; | Пересылка в РПД из аккумулятора | ||
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; | Сброс аккумулятора | |
MOVC A, @(A+DPTR); | Пересылка в аккумулятор байта из ПП | |||
F9 | MOV R1, A; | Пересылка в регистр R1 из аккумулятора | ||
74 01 | MOV A, #1; | Загрузка в аккумулятор константы #1 | ||
MOVC A, @(A+DPTR); | Пересылка в аккумулятор байта из ПП | |||
FA | MOV R2, A; | Пересылка в регистр R2 из аккумулятора | ||
C3 | CLR C; | Сброс переноса | ||
E9 | MOV A, R1; | Пересылка в аккумулятор из регистра R1 | ||
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 аккумулятора | |
D2 4D | SETB 29.5H; | Установка бита | ||
C2 49 | CLR 29.1H; | Сброс бита | ||
02 C1 00 | END: | LJMP C100H; | Конец программы |
Табл.2. Таблица текста программы (листинг) в машинных кодах и параллельно на языке Ассемблер с комментариями для каждой операции.
После перевода производён ввод текста откомпилированной программы с пульта учебного МК в его память с помощью команд монитора. Необходимо помнить, что программа должна начинаться с адреса 0030Н.
Отладка.
Отладка выполнена с различными вариантами исходных данных, которые подобраны таким образом, чтобы отследить выполнение программы по всем ветвям алгоритма программы. Для этой цели заранее подготовлена таблица исходных данных и результатов.
Дл выполнения отладки, по очереди, ввели в память все данные для каждого варианта, затем с помощью пошагового режима отследили выполнение переходов для каждого из вариантов. Пошаговый режим выполняется с помощью нажатия клавиш «G» - «S» - «˽» - «J». Далее программа запустили на выполнение с помощью команд «G»-«G». Убедились, что все условные переходы выполняются верно и результаты совпадают с заранее подготовленными результатами, которые представлены в табл.3.
1 вариант Первое условие выполняется | 2 вариант Второе условие выполняется | 3 вариант Оба условия не выполняются |
R6 =#35Н + #46= 7H R7.2 = #0(не выпол.) R7.2 = 7FH=1111111В 35H =10 7DH = 25 | R6 = #35Н + #46(не выпол.) R6=5H R7.2 = #0 R7.2 = 39H= 111001B 35H = 10 7DH = 25 | R6 = #35Н + #46(не выпол.) R6=5H R7.2 = #0(не выпол.) R7.2 = 7FH=1111111В 0072 = 20 0073 = 30 3DH = 18 3CH = 17 |
Результат: 29H = 135 37H =35H + / 7DH=#48 | Результат: 29H = #87 37H = 35H + / 7DH =48 | Результат: 37H =3DH+ 0073Hp= 48 36H =3CH + 0072Hp= 37 29H = А5 = 10100101 В |
Табл.3. Таблица вариантов исходных данных для выполнения программы.
Отладка является конечным пунктом выполнения работы. В ходе отладки проверяется работоспособность программы, правильность выполнения условных переходов, правильность результатов, при различных вариантах исходных данных.
Заключение.
В ходе выполнения практики мы познакомились с принципом работы и системой команд микроконтроллера.
Познакомились с основами языка программирования АССЕМБЛЕР Приобрели навыки по программированию микропроцессорных контроллеров на языке программирования АССЕМБЛЕР. Научились переводить все мнемокоды операций программы в машинный код, с использованием таблиц системы команд, проводить отладку программы с различными вариантами исходных данных.