Текст программы на языке Ассемблер

Текст программы на языке АССЕМБЛЕР составлен в соответствии с блок-схемой показанной на рис.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. Таблица вариантов исходных данных для выполнения программы.

 

Отладка является конечным пунктом выполнения работы. В ходе отладки проверяется работоспособность программы, правильность выполнения условных переходов, правильность результатов, при различных вариантах исходных данных.

Заключение.

В ходе выполнения практики мы познакомились с принципом работы и системой команд микроконтроллера.

Познакомились с основами языка программирования АССЕМБЛЕР Приобрели навыки по программированию микропроцессорных контроллеров на языке программирования АССЕМБЛЕР. Научились переводить все мнемокоды операций программы в машинный код, с использованием таблиц системы команд, проводить отладку программы с различными вариантами исходных данных.