КРОСС-СИСТЕМЫ ДЛЯ РАЗРАБОТКИ И ОТЛАДКИ ППО

Для подготовки текстов, получения объектных кодов и отладки ППО требуются средства автоматизации разработки программ в виде кросс-систем для универсальных мини- и микроЭВМ.

В минимальный состав ПО кросс-систем входят:

¨ редактор текстов;

¨ программа-транслятор, обеспечивающая преобразование исходного текста ППО в объектный модуль (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 - - - - - - - +