
- •Тема 1. 7
- •Тема 2. 22
- •Тема 3. 41
- •Тема 4. 83
- •Основные временные параметры микропроцессора кр580ик80а
- •Программное обеспечение микропроцессора
- •Команды перемещения данных
- •Представлением операнда
- •Команды переходов ( альтернативные команды )
- •Специальные команды
- •Кодирование программы
- •Архитектура последовательного интерфейса кр580ик51
- •Управления от мп
- •Архитектура программируемого таймера кр580ви53
- •И микропроцессором
- •Архитектура бис параллельного интерфейса кр580вв55
- •Сигналами ппи
- •Архитектура контроллера прямого доступа к памяти кр580вт57
- •Архитектура бис программируемого контроллера прерываний кр580вн59
- •Генератор тактовыхимпульсов кр580гф24
- •Системный контроллер и шинный формирователь кр580вк28
- •Буферные регистры кр580ир82 и кр580ир83
- •Шинные формирователи кр580ва86 и кр580ва87
- •Пример подключения микросхемы кр580ви53 к микропроцессорной системе через контроллер прерываний кр580вн59
- •Пример подключения аналого-цифрового преобразователя.
- •Пример совместного использования микросхем комплекта для управления технологическим процессом.
- •Декларирование объектов
- •Структура программы
- •Константы
- •Арифметические операции
- •Преобразование типов операндов арифметических операций
- •Побитовые логические операции, операции над битами
- •Функции вывода информации
- •Стандартные математические функции
- •Условные операторы
- •If (условие ) оператор1;
- •If (условие1) оператор1;
- •Пример использования оператора if
- •Циклические операторы while и do–while
- •Пример использования оператора for
- •Строки, как одномерные массивы символов
- •Указатели и операции над адресами
- •Операция sizeof
- •Указатели на указатели
- •Пример динамического размещения одномерного массива в с
Пример подключения аналого-цифрового преобразователя.
Пример подключения трех контроллеров прерываний КР580ВН59 на 22 прерывания.
Получив запрос на прерывание, ведомая микросхема посылает сигнал INT на ведущую. Ведущая выдает сигнал INT (запрос на прерывание) на микропроцессор. Микропроцессор выдает сигнал разрешения на прерывание INT А, по которому ведущая микросхема выдает на ШД команду CALL (вызов подпрограммы) и на шину каскадирования подает номер ведомой микросхемы выдаваемой запрос. Микросхема по второму сигналу INTA выдает на ШДвторой байт команды CALL, а по третьему—третий байт команды CALL.
Для 1-й МС: СКИ1 0 0 0 1 0 100-14Н Для 2-ЙМС: СКИ1 00110100=34Н
СКИ2 ОВН СКИ2 ОВН
СКИЗ 11000000=СОН СКИЗ 00000111=07Н
Для 3-й МС:
СКИ1 01010100=54Н
СКИ2 ОВН
СКИЗ 00000110=ОбН
I МС: MVI A,14H : 1 управляющее слово в регистр А
OUT 88H : 1 управляющее слово заносится в микросхему
MVI А, ОВН : 2 управляющее слово в регистр А
OUt 89H : 2 управляющее слово заносится в микросхему
MVI А, СОН : З управляющее слово в регистр А
OUT 89H : З управляющее слово заносится в микросхему
II МС: MVI А,34Н : 1управляющее слово в регистр А
OUT 84H : 1 управляющее слово заносится в микросхему
MVI А, ОВН : 2 управляющее слово в регистр А
OUT 85H : 2 управляющее слово заносится в микросхему
MVI А,07Н : З управляющее слово в регистр А
OUT 85H : З управляющее слово заносится в микросхему
Ш МС: MVI A, 54H : 1 управляющее слово в регистр А
OUT 80H : 1 управляющее слово заносится в микросхему
MVI А. ОВН : 2 управляющее слово в регистр А
OUT 81H : 2управлягощее слово заносится в микросхему
MVI A, 06H : З управляющее слово в регистр А
OUT 81H : З управляющее слово заносится в микросхему
Алгоритм работы
Фрагмент программы
LXI ,H ADR |
: в рег. пару HL заносится адрес мл. байта кода результата : преобразования |
MVT А ООН |
: откл |
OUT 83H |
:АЦП |
MVI A, 03H |
: вкл регистра 1(DD1) |
OUT 83H |
: |
IN 80H |
:чтение из порта А |
MOV M, A |
:загрузка в М содержимого регистра А |
INX H |
: содержание HL увеличивается на 1 для получения адреса старшего байта |
MVI A, 02H |
: откл. регистра 1 (DD2) |
OUT 83H |
|
MVI A.05H |
:вкл. регистра 2 (DDЗ) |
OUT 83H |
|
IN 80H |
: чтение из порта А |
MOV M, A |
: запоминание в М содержимого регистра А |
MVI A. |
: откл. регистра 2 (DD3) |
OUT 83H |
: |
Пример совместного использования микросхем комплекта для управления технологическим процессом.
Пример подключения цифро-аналогово преобразователя.
Алгоритм
Фрагмент программы
LXIH ADR MOV А. М OUT ЗОН |
: в I HL заносятся адрес мл. бита кода : запись в регистр1 (DD2), младший байт в аккумулятор |
MVI A. 01H OUT 83H |
: вкл. Регистра 1(DD2) |
MVI А. 00Н OUT 83H |
: откл. регистра l(DD2) |
INX H MOV A,M OUT 80H |
: адресе старшего байта : старший байт в аккумулятор : старший байт в порт А |
MVI A,03H OUT 83H |
: вкл. Регистра 2 (DD3) |
MVI A, 02H OUT 83H |
:откл. регистра 2 (DD3) |
MVI А, 05Н OUT 83H |
: запись в ЦАП из : регистра 1, 2 одновременно |
MVI A. 04H OUT 83H |
:откл. регистров |
Спроектировать систему управления перемещением тележки по горизонтальной направляющей длиной L, на основе микропроцессорных БИС. Тележка приводится в движение двигателем постоянного тока параллельного возбуждения, управляемым преобразователем, который обеспечивает плавный разгон и торможение с заданной интенсивностью КИ1 и КИ2 =dn/dt [об/мин за сек] и дальнейшую работу двигателя с постоянной А. Преобразователь управляется постоянным напряжением Uу по закону Uвых=Ку*Uу. Микропроцессорная система управления обеспечивает защиту двигателя от перегрузки по току Imах с выдержкой времени tз и превышения скорости Nmах мгновенно. Программа должна обеспечивать движение в любую сторону.
Длина участка разгона и торможения с КИ1 равна L1, а с КИ2 равна L2. Полный путь L разбивается на участки по параметру В. Датчик скорости выдает сигнал Un. Передаточный коэффициент линейной скорости V через угловую скорость n равен Кn==V/n [м/с/об/мин]. Предусмотреть контроль скорости на участке L1 и включение тормоза в конце пути.
Исходные данные: L=400м, L1=20 м; L2=50 м; Ку=11; UУ=±10 B; КИ1=1 об/мин за сек; КИ2=50об/мин; Кn=1 .10-3 м/с/об/мин; IMAX=50 A; tз=0.4 с; NMAX= 2500 об/мин, Un = 0,005 n.
Рабочая установка представляет собой тележку, которая совершает движение по прямолинейному участку L.
Тележка приводится в движение двигателем постоянного тока параллельного возбуждения, управляемый преобразователем, который обеспечивает плавный разгон и торможение с заданной интенсивностью КИ1 и КИ2 и дальнейшую работу двигателя с постоянной скоростью. Преобразователь управляется постоянным напряжением Uу по закону Uвых=Ку*Uу.
Длина участка разгона и торможения с КИ1 равна L1 а с КИ2 - L2. Полный путь L разбивается на участки по параметрам L1 - датчики, L2 - время.
Датчики SА3 и SА4 на участке L1 должны срабатывать при прохождении тележки возле них и воздействии наних постоянным магнитом.
Датчики SА1 и SА2 используются для полной остановки тележки.
Расчет параметров движения:
1) al = Kи1 . Kna1 =1 .10-3 м/с2
2)
V1-Скорость в конце L1; V1=al .tl =
1.10-3.200=0,2
м/с
3) nl – Частота вращения двигателя в конце пути (L1) nl=KИl .tl= 1. 200 = 200 об/мин
4)
Время перехода участка (t2)
По расчёту: t2 =40.9 с
5) V2= V1+ a2t2 = 0,2+0,05.40,9 = 2,245 м/c
6) n2= nl+KИ2t2= 200+50.40,9 = 2245 об/мин n2-не должно превышать заданное максимальное значение nmax.
7) Рассчитываем длинну участка L3:
L3=L-2L1-2L2=260 м
8) Рассчитываем время движения на третьем участке:
|
|
|
|
9) Из уравнения скорости идеального Х.Х.
|
|
|
|
|
|
|
|
|
|
|
|
10) Iя Rя Рассчитывается для номинального режима
Для большинства машин постоянного тока nH меньше n0 на 5%, поэтому
|
|
|
|
11) Примем, что скорость в конце L2 и на L3 номинальная т.е. n2=nH и рассчитаем напряжение на двигателе в конце L2и на L3
|
|
|
|
U2= n2-СEФ + IяRя = 2245 . 0,044+5,5 = 104.28 В
12) Так как для механизма всегда справедливо соотношения
|
|
|
|
13) U1= n1-СEФ + IяRя = 200.0,044+0,11 = 8,91 В
|
|
|
|
14) Строим диаграмму, для этого необходимо полное время движения тележки
|
|
|
|
t := 2tl + 2t2+t3=597.613c
15) Определим время дискретизации Δt и ΔU
Промежуток времени через который на ЦАП выводится новое значение напряжения управления. Изменения значения напряжения управления не должно превышать 3% от полного изменения напряжения на участке. Выбирается участок с наибольшим ускорением L2.
(UУl)/tl=0,03/Δt
t2=ΔUy2/Δt; ΔUyl=(Uy2-Uyl)* Δt/t2-tl
Δt=0.03-t2 = 7.227
ΔUyl=UУ1 Δt/t1 =0.029 В
Δuy2=UУ2 Δt/t2 =0.284 В
Определим разрядность ЦАП Uref;= 10 Uy=n*Uref; n=Uyl/Uref
n = ΔUyl/Uref=0.0029
Теперь переведем это число в двоичный код:
n=2.927-10-3 n1 =5.854-10-3 n2=0.012 n3=0.023 n4=0.047 n5=0.094 n6=0.187 n7=0.375 n8=0.749 n9=1.499 n10= 2.997
Разрядность ЦАП получаем 10
Выбор датчика скорости
Определение разрядности АЦП
Датчик скорости выбирается из условия: nдc>nmах. В зависимости от этого принимаем датчик скорости или тахометр тока ТМГ-30П возбуждаемый постоянными магнитами. Паспортные данные ТМГ-30П. Р2= 20Вт; V= 230 В;
I = 0,087A; n= 4000об/мин;
|
|
|
|
Rn = 2650 0м
По условию выбранный датчик подходит Для определения разрядности АЦП построим характеристику
U0=144B; n0=2500 nmin=50 Uirn=5 B Найдем Umin
Umin=U0nmin/n0=2.88 B
Найдем минимальное напряжение на входе АЦП
Uirnmin=UirnUmin/U0=0.1 B
Uirnmin =0.1 Uirnmin1 =0.2 Uirnmin2 =0.4 Uirnmin3 =0.8 Uirnmin4 = 0.6 Uirnmin5 = 1.2 Uirnmin6 == 2.4 Uirnmin7 = 4.8 Uirnmin8 =9.6 Uirnmin9 = 19.2 Uimmin =0.1 Разрядность АЦП получаем 5
Таблица прерываний.
IRQO |
SAI |
подастся "0", на выходе ЦАП ступенчато возрастает напряжение На механический тормоз подастся "1", на выходе ЦАП напряжение исчезает DB -> "0" |
|
IRQI |
SA2 |
На механический тормоз подастся "1", на выходе ЦАП напряжение исчезает DB -> "0" На механический тормоз подается "0", на выходе ЦАП ступенчато возрастает напряжение |
|
IRQ2 |
SA3 |
Запускается таймер загружая коэффициент и подается сигнал на СЕ. И изменяем величину напряжения Изменяем величину напряжения производим проверку (т.е сравниваем теоретическое значение с действительным) |
|
IRQ3 |
SA4 |
Измеряем величину изменения напряжения, производим проверку Запуск таймера ( подаем сигнал на СЕ, загружаем коэффициент изменяем ДУ |
|
IRQ4 |
SAI |
При поступлении сигнала запускаем таймер на отсчет t3. После отсчета напряжения на "0", включается механический тормоз DC7 -> "1" |
|
IRQ6 |
CЧ2(OUT1) |
Отключается таймер, величину напряжения ди = 0, загружаем новый коэффициент, запускаем таймер |
|
IRQ5 |
C41(OUT2) |
Увеличиваем напряжение на ΔU |
|
IRQ7 |
RAD |
Считываем данные с АЦП |
|
Программа с помощью которой задается движение тележки веред и назад.
Инициализация системы.
Адрес |
код |
команда |
Комментарий |
|
3E90H |
MVI А,90Н |
УВВ упр. слово 10010000 (90H) |
|
D383H |
OUT 83H |
|
|
3E36H |
MVI А,36Н |
СЧ 0 упр. слово 00110110 36Н |
|
D387H |
OUT 87Н |
|
|
3E20H |
MVI A,20H |
Загрузка коэффициента N0=20000 |
200A |
D384H |
OUT 84H |
|
200C |
3E4EН |
MVI A,4EH |
|
200E |
D384H |
OUT 84H |
|
|
3E74H |
MVI A,74H |
СЧ 1 упр. слово 01110100(74Н) |
|
D387H |
OUT 87Н |
|
|
3EB2H |
MVI A,B2H |
СЧ 2 упр. слово 10110010(В2Н) |
|
D387H |
OUT 87Н |
|
|
3Е12Н |
MVI A,12H |
КППСКИ1 00010010(12Н) |
201A |
D388H |
OUT 88H |
|
201C |
3E09H |
MVI A,09H |
СКИ2 00001001(09Н) |
201E |
D389H |
OUT 89H |
|
Подпрограмма прерываний КПП.
|
CD0050 |
CALL конт1 |
IRQO |
|
|
C9 |
RET |
|
|
|
CD0D50 |
CALL конт2 |
IRQ 1 |
|
090В |
C9 |
RET |
|
|
|
CD1A50 |
CALL конт3 |
|
|
|
C9 |
RET |
|
|
|
CD2E50 |
CALL конт3 |
IRQ 2 |
|
|
C9 |
RET |
|
|
|
CD2450 |
CALL конт4 |
|
|
|
C9 |
RET |
|
|
|
CD3850 |
CALL конт4 |
IRQ3 |
|
|
C9 |
RET |
|
|
|
CD5551 |
CALL защ. |
IRQ 4 |
|
|
C9 |
RET |
|
|
|
CD |
CALL |
IRQ 5 |
|
092B |
C9 |
RET слог. |
|
|
|
CD |
CALL время2 |
IRQ 6 |
|
|
C9 |
RET |
|
|
|
CD |
CALL |
IRQ7 |
|
093B |
C9 |
RET |
|
|
Основная программа (движение вперед).
адрес |
код |
метка |
команда |
Комментарий |
|
CD4D51 |
|
CALL |
обнул. ячейку содерж. информ. о датчике |
|
CD6A51 |
прогр1 |
CALL |
откл мех. тормоз f |
|
CD3051 |
|
CALL |
устанавливаем знак "+" |
|
CD050 |
|
CALL |
включаем счетчик 1 на Δt |
ЗООС |
CD5050 |
|
CALL |
заносим ΔUу1 в регистр |
300F |
CDA050 |
|
CALL |
заносим кол-во байт числа |
|
CDB050 |
мук1 |
CALL |
вызываем подпрограмму сложения |
|
CD 1551 |
|
CALL |
вывод на ЦАП |
|
CD1A50 |
|
CALL |
проверка сигнала с датчика SA3 |
301B |
CDED50 |
прогр2 |
CALL |
включаем счетчик 2 на t2 9 |
301E |
CD5B50 |
|
CALL |
заносим дПу2 в регистр |
|
CDA050 |
|
CALL |
заносим кол-во байт числа |
|
CDB050 |
мук2 |
CALL |
вызываем подпрограмму сложения |
|
CD1551 |
|
CALL |
вывод на ЦАП |
302D' |
CDFA50 |
прогрЗ |
CALL |
включаем счетчик 2 на t3 ^ |
|
CD6650 |
|
CALL |
заносим Δuу3=0 в регистр |
|
CDA050 |
|
CALL |
Заносим кол-во байт числа |
|
CDB050 |
мукЗ |
CALL |
Вызываем подпрограмму сложения |
|
CD1551 |
|
CALL |
Вывод на ЦАП |
303C |
|
|
|
|
303F |
CD7F50 |
прогр4 |
CALL |
Заносим (-ΔUу2) в регистр |
|
CDA050 |
|
CALL |
Заносим кол-во байт числа |
|
CDB050 |
мук4 |
CALL |
Сложение |
|
CD1551 |
|
CALL |
Вывод на ЦАП |
304B |
CD 2450 |
|
CALL |
Проверка сигнала с датчика SA4 |
304E |
CD7150 |
прогр5 |
CALL |
Заносим (-ΔUyl)B регистр |
|
CDA050 |
|
CALL |
Заносим кол-во байт числа |
|
CDB050 |
мук5 |
CALL |
Сложение |
|
CD1551 |
мук6 |
CALL |
вывод на ЦАП |
305A |
CD8750 |
|
CALL |
заносим (-AUim) в регистр |
305D |
CD9250 |
|
CALL |
заносим AUim в регистр |
|
CDOB50 |
|
CALL |
сложение |
|
CD4051 |
|
CALL |
проверка скорости |
|
CD0В50 |
|
CALL |
проверка сигнала с датчика SA2 |
|
CD6F51 |
|
CALL |
напряжение исчезает |
Основная программа (движение назад)
адрес |
код |
Метка |
Команда |
Комментарий |
306С |
CD4D51 |
|
CALL |
обнул. ячейку содерж. информ. о датчике |
306F |
CD6A51 |
Прогр6 |
CALL |
откл мех. тормоз |
|
CD3551 |
|
CALL |
устанавливаем знак "-" |
|
CDE050 |
|
CALL |
включаем счетчик 1 на At |
|
CD7150 |
|
CALL |
заносим –ΔUyl в регистр |
307В |
CDA050 |
|
CALL |
заносим кол-во байт числа |
307В |
CDB050 |
мук4' |
CALL |
вызываем подпрограмму сложения |
|
CD 1551 |
|
CALL |
вывод на ЦАП |
|
CD2450 |
|
CALL |
проверка сигнала с датчика SA4 |
|
CDED50 |
Прогр7 |
CALL |
включаем счетчик 2 на t2 |
308A |
CD7C50 |
|
CALL |
заносим –ΔUy2 в регистр |
308D |
CDA050 |
|
CALL |
заносим кол-во байт числа |
|
CDB050 |
мук2 |
CALL |
вызываем подпрограмму сложения |
|
CD 1551 |
|
CALL |
вывод на ЦАП |
|
|
|
|
|
|
CDFA50 |
Прогр8 |
CALL |
включаем счетчик 2 на t3 |
309C |
CD6650 |
|
CALL |
заносим ΔUу3=0 в регистр |
309F |
CDA050 |
|
CALL |
заносим кол-во байт числа |
30A2 |
CDB050 |
Мук3 |
CALL |
вызываем подпрограмму сложения |
30A5 |
CD 1551 |
|
CALL |
вывод на ЦАП |
30A8 |
|
|
|
|
30AB |
CD5B50 |
прогр9 |
CALL |
заносим ΔUу2 в регистр |
30АЕ |
CDA050 |
|
CALL |
заносим кол-во байт числа |
30В1 |
CDB050 |
мук 1* |
CALL |
сложение |
30В4 |
CD 1551 |
|
CALL |
вывод на ЦАП |
30В7 |
CD1A50 |
|
CALL |
проверка сигнала с датчика SA3 |
30ВА |
CD5050 |
Прогр10 |
CALL |
заносим дUу1 в регистр |
30BD |
CDA050 |
|
CALL |
заносим кол-во байт числа |
30С0 |
CDB050 |
мук5' |
CALL |
Сложение |
30С3 |
CD 1551 |
Мук6 |
CALL |
вывод на ЦАП |
30С6 |
CD8750 |
|
CALL |
заносим (-дUirn) в регистр |
30С9 |
CD9250 |
|
CALL |
заносим дUirn в регистр |
30СС |
CDB050 |
|
CALL |
Сложение |
30CF |
CD4051 |
|
CALL |
проверка скорости |
30D2 |
CD0050 |
|
CALL |
проверка сигнала с датчика SA на срабатывание |
30D5 |
CD6F51 |
|
CALL |
напряжение исчезает |
30D8 |
|
|
HLT |
|
Таблица памяти МП.
<HL> |
|
Датчики |
|
|
+дUу1 |
|
|
+дUу2 |
|
040C |
дUу3=0 |
|
|
-дUу2 |
|
|
-дUу1 |
|
|
-дUirn |
<ВС> |
|
Uy |
|
|
Uirn |
Подпрограмма проверки сигнала с датчиков.
адрес |
код |
метка |
команда |
Комментарий |
|
|
конт1 |
LXI Н,0400Н |
загрузка адреса в HL |
|
ЗА |
|
LDAXH |
загрузка числа в <А> из <HL> |
|
E601 |
|
ANI 01Н |
лог "и" (маска 01Н) |
|
CC C030 |
|
CZMyK5" |
вызов подпрограммы |
|
CD6551 |
|
CALL вкл.т. |
вызов подпрограммы |
500C |
C9 |
|
RET |
выход из подпрограммы |
500D |
|
конт2 |
LXI Н,0400Н |
|
|
ЗА |
|
LDAXH |
|
|
E601 |
|
ANI 02H |
лог "и" (маска 02H) |
|
CC 5430 |
|
CZMyK5 |
|
|
CD6551 |
|
CALL вкл.т. |
вызов подпрограммы |
|
C9 |
|
RET |
выход из подпрограммы |
501A |
|
контЗ |
LXI Н,0400Н |
|
501D |
ЗА |
|
LDAXH |
|
501E |
E604 |
|
ANI 04H |
лог "и" (маска 04H) |
|
CC 1230 |
|
CZ мyк 1 |
|
|
C9 |
|
RET |
выход из подпрограммы |
|
|
конт4 |
LXI Н,0400Н |
|
|
3А |
|
LDAXH |
|
|
E608 |
|
ANI 08H |
лог "и" (маска 08H) |
502A |
CC1530 |
|
CZ мyк 4 |
|
502D |
C9 |
|
RET |
выход из подпрограммы |
5052E |
|
контЗ* |
LXI Н,0400Н |
|
|
ЗА |
|
LDAXH |
|
|
E604 |
|
ANI 04H |
лог "и" (маска 04H) |
|
CCB130 |
|
CZ мyк 1* |
|
|
C9 |
|
RET |
выход из подпрограммы |
|
|
конт4' |
LXI Н,0400Н |
|
503B |
ЗА |
|
LDAXH |
|
503C |
E608 |
|
ANI 08H |
лог "и" (маска 08H) |
503E |
CC 7E30 |
|
CZ мyк 4' |
|
|
C9 |
|
RET |
выход из подпрограммы |
Подпрограмма загрузки ΔUу в регистр.
адрес |
код |
метка |
команда |
Комментарий |
|
|
напр1 |
LXI Н,0404Н |
загрузка адреса в HL |
|
3E80 |
|
MVI А,80Н |
загрузка младшего байта ΔUу1 в<А> |
|
|
|
MOV M,A |
|
|
|
|
INX H |
Увеличить адрес на 1 (т.е 0405Н) |
|
3EOO |
|
MVI А,00Н |
загрузка старшего байта ΔUyl в <А> |
|
|
|
МОV М,A |
|
505A |
C9 |
|
RET |
выход из подпрограммы |
505B |
|
Напр2 |
LXI Н,0408Н |
загрузка адреса в HL |
505E |
3EOO |
|
MVI А,00Н |
загрузка младшего байта ΔUу2 в<А> |
|
|
|
MOV M,A |
|
|
|
|
INX H |
|
|
3E04 |
|
MVI A,04H |
загрузка ст байта ΔUy2 в <А> |
|
|
|
МОV М,A |
|
|
C9 |
|
RET |
выход из подпрограммы |
|
210C04 |
НапрЗ |
LXI H,040CH |
загрузка адреса в HL |
|
3EOO |
|
MVI А,00Н |
загрузка младшего байта ΔUуЗ в<А> |
506B |
|
|
МОV М,A |
|
506C |
|
|
INX H |
|
506D |
3EOO |
|
MVI A,00H |
загрузка старшего байта ΔUуЗ в <А> |
506F |
|
|
MOV M,A |
|
|
C9 |
|
RET |
выход из подпрограммы |
|
|
Напр5 |
LXI H,0414H |
загрузка адреса в HL |
|
3E80 |
|
MVI А,80Н |
загрузка младшего байта (-ΔUyl) в <А> |
|
|
|
MOV M,A |
|
|
|
|
INX H |
|
|
3EFF |
|
MVI A,FFH |
загрузка старшего байта (-ΔUyl)в <А> |
507A |
|
|
MOV M,A |
|
507В |
C9 |
|
RET |
выход из подпрограммы |
507C |
|
Напр4 |
LXI H,0410H |
загрузка адреса в HL |
507F |
3E00 |
|
MVI A,00H |
загрузка младшего байта (-ΔUy2) в <А> |
|
|
|
МОV М,A |
|
|
|
|
INX H |
|
|
3EFC |
|
MVI A,FCH |
загрузка старшего байта (-ΔUy2) в <А> |
|
|
|
MOV M,A |
|
|
C9 |
|
RET |
выход из подпрограммы |
|
|
Напр6 |
LXI H,0418H |
загрузка адреса в HL |
508A |
3E00 |
|
MVI A,00H |
загрузка младшего байта (-Uirn) в <А> |
508C |
|
|
MOV M,A |
|
508D |
|
|
INX H |
|
508E |
3EF0 |
|
MVI A,F0H |
загрузка старшего байта (-Uirn) в <А> |
|
|
|
MOV M,A |
|
|
C9 |
|
RET |
выход из подпрограммы |
|
|
Ном |
LXI B,0504H |
загрузка адреса в ВС |
|
3E00 |
|
MVI A,00H |
загрузка младшего байта (Uirn) в <А> |
|
|
|
MOV M,A |
|
|
|
|
INX B |
|
|
3E80 |
|
MVI A,80H |
загрузка старшего байта (Uirn) в <А> |
509B |
|
|
MOV M,A |
|
509C |
C9 |
|
RET |
выход из подпрограммы |
Подпрограмма загрузки числа байтов.
адрес |
код |
метка |
Команда |
Комментарий |
50А0 |
|
число |
LXI В,0500Н |
загрузка адреса в ВС |
50А3 |
1Е02 |
|
MVI Е,02Н |
загрузка числа в регистр Е |
50А5 |
С9 |
|
RET |
выход из подпрограммы |
Подпрограмма сложения.
адрес |
код |
Метка |
Команда |
Комментарий |
50ВО |
|
Слог1 |
MOV D,E |
запоминаем количество байт |
50В1 |
С5 |
|
PUSH В |
запоминаем адр. младш, байта 1 слагаемого |
50В2 |
AF |
|
XRA A |
|
50В3 |
0А |
м1 |
LDAX B |
перенос в <А> младшего байта первого слагаемого |
50В4 |
8Е |
|
ADC M |
сложение содержимого <А> с ячейкой <М> |
50В5 |
ID |
|
DCR E |
уменьшаем счетчик байт на 1 |
50В6 |
CABF50 |
|
JZM2 |
условие = 0 то переход на М2 |
50В9 |
|
|
STAX B |
запоминаем байт суммы по адресу наход. <ВС> |
ЗОВА |
|
|
INX B |
увеличиваем на 1 вычисляется адрес |
50ВВ |
|
- |
INXBH |
увеличиваем на 1 следующего байта |
50ВС |
C3B350 |
|
JMPM1 |
безусловный переход на М1 |
50BF |
|
м2 |
MOV E,A |
проверка на переполнение ст. байта, сум в <Е> |
50СО |
ОА |
|
LDAX B |
загрузка старшего байта 1 слаг. в<А> |
50С1 |
AE |
|
XRA M |
искл "или" над <А> и <М> |
50С2 |
7В |
|
MOV A,E |
перенос в <А> суммы старшего байта |
50СЗ |
|
|
STAX B |
запоминаем байт суммы по адресу наход. <ВС> |
50С4 |
|
|
STC CY=1 |
установить триггер переноса в 1(CY=1) |
50C5 |
FACF50 |
|
JM M3 |
<0 то М3 |
50C8 |
7E |
|
MOV A,M |
Загрузка старшего байта 2 слаг. в<А> |
50C9 |
AB |
|
XRA E |
искл"или" над <А> и <Е> |
50CA |
|
|
STC CY=1 |
установить триггер переноса в 1 (CY=1) |
50CB |
FACF50 |
|
JM M4 |
<0 то М4 |
50CE |
ЗЕ |
м3 |
CMC |
(CY=0) |
50CF |
Cl |
м4 |
POP В |
восстановить содерж. регистра <ВС> |
50DO |
|
|
MOV E,D |
из D в Е (восстон. в per Б кол-во байт) |
50DI |
C9 |
|
RET |
возврат из подпрограммы |
Подпрограмма включения счетчиков на время.
адрес |
код |
метка |
Команда |
Комментарий |
50ЕО |
ЗЕ02 |
время 1 |
MVI А,02Н |
загрузка младшего байта Δt в <А> |
50Е2 |
D385 |
|
OUT 85Н |
|
50Е4 |
3E2D |
|
MVI A,2DH |
загрузка старшего байта Δt в <А> |
50Е6 |
D385 |
|
OUT 85Н |
|
50Е8 |
ЗЕ07 |
|
MVI A,07H |
запуск счетчика 1 (DC3=> "1") |
50ЕА |
D382 |
|
OUT 82H |
|
50ЕС |
C9 |
|
RET |
выход из под программы |
50ED |
ЗЕ1А |
время2 |
MVI A,IAH |
загрузка младшего байта t2 в <А> |
50EF |
D386 |
|
OUT 86H |
|
50FI |
ЗЕ5Е |
|
MVI A,5EH |
загрузка старшего байта t2 в <А> |
50F3 |
D386 |
|
OUT 86H |
|
50F5 |
ЗЕ09 |
|
MVI A,09H |
запуск счетчика 2 (DC4=> "1") |
50F7 |
D382 |
|
OUT 82H |
|
50F9 |
C9 |
|
RET |
выход из под программы |
50FA |
3E3D |
Время3 |
MVI A,3DH |
загрузка младшего байта t3 в <А> |
|
D381 |
|
OUT 81H |
|
|
ЗБ04 |
|
MVI A,04H |
отключение регистра DD7 (DC2=>0) |
512В |
D382 |
|
OUT 82H |
|
512D |
0В |
|
DCX B |
уменьшаем адрес ячейки на 1 |
512E |
C9 |
|
RET |
выход из подпрограммы |
Подпрограмма учитывающая знак напряжения управления.
адрес |
код |
метка |
команда |
Комментарий |
|
3Е0В |
Знак1 |
MVI А,0ВН |
увеличиваем DC5 в 1 (знак +) |
|
D383 |
|
OUT 83H |
|
|
C9 |
|
RET |
выход из подпрограммы |
|
|
|
|
|
|
3ЕОА |
знак2 |
MVI А,0АН |
увеличиваем DC5 в 0 (знак -) |
|
D383 |
|
OUT 83H |
|
|
C9 |
|
RET |
выход из подпрограммы |
Подпрограмма контроля скорости.
адрес |
код |
метка |
команда |
Комментарий |
|
3E00 |
контр |
MVI A,00H |
вывод напряжения с АЦП |
|
D381 |
|
OUT 81H |
из порта В во внешнее устройство |
|
3EF8 |
|
MVI A,F8H |
|
|
D381 |
|
OUT 81H |
|
|
|
|
SUB В |
Вычитание <В> из <А> |
|
F4 |
|
CP MUK5 |
вызов подпрограммы |
514C |
FC |
|
CM MUK6 |
|
Подпрограмма обнуления ячейки с информацией о датчиках.
адрес |
код |
метка |
команда |
Комментарий |
514D |
|
обнуление |
LXI Н,0400Н |
загрузка адреса в <HL> |
|
ЗЕ00 |
|
MVI А,ООН |
перенос нолей в <А> |
|
|
|
MOV М,А |
перенос <А> в <М> |
|
C9 |
|
RET |
выход из подпрограммы |
Подпрограмма отключения системы, если ток превысил Imax .
адрес |
код |
метка |
команда |
Комментарий |
|
|
защита |
LXI Н,0400Н |
проверка датчика тока на срабатывание |
|
ЗЕ10 |
|
MVI А, 10Н |
|
515А |
P6 |
|
ORA M |
|
515В |
|
|
МОV М,A |
|
551С |
3E08 |
|
MVI А,08Н |
|
515Е |
T383 |
|
OUT 83H |
|
|
CD0751 |
|
CALL врсмя4 |
вызов подпрограммы время4 |
|
C9 |
|
RET |
выход из подпрограммы |
Подпрограмма включения и отключения тормоза.
адрес |
код |
метка |
команда |
Комментарий |
|
3E0F |
вкл. тормоз |
MVI A,0FH |
установка DC7=> 1 |
|
D382 |
|
OUT 83Н |
|
|
C9 |
|
RED |
выход из подпрограммы |
516А |
3E0F |
откл. тормоз |
MVI А,0ЕН |
установка DC7=>0 |
516С |
D382 |
|
OUT 83H |
|
516Е |
C9 |
|
RET |
выход из подпрограммы |
Подпрограмма установления напряжения на «О».
адрес |
код |
метка |
команда |
Комментарий |
516F |
3E03 |
ноль |
MVI А,03Н |
установка DC7=> 1 включение DD6 |
|
D382 |
|
OUT 82H |
|
|
3E00 |
|
MVI А,00Н |
вывод нолей во внешнее устройство DD6 |
|
D381 |
|
OUT 81H |
с порта В |
|
ЗБ02 |
|
MVI А,02Н |
установка DC 1 =>0 включение DD6 |
|
D382 |
|
OUT 82H |
|
517В |
3E05 |
|
MVI А,05Н |
установка DC2=> 1 включение DD7 |
517D |
D382 |
|
OUT82H |
|
517F |
3E00 |
|
MVI А,00Н |
вывод нолей во внешнее устройство DD7 |
|
D381 |
|
OUT 81H |
с порта В |
|
3E04 |
|
MVI А,04Н |
установка DC2->0 отключение DD7 |
|
D382 |
|
OUT 82H |
|
|
C9 |
|
RET |
выход из подпрограммы |