; Весь массив обработан, сохраняем (ВС) в переменной 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: |
; Начало основной программы |
|||||
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.