- •6 Проектирование микропроцессорных систем на основе однокристальных микропроцессоров
- •6.1 Базовые конфигурации микропроцессора вм86
- •Цикл шины центрального процессора вм86
- •Мультипроцессорные конфигурации на основе цп вм86
- •Методы приоритетной обработки запросов
- •Арбитр шины
- •Режимы работы арбитра шины
- •7 Особенности проектирования микроконтроллерных устройств
- •Типовая структура микроконтроллерной системы управления
- •Особенности разработки аппаратурных и программных средств мк
- •Структурная организация мк к1816ве48
- •Организация памяти мк
- •Организация системы ввода-вывода информации
- •Мпс с внешней памятью программ и данных
- •Система команд микроконтроллера ве48
- •Методика разработки ппо мкс
- •Средства отладки ас и ппо мкс
- •Кросс-системы для разработки и отладки ппо
- •8 Организация цп старших моделей фирмы Intel Внутренняя архитектура цп i486
- •Внутренняя кэш-память цп i486
- •Организация внешней памяти
- •Организация шины процессора и циклы шины
- •Организация передачи данных в циклах шины
- •Построение систем на основе цп i486
- •Контроллер прямого доступа к памяти
- •Основные направления работы фирмы intel по разработке мпс
- •Изделия встроенного управления (микроконтроллеры)
- •Основные отличительные особенности цп семейства Pentium
Кросс-системы для разработки и отладки ппо
Для подготовки текстов, получения объектных кодов и отладки ППО требуются средства автоматизации разработки программ в виде кросс-систем для универсальных мини- и микроЭВМ.
В минимальный состав ПО кросс-систем входят:
-
редактор текстов;
-
программа-транслятор, обеспечивающая преобразование исходного текста ППО в объектный модуль (ASM48, ASM51);
-
редактор внешних связей (LINK), позволяющий включать в программу модули, разработанные независимо друг от друга;
-
программу, обеспечивающую настройку перемещаемых программных модулей на абсолютные адреса (LOCATE);
-
отладчики, интерпретирующие выполнение программ в различных режимах: трассировки, пофрагментного выполнения команд и т.д. и ряд других модулей в зависимости от типа МК или контроллера.
Отладка ППО представляет собой отдельную сложную задачу, которая не поддается формализации и требует высокого профессионализма разработчика.
Отладка также выполняется в несколько этапов:
-
автономная отладка каждой процедуры в статическом режиме, где проверяется правильность вычислений, последовательностей переходов внутри процедуры, отсутствие зацикливаний и т.п.
-
комплексная отладка в статическом режиме, где проверяется правильность алгоритма управления (по последовательности формирования управляющих воздействий);
-
комплексная отладка в динамическом режиме без подключения объекта для определения реального времени выполнения ППО и его отдельных фрагментов.
С помощью отладчиков разработчику предоставлен доступ к любому ресурсу МК, имеется возможность покомандного и пофрагментного исполнения программ и останова по условию, а также подсчета числа тактов выполнения программы или ее фрагментов, инициирования прерываний, дисассемблирования содержимого памяти программ и т.д.
Кросс-отладчики позволяют промоделировать все возможные варианты работы программы, также возможна проверка работоспособности программы при нештатных ситуациях в условиях поступления некорректных входных воздействий.
Наиболее мощные средства отладки позволяют моделировать и среду обитания МК, т.е. различные объекты управления и датчики, подключаемые к нему и другие устройства (через библиотеку моделей объектов и устройств сопряжения с МК). Главным недостатком кросс-систем является невозможность прогона программ в реальном времени МК и комплексной проверки АС и ППО. Эта проблема частично разрешима с помощью отладочных комплексов на основе микроЭВМ, построенной на однотипном процессоре и модулей ВСЭ.
Таблица А.1 - Команды внутренних пересылок и арифметико-логических преобразований
|
№ |
Мнемоника |
|
Выполняемые |
|
п/п |
команды |
Комментарии |
преобразования |
|
|
|
Команды пересылки |
|
|
1 |
MOV A,Rn |
Пересылка регистра в аккумулятор |
AC:= (Rn); Rn=0-7 |
|
2 |
MOV A,@Rn |
Пересылка байта из РПД в аккумулятор |
AC:= [(Rn)]; Rn=0-1 |
|
3 |
MOV A,#dan |
Пересылка непосредственного операнда в аккумулятор |
AC:= dan |
|
4 |
MOV Rn,A |
Пересылка АС в регистр |
(Rn):=AC; Rn=0-7 |
|
5 |
MOV Rn,#dan |
Пересылка непосредственного операнда в регистр |
(Rn):= dan; Rn=0-7 |
|
6 |
MOV @Rn,A |
Пересылка АС в РПД |
[(Rn)]:= AC; Rn=0-1 |
|
7 |
MOV @Rn,#dan |
Пересылка непосредственных данных в РПД |
[(Rn)]:= dan; Rn=0-1 |
|
8 |
MOV A,PSW |
Пересылка PSW в АС |
AC:=PSW |
|
9 |
MOV PSW,AC |
Пересылка АС в PSW |
PSW:= AC |
|
10 |
MOV A,T |
Пересылка таймера/счетчика в АС |
AC:=T |
|
11 |
MOV T,A |
Пересылка АС в таймер/счетчик |
T:=AC |
|
12 |
XCH A,Rn |
Обмен регистра с АС |
AC:=(Rn); (Rn):=AC; Rn=0-7 |
|
13 |
XCH A,@Rn |
Обмен АС с РПД |
AC:= [(Rn)]; [(Rn)]:= AC; Rn=0-1 |
|
14 |
XCHD A,@Rn |
Обмен младших тетрад АС и байта РПД |
AC[3-0]:= [(Rn)][3-0]; [(Rn)][3-0]:= AC[3-0]; Rn=0-1 |
|
81 |
MOVP A,@A |
Пересылка байта из текущей страницы памяти программ в аккумулятор |
PC[7-0]:= AC; AC:=((РС[11-0])); |
|
82 |
MOVР3 A,@А |
Пересылка байта из третьей страницы памяти программ в аккумулятор |
PC[11-8]:= 0011; PC[7-0]:= AC; AC:=((РС[11-0])); |
|
|
|
Команды пересылки с портами |
|
|
83 |
MOVX A,@Rn |
Пересылка байта из ВПД в АС |
AC:=ВПД[(Rn)]; Rn=0-1 |
|
84 |
MOVX @Rn,A |
Пересылка АС во ВПД |
ВПД[(Rn)]:= AC; Rn=0-1 |
|
92 |
MOVD A,Pp |
Ввод тетрады из порта Рр схемы расширителя ВР43 (р=4-7) |
RgCOP:=Pp.00; AC[3-0]:=(Pp); AC[7-4]:=0 |
|
93 |
MOVD Pp,A |
Вывод тетрады в порт Рр схемы расширителя ВР43 (р=4-7) |
RgCOP:=Pp.11 RgPp:=AC; Pp:= RgPp |
|
85 |
OUTL BUS,A |
Пересылка АС в порт BUS |
RgBUS:=AC; BUS:=RgBUS; |
|
88 |
INS A,BUS |
Стробируемый ввод данных из порта BUS |
AC:=BUS |
|
89 |
OUTL Pp,A |
Пересылка АС в порт Рp (р=1,2) |
RgPp:=AC; Pp:=RgPp; |
|
92 |
IN A,Pp |
Пересылка данных из порта Рр в АС |
AC:=RgPp & Pp |
|
|
|
Арифметические команды |
|
|
15 |
ADD A,Rn |
Сложение регистра с аккумулятором |
AC:= (Rn) + AC; Rn=0-7 |
|
16 |
ADD A,@Rn |
Сложение байта из РПД с аккумулятором |
AC:= [(Rn)] + AC; Rn=0-1 |
|
17 |
ADD A,#dan |
Сложение непосредственного операнда с аккумулятором |
AC:= dan + AC |
|
18 |
ADDC A,Rn |
Сложение регистра с аккумулятором и переносом |
AC:= (Rn) + AC + C; Rn=0-7 |
|
19 |
ADDC A,@Rn |
Сложение байта из РПД с аккумулятором и переносом |
AC:= [(Rn)] + AC + C; Rn=0-1 |
|
20 |
ADDC A,#dan |
Сложение непосредственного операнда с аккумулятором и переносом |
AC:= dan + AC + C |
|
30 |
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; |
|
31 |
INC A |
Инкремент аккумулятора |
AC:=AC + 1 |
|
32 |
INC Rn |
Инкремент регистра |
(Rn):=(Rn) + 1; Rn=0-7 |
|
33 |
INC @Rn |
Инкремент байта в РПД |
[(Rn)]:=[(Rn)] +1; Rn=0-7 |
|
34 |
DEC A |
Декремент аккумулятора |
AC:=AC - 1 |
|
35 |
DEC Rn |
Декремент регистра |
(Rn):=(Rn) - 1; Rn=0-7 |
|
|
|
Логические команды |
|
|
21 |
ANL A,Rn |
Логическое И регистра с аккумулятором |
AC:= (Rn) & AC; Rn=0-7 |
|
22 |
ANL A,@Rn |
Логическое И байта из РПД с аккумулятором |
AC:= [(Rn)] & AC; Rn=0-1 |
|
23 |
ANL A,#dan |
Логическое И непосредственного операнда с аккумулятором |
AC:= dan & AC |
|
24 |
ORL A,Rn |
Логическое ИЛИ регистра с аккумулятором |
AC:= (Rn) V AC; Rn=0-7 |
|
25 |
ORL A,@Rn |
Логическое ИЛИ байта из РПД с аккумулятором |
AC:= [(Rn)] V AC; Rn=0-1 |
|
26 |
ORL A,#dan |
Логическое ИЛИ непосредственного операнда с аккумулятором |
AC:= dan V AC |
|
27 |
XRL A,Rn |
Сложение по модулю 2 регистра с аккумулятором |
AC:= (Rn) AC; Rn=0-7 |
|
28 |
XRL A,@Rn |
Сложение по модулю 2 байта из РПД с аккумулятором |
AC:= [(Rn)] AC; Rn=0-1 |
|
29 |
XRL A,#dan |
Сложение по модулю 2 непосредственного операнда с аккумулятором |
AC:= dan AC |
|
36 |
CLR A |
Очистка аккумулятора |
AC:=0 |
|
37 |
CPL A |
Инверсия аккумулятора |
AC:=~AC |
|
38 |
SWAP A |
Обмен тетрад в аккумуляторе |
AC[7-4]:= AC[3-0]; AC[3-0]:= AC[7-4]; |
|
39 |
RL A |
Циклический сдвиг влево аккумулятора |
AC:= L1(AC); AC[0]:= AC[7] |
|
40 |
RLC A |
Сдвиг влево аккумулятора через перенос |
AC:= L1(AC); AC[0]:= C; C:= AC[7] |
|
41 |
RR A |
Циклический сдвиг вправо аккумулятора |
AC:= R1(AC); AC[7]:= AC[0] |
|
42 |
RRC A |
Сдвиг вправо аккумулятора через перенос |
AC:= R1(AC); AC[7]:= C; C:= AC[0] |
|
|
|
Логические команды с портами |
|
|
94 |
ANLD Pp,A |
Логическое И аккумулятора и порта Рр (р=4-7) |
RgCOP:=Pp.01 RgPp:=AC & RgPp; Pp:= RgPp |
|
95 |
ORLD Pp,A |
Логическое ИЛИ аккумулятора и порта Рр (р=4-7) |
RgCOP:=Pp.10 RgPp:=AC V RgPp; Pp:= RgPp |
|
86 |
ANL BUS,#d |
Логическое И константы и порта BUS |
RgBUS:=RgBUS & dan; BUS:=RgBUS |
|
87 |
ORL BUS,#d |
Логическое ИЛИ константы и порта BUS |
RgBUS:=RgBUS V dan; BUS:=RgBUS; |
|
90 |
ANL Pp,#d |
Логическое И константы и порта Рр (р=1,2) |
RgPp:=RgPp & dan; Pp:=RgPp; |
|
91 |
ORL Pp,#d |
Логическое ИЛИ константы и порта Рр (р=1,2) |
RgPp:=RgPp V dan; Pp:=RgPp; |
Таблица А2 - Команды управления режимами работы МК48 и работы с флагами
|
№ |
Мнемоника |
|
Выполняемые |
|
п/п |
команды |
Комментарии |
преобразования |
|
43 |
STRT T |
Запуск таймера |
T:= T + ALE:32 |
|
44 |
STRT CNT |
Запуск счетчика |
T:= T + T0 |
|
45 |
STOP TCNT |
Останов таймера/счетчика |
T:= T |
|
46 |
EN TCNTI |
Разрешение прерываний от таймера |
Et:= 1 |
|
47 |
DIS TCNTI |
Запрещение прерываний от таймера |
Et:= 0 |
|
48 |
EN I |
Разрешение внешнего прерывания |
Eint:= 1 |
|
49 |
DIS I |
Запрещение внешнего прерывания |
Eint:= 0 |
|
50 |
SEL RB0 |
Выбор нулевого банка регистров |
PSW[BS]:=0 |
|
51 |
SEL RB1 |
Выбор первого банка регистров |
PSW[BS]:=1 |
|
52 |
SEL MB0 |
Выбор нулевого банка памяти программ |
MB:=0 |
|
53 |
SEL MB1 |
Выбор первого банка памяти программ |
MB:=1 |
|
54 |
ENTO CLC |
Разрешение выдачи синхросигнала на выход TО |
|
|
55 |
NOP |
Пустая команда |
|
|
56 |
CLR C |
Сброс флага переноса в PSW |
PSW[C]:= 0 |
|
57 |
CLR FO |
Сброс флага F0 в PSW |
PSW[F0]:= 0 |
|
58 |
CLR F1 |
Сброс флага F1 |
F1:=0 |
|
59 |
CPL C |
Инверсия флага переноса в PSW |
PSW[C]:=PSW[~C] |
|
60 |
CPL F0 |
Инверсия флага F0 в PSW |
PSW[F0]:= PSW[~F0] |
|
61 |
CPLF1 |
Инверсия флага F1 |
F1:= ~F1 |
Таблица А.3 - Команды передачи управления
|
№ |
Мнемоника |
|
Выполняемые |
|
п/п |
команды |
Комментарии |
преобразования |
|
62 |
JMP adr11 |
Безусловный переход |
PC[11]:= MB; PC[10-0]:= adr11 |
|
63 |
CALL adr11 |
Вызов подпрограммы |
PC[11]:= MB; PC[10-0]:= adr11; (SP):= PSW[7-4].PC[11-8]; (SP+1):= PC[7-0]; SP:=SP+2 |
|
64 |
RETR |
Возврат из подпрограммы и восстановление PSW |
SP:= SP-1; PC[7-0]:= (SP); SP:=SP-1; PC[11-8]:= (SP)[3-0]; PSW[7-4]:= (SP)[7-4] |
|
65 |
RET |
Возврат из подпрограммы |
SP:= SP-1; PC[7-0]:= (SP); SP:=SP-1; PC[11-8]:= (SP)[3-0]; |
|
66 |
JMPP @A |
Косвенный переход в текущей странице памяти программ |
PC:= PC[11-8] . [AC] ; |
|
67 |
DJNZ Rn,adr8 |
Декремент регистра и переход, если не нуль |
Rn :=(Rn) - 1; Если Rn<>0, то PC[7-0]:= adr8, иначе PC:=PC+1; |
|
68 |
JC adr8 |
Условный переход, если перенос |
Если C0, то PC[7-0]:= adr8, иначе PC:=PC+1 |
|
69 |
JNC adr8 |
Условный переход, если нет переноса |
Если C=0, то PC[7-0]:=adr8, иначе PC:=PC+1 |
|
70 |
JZ adr8 |
Условный переход, если АС=0 |
Если AC=0, то Z:=1; PC[7-0]:=adr8, иначе PC:=PC+1; Z:= 0 |
|
71 |
JNZ adr8 |
Условный переход, если АС не равен нулю |
Если AC0, то Z:=0; PC[7-0]:=adr8, иначе PC:=PC+1; Z:= 1 |
|
72 |
JT0 adr8 |
Условный переход, если на входе Т0 высокий уровень |
Если T0= 1, то PC[7-0]:= adr8, иначе PC:=PC+1 |
|
73 |
JNT0 adr8 |
Условный переход, если на входе Т0 низкий уровень |
Если T0= 0, то PC[7-0]:=adr8, иначе PC:=PC+1 |
|
74 |
JT1 adr8 |
Условный переход, если на входе Т1 высокий уровень |
Если T1= 1, то PC[7-0]:= adr8, иначе PC:=PC+1 |
|
75 |
JNT1 adr8 |
Условный переход, если на входе Т1 низкий уровень |
Если T1= 0, то PC[7-0]:=adr8, иначе PC:=PC+1 |
|
76 |
JF0 adr8 |
Условный переход, если флаг F0 установлен |
Если F0= 1, то PC[7-0]:= adr8, иначе PC:=PC+1 |
|
77 |
JF1 adr8 |
Условный переход, если флаг F1 установлен |
Если F1= 1, то PC[7-0]:=adr8, иначе PC:=PC+1 |
|
78 |
JTF adr8 |
Условный переход, если флаг переполнения таймера установлен |
Если TF=1, то TF:=0; PC[7-0]:=adr8, иначе PC:=PC+1; |
|
79 |
JNI adr8 |
Условный переход, если на входе ^ZPR низкий уровень |
Если ZPR=0, то PC[7-0]:=adr8, иначе PC:=PC+1 |
|
80 |
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
+ + - -
- - - -
56
CLR C
0 - - -
- - - -
59
CPL C
+ - - -
- - - -
57
CLR F0
- - 0 -
- - - -
60
CPL F0
- - + -
- - - -
58
CLR F1
- - - -
0 - - -
61
CPL F1
- - - -
+ - - -
30
DA A
+ + - -
- - - -
78
JTF
- - - -
- - 0 -
9
MOV PSW,A
+ + + +
- - - -
64
RETR
+ + + +
- - - -
40
RLC A
+ - - -
- - - -
42
RRC A
+ - - -
- - - -
52
SEL MB0
- - - -
- 0 - -
53
SEL MB1
- - - -
- 1 - -
50
SEL RB0
- - - 0
- - - -
51
SEL RB1
- - - 1
- - - -
67
DJNZ Rn,adr
- - - -
- - - +
70
JZ adr
- - - -
- - - +
71
JNZ adr
- - - -
- - - +
