Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CEC.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
649.88 Кб
Скачать

2.1. Расчет массива данных угловой скорости двигателя

Расчет сведен в таблицу где, каждому значению скорости соответствует адрес ячейки памяти. Массив данных представлен в приложении 1 на оптическом носителе.

Как видно из соответствующего столбца – ошибка расчетов не превышает заданных 0,5%. Так же стоит отметить что число опросов при минимальной скорости занимает 2 байта. следовательно для счетчика опросов необходимо использовать регистровую пару, выберем (BC), а для подсчета дробных значений скорости регистровую пару (DE). В возможных промежутках между вычисленными значениями будет помещаться ближайшее меньшее.

2.2. Подробная блок-схема алгоритма решения задачи для мп кр580вм80а

Рисунок 4. Логическая блок-схема фрагмент 1

Рисунок 5. Логическая блок-схема фрагмент 2

Рисунок 6. Логическая блок-схема фрагмент 3

2.3. Описание алгоритма программы для мп кр580вм80а

Для начала следует загрузить все вспомогательные данные в регистры общего назначения: счетчик дробных значений скорости 1, счетчик числа опросов 2, маска выделения нулевого бита 3.

Далее следует 6 блоков «синхронизации» необходимых для того что бы определить начало импульса. Они состоят из: ввода данных из ВУ – 4, выделения нулевого бита – 5, переход по условию нулевого признака – 6, блоки – 7, 8 и 9 соответственно выполняют аналогичные функции.

С блока 10 начинается первый цикл опроса, в нем производим инкрементирование счетчика числа опросов и декрементирование счетчика дробных значений, после чего происходит ввод данных из ВУ через порт 9Е – 12, выделение нулевого бита данных –12, Условный переход по нулевому признаку – 13, с помощью него будет отслеживаться момент прекращения импульса и снижение уровня сигнала до «0».

После того как был изменен уровень сигнала, соответствии с данными в счетчике (BC) и (DE) в регистр (А) попеременно загружаются данные из ячееки массива, сначала следует целое значение и спустя 3,5 мкс (7тактов) на выходной порт следует дробное значение, блоки 14 – 17. Как только данные были отправлены необходимо очистить счетчик числа опросов (BC) и (DE), но их следует вернуть не к начальному состоянию, а заведомо учесть 2 пропущенных опроса, блоки 18 – 19, так как согласно рис.3 именно столько мы запланировали времени и тактов обрабатывать и выдавать информацию. Рассмотрим подробнее: один опрос следует 34 такта, что означает что обработку и вывод информации нужно уложить в 34 или же в 68, 102 и т.д. в нашем случае достаточно 68, именно поэтому при переходе к каждому последующему опросу порта мы будет подразумевать, что два опроса по 34 тактов уже были совершены. Для того что бы алгоритм вывода занял ровно 68 такта следует подобрать соответствующий блок задержки – 20, в нашем случае он составляет 14 тактов и выполнен командой NOP и командой безусловного перехода JMP.

Следующий цикл опроса, обработки и выдачи информации, аналогичен описанному, за исключением того что выполняется для другого уровня сигнала.

2.4. Описание программы на языке Ассемблера и в машинных кодах мп кр580

Таблица 4 Машинные коды и Ассемблер для МП КР580

Метка

Адрес

Данные

Ассемблер

Мнемоника

Комментарии

1

2

3

4

5

6

0000

11

LXI D, 0CAA

(DE)←0CAA

Загрузка счетчика дробных знач.

0001

AA

0002

0C

0003

01

LXI B, 0000

(BC)←0000

Загрузка счетчика целых значений

0004

00

0005

00

0006

26

MVI H, 01

(H)←01

Загрузка маски выделения нулевого бита

0007

01

М1

0008

DB

IN 9E

(A)←port 9E

Опрос порта 9E

0009

9E

000A

A4

ANA H

(A)←(A) AND (H)

Выделяем нулевой бит

000B

C2

JNZ 0008

JMP if Z=0

Переход на метку М1, если (А)≠0

000C

08

000D

00

М2

000E

DB

IN 9E

(A)←port 9E

Опрос порта 9E

000F

9E

0010

A4

ANA H

(A)←(A) AND (H)

Выделяем нулевой бит

0011

CA

JZ 000E

JMP if Z=1

Переход на метку М2, если (А)=0

0012

0E

0013

00

М3

0014

03

INX B

(BC)←(BC)+1

Инкремент счетчика BC

0015

1B

DCX D

(DE)(DE)-1

Декремент счетчика DE

0016

DB

IN 9E

(A)←port 9E

Опрос порта 9E

0017

9E

0018

A4

ANA H

(A)←(A) AND (H)

Выделяем нулевой бит

0019

C2

JNZ 0014

JMP if Z=0

Переход на метку М3, если (А)≠0

001A

14

001B

00

001C

0A

LDAX B

(A)←M(BC)

Загрузка целых значений из массива данных

001D

D3

OUT 9F

Port 9F←(A)

Вывод байта данных в порт 9F

001E

9F

001F

1A

LDAX D

(A)←M(DE)

Загрузка дробных значений из массива данных

0020

D3

OUT 9F

Port 9F←(A)

Вывод байта данных в порт 9F

Продолжение таблицы 4

Метка

Адрес

Данные

Ассемблер

Мнемоника

Комментарии

1

2

3

4

5

6

0021

9F

0022

01

LXI B, 0002

(BC)←0002

Установка счетчика с учетом пропущенных опросов

0023

02

0024

00

0025

11

LXI D, 0CA8

(DE)←0CA8

Установка счетчика с учетом пропущенных опросов

0026

A8

0027

0C

0028

00

NOP

Блок задержки на 14 тактов

0029

C3

JMP 002C

(PC)←002C

002A

2C

002B

00

М4

002C

03

INX B

(BC)←(BC)+1

Инкремент счетчика BC

002D

1B

DCX D

(DE)(DE)-1

Декремент счетчика DE

002E

DB

IN 9E

(A)←port 9E

Опрос порта 9E

002F

9E

0030

A4

ANA H

(A)←(A) AND (H)

Выделяем нулевой бит

0031

CA

JZ 002C

JMP if Z=1

Переход на метку М4, если (А)=0

0032

2C

0033

00

0034

0A

LDAX B

(A)←M(BC)

Загрузка целых значений из массива данных

0035

D3

OUT 9F

Port 9F←(A)

Вывод байта данных в порт 9F

0036

9F

0037

1A

LDAX D

(A)←M(DE)

Загрузка дробных значений из массива данных

0038

D3

OUT 9F

Port 9F←(A)

Вывод байта данных в порт 9F

0039

9F

003A

01

LXI B, 0002

(BC)←0002

Установка счетчика с учетом пропущенных опросов

003B

02

003C

00

003D

11

LXI D, 0CA8

(DE)←0CA8

Установка счетчика с учетом пропущенных опросов

003E

A8

003F

0C

0040

00

NOP

Задержка на 4 такта

0041

C3

JMP 0014

(PC)←0014

Безусловный переход на метку М3

0042

14

0043

00

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]