
- •1. Постановка задачи
- •2. Реализация поставленной задачи
- •2.1. Расчет массива данных угловой скорости двигателя
- •2.2. Подробная блок-схема алгоритма решения задачи для мп кр580вм80а
- •2.3. Описание алгоритма программы для мп кр580вм80а
- •2.4. Описание программы на языке Ассемблера и в машинных кодах мп кр580
- •2.5. Описание аппаратной реализации
- •3. Вывод
- •Список используемой литературы:
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 |