Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 700543.doc
Скачиваний:
18
Добавлен:
01.05.2022
Размер:
71.81 Mб
Скачать
    1. Программная часть.

Программа для МПУ составлена в системе команд МП КР580 [14 ]. Запись программы выполнена в символах языка ассемблера, затем сделана трансляция в машинные коды с определением адресного пространства в ПЗУ. В этом виде производится запись программы в ПЗУ («прошивка») с нулевого адреса.

Для удобства программирования необходимо составить блок-схему алгоритма программы (рис.6.4). Правила составления блок схемы приведены в приложении 1.

1

2

3

4 5 6 7 8 9 10

14 15 16 17 18 19

12 13

20 23

11

21 24

22 25

Рис. 6.4. Схема алгоритма программы

27

Номера графических символов на рис. 6.4 соответствуют программным блокам:

1 – инициализация МПУ (обнуление внешних регистров,

установка битов в регистре С);

2 – чтение управляющих сигналов в порту ввода ППИ на D7;

3 … 10 – основной цикл (анализ наличия управляющих сиг-

налов;

11 – ожидание окончания импульса тактового генератора;

12, 13 - анализ установки битов регистра С;

20, 21 - блоки инкремента секунд, минут канала 1;

23, 24 – блоки инкремента секунд, минут канала 2

22, 25 - блоки вывода информации во внешние регистры по

каналам 1 и 2;

14 …19 – блоки обработки управляющих сигналов (start,

stop, reset) по каналам 1 и 2.

Преобразование алгоритма в текст программы оформлено в табличном виде, содержащем четыре столбца. Содержимое первого столбца - адреса ячеек памяти (метки), второго – мнемоники и операнды команд на языке ассемблера, третьего – машинные коды, четвертого – комментарии. Программа, состоящая из символических команд, называется исходной программой, а переведённая на машинный язык - объектной программой.

Перевод программы в машинные коды выполнен вручную с использованием системы команд МП КР580ВМ80А.

Ниже приведена программа в машинных кодах и в мнемониках языка ассемблера

; инициализация

0000

Mvi A, 00H

3E 00

0002

Out 00H

D3 00

……

Out 01H

D3 01

……

Out 02H

D3 02

28

……

Out 04H

D3 04

Out 05H

D3 05

Mvi C, 03H

0E 03

; основной цикл

Loop:

In 05H

DB 05

; чтение порта ввода

Mov B, A

47

Ani 01H

E6 01

Jnz Generator1

C2 Generator1

Mov A, B

78

Ani 02H

E6 02

Jnz start1

C2 start1

Mov A, B

78

Ani 04H

E6 04

Jnz stop1

C2 stop1

Mov A, B

78

Ani 08H

E6 08

Jnz reset1

C2 reset1

Mov A, B

78

Ani 10H

E6 10

Jnz start2

C2 start2

Mov A, B

78

Ani 20H

E6 20

Jnz stop2

C2 stop2

Mov A, B

78

Ani 40H

E6 40

Jnz reset2

C2 reset2

Jmp Wait

C3 Wait

; проверка включения секундомера 1

Generator1:

Mov A, C

79

Ani 01H

E6 01

Jnz Incr-ment1

C2 Increment1

29

; проверка включения секундомера 2

Generator2:

Mov A, C

79

Ani 02H

E6 02

Jnz Increment2

C2 Increment2

Jmp Wait

C3 Wait

; инкремент секундомера 1

Increment 1:

In 00H

DB 00

Cpi 59

FE 3В

Jz IncremenMin1

CA incrementmin1

Inr A

3C

; инкремент секунд

Out 00H

D3 00

IncrementMin1:

Mvi A, 00H

3E 00

Out 00H

D3 00

In 01H

DB 01

Cpi 09H

FE 09

Jz reset1

CA reset1

Inr A

3C

Out 01H

D3 01

Jmp Generator2

C3 Generator 2

; инкремент секундомера 2

Increment2:

In 02H

DB 02

Cpi 59

FE 3В

Jz IncrementMin2

CA IncremenMin2

Inr A

3C

Out 02H

D3 02

Jmp Wait

C3 Wait

IncrementMin2:

Mvi A, 00H

3E 00

30

Out 02H

D3 04

In 04H

DB 04

Cpi 09H

FE 09

Jz reset2

CA reset2

Inr A

3C

Out 04H

D3 04

Jmp Wait

C3 wait

; старт секундомера 1

Start1:

Mov A, C

79

Ori 01H

F6 01

Mov C, A

4F

; останов секундомера 1

Stop1:

Mov A, C

79

Ani 02H

E6 02

Mov C, A

4F

; сброс секундомера 1

Reset1:

Mvi A, 00H

3E 00

Out 00H

D3 00

Out 01H

D3 01

; старт секундомера 2

Start2:

Mov A, C

79

Ori 02H

F6 02

Mov C, A

4F

; останов секундомера 2

Stop2:

Mov A, C

79

Ani 01H

E6 01

Mov C, A

4F

; сброс секундомера 2

Reset2:

Mvi A, 00H

3E 00

Out 02H

D3 02

Out 04H

; ожидание окончания импульса

Wait:

In 05H

DB 05

Cpi 00H

FE 00

31

Jz Loop

CA Loop

Jmp Wait

C3 Wait