КРОСС-СИСТЕМЫ ДЛЯ РАЗРАБОТКИ И ОТЛАДКИ ППО
Для подготовки текстов, получения объектных кодов и отладки ППО требуются средства автоматизации разработки программ в виде кросс-систем для универсальных мини- и микроЭВМ.
В минимальный состав ПО кросс-систем входят:
¨ редактор текстов;
¨ программа-транслятор, обеспечивающая преобразование исходного текста ППО в объектный модуль (ASM48, ASM51);
¨ редактор внешних связей (LINK), позволяющий включать в программу модули, разработанные независимо друг от друга;
¨ программу, обеспечивающую настройку перемещаемых программных модулей на абсолютные адреса (LOCATE);
¨ отладчики, интерпретирующие выполнение программ в различных режимах: трассировки, пофрагментного выполнения команд и т.д. и ряд других модулей в зависимости от типа МК или контроллера.
Отладка ППО представляет собой отдельную сложную задачу, которая не поддается формализации и требует высокого профессионализма разработчика.
Отладка также выполняется в несколько этапов:
¨ автономная отладка каждой процедуры в статическом режиме, где проверяется правильность вычислений, последовательностей переходов внутри процедуры, отсутствие зацикливаний и т.п.
¨ комплексная отладка в статическом режиме, где проверяется правильность алгоритма управления (по последовательности формирования управляющих воздействий);
¨ комплексная отладка в динамическом режиме без подключения объекта для определения реального времени выполнения ППО и его отдельных фрагментов.
С помощью отладчиков разработчику предоставлен доступ к любому ресурсу МК, имеется возможность покомандного и пофрагментного исполнения программ и останова по условию, а также подсчета числа тактов выполнения программы или ее фрагментов, инициирования прерываний, дисассемблирования содержимого памяти программ и т.д.
Кросс-отладчики позволяют промоделировать все возможные варианты работы программы, также возможна проверка работоспособности программы при нештатных ситуациях в условиях поступления некорректных входных воздействий.
Наиболее мощные средства отладки позволяют моделировать и среду обитания МК, т.е. различные объекты управления и датчики, подключаемые к нему и другие устройства (через библиотеку моделей объектов и устройств сопряжения с МК). Главным недостатком кросс-систем является невозможность прогона программ в реальном времени МК и комплексной проверки АС и ППО. Эта проблема частично разрешима с помощью отладочных комплексов на основе микроЭВМ, построенной на однотипном процессоре и модулей ВСЭ.
Таблица А.1 - Команды внутренних пересылок и арифметико-логических преобразований
№ | Мнемоника | Выполняемые | |
п/п | команды | Комментарии | преобразования |
Команды пересылки | |||
MOV A,Rn | Пересылка регистра в аккумулятор | AC:= (Rn); Rn=0-7 | |
MOV A,@Rn | Пересылка байта из РПД в аккумулятор | AC:= [(Rn)]; Rn=0-1 | |
MOV A,#dan | Пересылка непосредственного операнда в аккумулятор | AC:= dan | |
MOV Rn,A | Пересылка АС в регистр | (Rn):=AC; Rn=0-7 | |
MOV Rn,#dan | Пересылка непосредственного операнда в регистр | (Rn):= dan; Rn=0-7 | |
MOV @Rn,A | Пересылка АС в РПД | [(Rn)]:= AC; Rn=0-1 | |
MOV @Rn,#dan | Пересылка непосредственных данных в РПД | [(Rn)]:= dan; Rn=0-1 | |
MOV A,PSW | Пересылка PSW в АС | AC:=PSW | |
MOV PSW,AC | Пересылка АС в PSW | PSW:= AC | |
MOV A,T | Пересылка таймера/счетчика в АС | AC:=T | |
MOV T,A | Пересылка АС в таймер/счетчик | T:=AC | |
XCH A,Rn | Обмен регистра с АС | AC:=(Rn); (Rn):=AC; Rn=0-7 | |
XCH A,@Rn | Обмен АС с РПД | AC:= [(Rn)]; [(Rn)]:= AC; Rn=0-1 | |
XCHD A,@Rn | Обмен младших тетрад АС и байта РПД | AC[3-0]:= [(Rn)][3-0]; [(Rn)][3-0]:= AC[3-0]; Rn=0-1 | |
MOVP A,@A | Пересылка байта из текущей страницы памяти программ в аккумулятор | PC[7-0]:= AC; AC:=((РС[11-0])); | |
MOVР3 A,@А | Пересылка байта из третьей страницы памяти программ в аккумулятор | PC[11-8]:= 0011; PC[7-0]:= AC; AC:=((РС[11-0])); | |
Команды пересылки с портами | |||
MOVX A,@Rn | Пересылка байта из ВПД в АС | AC:=ВПД[(Rn)]; Rn=0-1 | |
MOVX @Rn,A | Пересылка АС во ВПД | ВПД[(Rn)]:= AC; Rn=0-1 | |
MOVD A,Pp | Ввод тетрады из порта Рр схемы расширителя ВР43 (р=4-7) | RgCOP:=Pp.00; AC[3-0]:=(Pp); AC[7-4]:=0 | |
MOVD Pp,A | Вывод тетрады в порт Рр схемы расширителя ВР43 (р=4-7) | RgCOP:=Pp.11 RgPp:=AC; Pp:= RgPp | |
OUTL BUS,A | Пересылка АС в порт BUS | RgBUS:=AC; BUS:=RgBUS; | |
INS A,BUS | Стробируемый ввод данных из порта BUS | AC:=BUS | |
OUTL Pp,A | Пересылка АС в порт Рp (р=1,2) | RgPp:=AC; Pp:=RgPp; | |
IN A,Pp | Пересылка данных из порта Рр в АС | AC:=RgPp & Pp | |
Арифметические команды | |||
ADD A,Rn | Сложение регистра с аккумулятором | AC:= (Rn) + AC; Rn=0-7 | |
ADD A,@Rn | Сложение байта из РПД с аккумулятором | AC:= [(Rn)] + AC; Rn=0-1 | |
ADD A,#dan | Сложение непосредственного операнда с аккумулятором | AC:= dan + AC | |
ADDC A,Rn | Сложение регистра с аккумулятором и переносом | AC:= (Rn) + AC + C; Rn=0-7 | |
ADDC A,@Rn | Сложение байта из РПД с аккумулятором и переносом | AC:= [(Rn)] + AC + C; Rn=0-1 | |
ADDC A,#dan | Сложение непосредственного операнда с аккумулятором и переносом | AC:= dan + AC + C | |
DA A | Десятичная коррекция АС | Если PSW[CA]=1 или AC[3-0] > 9, то AC[3-0]:=AC[3-0]+6; иначе, если PSW[CY]=1 или AC[7-4] >9 то AC[7-4]:=AC[7-4] + 6; | |
INC A | Инкремент аккумулятора | AC:=AC + 1 | |
INC Rn | Инкремент регистра | (Rn):=(Rn) + 1; Rn=0-7 | |
INC @Rn | Инкремент байта в РПД | [(Rn)]:=[(Rn)] +1; Rn=0-7 | |
DEC A | Декремент аккумулятора | AC:=AC - 1 | |
DEC Rn | Декремент регистра | (Rn):=(Rn) - 1; Rn=0-7 | |
Логические команды | |||
ANL A,Rn | Логическое И регистра с аккумулятором | AC:= (Rn) & AC; Rn=0-7 | |
ANL A,@Rn | Логическое И байта из РПД с аккумулятором | AC:= [(Rn)] & AC; Rn=0-1 | |
ANL A,#dan | Логическое И непосредственного операнда с аккумулятором | AC:= dan & AC | |
ORL A,Rn | Логическое ИЛИ регистра с аккумулятором | AC:= (Rn) V AC; Rn=0-7 | |
ORL A,@Rn | Логическое ИЛИ байта из РПД с аккумулятором | AC:= [(Rn)] V AC; Rn=0-1 | |
ORL A,#dan | Логическое ИЛИ непосредственного операнда с аккумулятором | AC:= dan V AC | |
XRL A,Rn | Сложение по модулю 2 регистра с аккумулятором | AC:= (Rn) Å AC; Rn=0-7 | |
XRL A,@Rn | Сложение по модулю 2 байта из РПД с аккумулятором | AC:= [(Rn)] Å AC; Rn=0-1 | |
XRL A,#dan | Сложение по модулю 2 непосредственного операнда с аккумулятором | AC:= dan Å AC | |
CLR A | Очистка аккумулятора | AC:=0 | |
CPL A | Инверсия аккумулятора | AC:=~AC | |
SWAP A | Обмен тетрад в аккумуляторе | AC[7-4]:= AC[3-0]; AC[3-0]:= AC[7-4]; | |
RL A | Циклический сдвиг влево аккумулятора | AC:= L1(AC); AC[0]:= AC[7] | |
RLC A | Сдвиг влево аккумулятора через перенос | AC:= L1(AC); AC[0]:= C; C:= AC[7] | |
RR A | Циклический сдвиг вправо аккумулятора | AC:= R1(AC); AC[7]:= AC[0] | |
RRC A | Сдвиг вправо аккумулятора через перенос | AC:= R1(AC); AC[7]:= C; C:= AC[0] | |
Логические команды с портами | |||
ANLD Pp,A | Логическое И аккумулятора и порта Рр (р=4-7) | RgCOP:=Pp.01 RgPp:=AC & RgPp; Pp:= RgPp | |
ORLD Pp,A | Логическое ИЛИ аккумулятора и порта Рр (р=4-7) | RgCOP:=Pp.10 RgPp:=AC V RgPp; Pp:= RgPp | |
ANL BUS,#d | Логическое И константы и порта BUS | RgBUS:=RgBUS & dan; BUS:=RgBUS | |
ORL BUS,#d | Логическое ИЛИ константы и порта BUS | RgBUS:=RgBUS V dan; BUS:=RgBUS; | |
ANL Pp,#d | Логическое И константы и порта Рр (р=1,2) | RgPp:=RgPp & dan; Pp:=RgPp; | |
ORL Pp,#d | Логическое ИЛИ константы и порта Рр (р=1,2) | RgPp:=RgPp V dan; Pp:=RgPp; |
Таблица А2 - Команды управления режимами работы МК48 и работы с флагами
№ | Мнемоника | Выполняемые | |
п/п | команды | Комментарии | преобразования |
STRT T | Запуск таймера | T:= T + ALE:32 | |
STRT CNT | Запуск счетчика | T:= T + T0 | |
STOP TCNT | Останов таймера/счетчика | T:= T | |
EN TCNTI | Разрешение прерываний от таймера | Et:= 1 | |
DIS TCNTI | Запрещение прерываний от таймера | Et:= 0 | |
EN I | Разрешение внешнего прерывания | Eint:= 1 | |
DIS I | Запрещение внешнего прерывания | Eint:= 0 | |
SEL RB0 | Выбор нулевого банка регистров | PSW[BS]:=0 | |
SEL RB1 | Выбор первого банка регистров | PSW[BS]:=1 | |
SEL MB0 | Выбор нулевого банка памяти программ | MB:=0 | |
SEL MB1 | Выбор первого банка памяти программ | MB:=1 | |
ENTO CLC | Разрешение выдачи синхросигнала на выход TО | ||
NOP | Пустая команда | ||
CLR C | Сброс флага переноса в PSW | PSW[C]:= 0 | |
CLR FO | Сброс флага F0 в PSW | PSW[F0]:= 0 | |
CLR F1 | Сброс флага F1 | F1:=0 | |
CPL C | Инверсия флага переноса в PSW | PSW[C]:=PSW[~C] | |
CPL F0 | Инверсия флага F0 в PSW | PSW[F0]:= PSW[~F0] | |
CPLF1 | Инверсия флага F1 | F1:= ~F1 |
Таблица А.3 - Команды передачи управления
№ | Мнемоника | Выполняемые | |
п/п | команды | Комментарии | преобразования |
JMP adr11 | Безусловный переход | PC[11]:= MB; PC[10-0]:= adr11 | |
CALL adr11 | Вызов подпрограммы | PC[11]:= MB; PC[10-0]:= adr11; (SP):= PSW[7-4].PC[11-8]; (SP+1):= PC[7-0]; SP:=SP+2 | |
RETR | Возврат из подпрограммы и восстановление PSW | SP:= SP-1; PC[7-0]:= (SP); SP:=SP-1; PC[11-8]:= (SP)[3-0]; PSW[7-4]:= (SP)[7-4] | |
RET | Возврат из подпрограммы | SP:= SP-1; PC[7-0]:= (SP); SP:=SP-1; PC[11-8]:= (SP)[3-0]; | |
JMPP @A | Косвенный переход в текущей странице памяти программ | PC:= PC[11-8] . [AC] ; | |
DJNZ Rn,adr8 | Декремент регистра и переход, если не нуль | Rn :=(Rn) - 1; Если Rn<>0, то PC[7-0]:= adr8, иначе PC:=PC+1; | |
JC adr8 | Условный переход, если перенос | Если C¹0, то PC[7-0]:= adr8, иначе PC:=PC+1 | |
JNC adr8 | Условный переход, если нет переноса | Если C=0, то PC[7-0]:=adr8, иначе PC:=PC+1 | |
JZ adr8 | Условный переход, если АС=0 | Если AC=0, то Z:=1; PC[7-0]:=adr8, иначе PC:=PC+1; Z:= 0 | |
JNZ adr8 | Условный переход, если АС не равен нулю | Если AC¹0, то Z:=0; PC[7-0]:=adr8, иначе PC:=PC+1; Z:= 1 | |
JT0 adr8 | Условный переход, если на входе Т0 высокий уровень | Если T0= 1, то PC[7-0]:= adr8, иначе PC:=PC+1 | |
JNT0 adr8 | Условный переход, если на входе Т0 низкий уровень | Если T0= 0, то PC[7-0]:=adr8, иначе PC:=PC+1 | |
JT1 adr8 | Условный переход, если на входе Т1 высокий уровень | Если T1= 1, то PC[7-0]:= adr8, иначе PC:=PC+1 | |
JNT1 adr8 | Условный переход, если на входе Т1 низкий уровень | Если T1= 0, то PC[7-0]:=adr8, иначе PC:=PC+1 | |
JF0 adr8 | Условный переход, если флаг F0 установлен | Если F0= 1, то PC[7-0]:= adr8, иначе PC:=PC+1 | |
JF1 adr8 | Условный переход, если флаг F1 установлен | Если F1= 1, то PC[7-0]:=adr8, иначе PC:=PC+1 | |
JTF adr8 | Условный переход, если флаг переполнения таймера установлен | Если TF=1, то TF:=0; PC[7-0]:=adr8, иначе PC:=PC+1; | |
JNI adr8 | Условный переход, если на входе ^ZPR низкий уровень | Если ZPR=0, то PC[7-0]:=adr8, иначе PC:=PC+1 | |
JBb adr8 | Условный переход, если бит аккумулятора равен единице (b=0-7) | Если AC[b]= 1, то PC[7-0]:=adr8, иначе PC:=PC+1 |
Таблица А.4 - Команды, модифицирующие флаги
№ команды | Мнемоника | PSW CY CA F0 BS | Признаки F1 MB TF Z |
15-17 | ADD | + + - - | - - - - |
18-20 | ADDC | + + - - | - - - - |
CLR C | 0 - - - | - - - - | |
CPL C | + - - - | - - - - | |
CLR F0 | - - 0 - | - - - - | |
CPL F0 | - - + - | - - - - | |
CLR F1 | - - - - | 0 - - - | |
CPL F1 | - - - - | + - - - | |
DA A | + + - - | - - - - | |
JTF | - - - - | - - 0 - | |
MOV PSW,A | + + + + | - - - - | |
RETR | + + + + | - - - - | |
RLC A | + - - - | - - - - | |
RRC A | + - - - | - - - - | |
SEL MB0 | - - - - | - 0 - - | |
SEL MB1 | - - - - | - 1 - - | |
SEL RB0 | - - - 0 | - - - - | |
SEL RB1 | - - - 1 | - - - - | |
DJNZ Rn,adr | - - - - | - - - + | |
JZ adr | - - - - | - - - + | |
JNZ adr | - - - - | - - - + |