Текст программы на языке Ассемблер
Текст программы на языке АССЕМБЛЕР составлен в соответствии с блок-схемой показанной на рис.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. Таблица вариантов исходных данных для выполнения программы.
Отладка является конечным пунктом выполнения работы. В ходе отладки проверяется работоспособность программы, правильность выполнения условных переходов, правильность результатов, при различных вариантах исходных данных.
Заключение.
В ходе выполнения практики мы познакомились с принципом работы и системой команд микроконтроллера.
Познакомились с основами языка программирования АССЕМБЛЕР Приобрели навыки по программированию микропроцессорных контроллеров на языке программирования АССЕМБЛЕР. Научились переводить все мнемокоды операций программы в машинный код, с использованием таблиц системы команд, проводить отладку программы с различными вариантами исходных данных.