КРОСС-СИСТЕМЫ ДЛЯ РАЗРАБОТКИ И ОТЛАДКИ ППО
Для подготовки текстов, получения объектных кодов и отладки ППО требуются средства автоматизации разработки программ в виде кросс-систем для универсальных мини- и микроЭВМ.
В минимальный состав ПО кросс-систем входят:
¨ редактор текстов;
¨ программа-транслятор, обеспечивающая преобразование исходного текста ППО в объектный модуль (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 | - - - - | - - - + |