Введение в микропроцессоры. Конспект лекций по курсу "Микропроцессорные устройства", страница 23

; Весь массив обработан, сохраняем (ВС) в переменной Sum

Shifts:

MOV

L, C

; (HL):= Summa

MOV

H, B

SHLD

Sum

[Sum]:= Summa

; Инициализация цикла сдвигов

MVI

C, 3

; Определяем число сдвигов

; Тело цикла сдвигов

DoShift:

ARHL

DCR

C

; Уменьшаем число оставшихся сдвигов

JNZ

DoShift

; Сдвиги еще остались?

; Сдвиги закончились,  сохраняем (HL)  в переменной Aver

SHLD

Aver

[Aver]:= [Sum] DIV Size

RST

4

END

Start

г) Поддержка прерывания

Задание: вывести через выход SOD байт данных в последовательном формате интерфейса RS-232C без бита  четности и одним стоповым битом. Частота передачи (длительность битового интервала) определяется частотой сигнала запроса прерывания RST7.5.

Метод решения: для выдачи байта данных через выход SOD (см. рис. 2.13) определим две переменные с символическими именами: Data, в которой будет храниться передаваемый байт, и Number, в которой будет храниться номер передаваемого бита. Причем, если [Number] <> 0, то необходимо вывести очередной бит [Data], в противном случае ([Number] = 0) - вывод очередного бита не производится. Вывод очередного бита осуществляется обработчиком запроса на прерывание RST7.5, который ведет нумерацию переданных битов посылки и в соответствии с номером передаваемого бита выполняет те или иные действия. Эти действия сводятся к следующему: сначала выводится стартовый бит (сигнал низкого уровня), который предупреждает приемник о предстоящей передаче посылки; затем передается байт данных младшими битами вперед D0...D7; и в завершение посылки передается стоповый бит (сигнал высокого уровня), который оповещает приемник, о том, что передача посылки завершена.

Number

11

10

9

8

7

6

5

4

3

2

1

Название

Start

D0

D1

D2

D3

D4

D5

D6

D7

Stop

Stop

SOD

Рис. 2.13. Временные диаграммы вывода байта данных

ORG

JMP

3Ch

RST75

; Определяем вектор прерывания RST7.5

; (см. п. 2.5.2)

...

ORG

8100h

Data:

DS

1

Number:

DB

0

; Чтобы предотвратить ложные передачи

RST75:

; Начало обработчика прерываний RST7.5

PUSH

PSW

; Сохранениие используемых регистров МП в стеке

PUSH

B

LDA

Number

; Проверка необходимости вывода байта данных

MOV

B, A

; (B):= [Number]

ORA

A

; Установка флажковых битов

JZ

Exit

; [Number] <>  0, вывод необходим

CPI

11d

; Проверка номера стартового бита

JNZ

CheckStop

XRA

A

; Это стартовый бит, CY:= 0

JMP

Transmit

CheckStop:

; Проверка номера стопового бита

CPI

2d

JNZ

CheckEnd

STC

; Это стоповый бит, CY:= 1

JMP

Transmit

CheckEnd:

; Проверка номера завершения посылки

CPI

1d

JNZ

Bits

JMP

DecNum

; Это номер завершения посылки

Bits:

; Это номер одного из битов D0...D7

LDA

Data

RRC

CY:= Di, где i = 0...7

STA

Data

Transmit:

RAR

; D7 аккумулятора := CY

ANI

80h

; Маскируем все биты аккумулятора кроме D7

ORI

40h

; SOE:= 1, разрешаем последовательный вывод,

SIM

; см. п. 2.8.12

DecNum:

MOV

A, B

[Number]:= [Number] - 1

DCR

A

STA

Number

Exit:

POP

B

POP

PSW

RET

; Возврат из прерывания

...

Start:

; Начало основной программы