MOV 1802, AL ; во второй канал
MOV AL, 03h
MOV 1802, AL
MOV BX, 00h
MOV SI, 02h ; SI=2 - делитель
MOV CL, 10h ; CL=16 – номер датчика
MOV CH, 00h ; тип текущего датчика – датчик ЧП
MOV DX, 00h ; DX=0 – номер текущего пациента
STI ; разрешение прерывания
HLT ; ожидание прерывания
0070h: DEC SP ; уменьшение содержимого указателя стека
DEC SP ; чтобы не было переполнения
DEC SP
INC BX
MOV AL, 2000h ; считывание информации с АЦП в AL
ADD AL, [BX] ; сложение содержимого АL с содержимым
; ячейки памяти [DS:BX]
DIV SI ; AX=AX/2 – усреднение показаний
MOV [BX], AL ; пересылка АL в ячейку памяти [DS:BX]
MOV 3000h, AL ; переключение АЦП на следующий канал
DEC CL ; CL=CL-1
CMP CH, FFh ; определяем тип текущего датчика
JE DT2 ; переход на метку DT2, если текущий датчик
;– датчик температуры
CMP AL, 4Bh ; сравниваем показания датчика с верхним
; допустимым пределом 75 уд.мин
JA Label5 ; переход на Label5, если АL>75
CMP AL, 37h ; сравниваем показания датчика с нижним
; допустимым пределом 55 уд.мин
JB Label5 ; переход на Label5, если АL<55
HLT
DT2: MOV CH, 00h
CMP AL, 85h ; сравниваем показания датчика с верхним
; допустимым пределом 37˚
JA Label5 ; переход на Label5, если АL>85h
CMP AL, 7Bh ; сравниваем показания датчика с нижним
; допустимым пределом 36˚
JB Label5 ; переход на Label5, если АL<7Bh
JMP L2
Label5: MOV 2800h, DL ; вывод на ЦАП младшего байта номера
; пациента, имеющего отклонения
MOV 2800h, DH ; вывод на ЦАП cтаршего байта номера
MOV 2800h, AL ; вывод на ЦАП показаний датчика
DEC CL ; CL=CL-1
CMP CL, 00h
JE L3
STI
HLT ; ожидание прерывания
L3: MOV 1803h, 40h ; загрузка команды CLC в таймер
MOV 1801h, AL ; чтение младшего байта счётчика
MOV 1801h, AH ; чтение cтаршего байта счётчика
MOV CL, 10h ; CL=16
CMP AX, 00h
JE Kon
SUB BX, 0Eh ; BX=BX-16
SUB DX, 08h ; DX=DX-9
H: STI
HLT
Kon: MOV 1801h, 58h ; перезагружается константа пересчёта
MOV 1801h, 02h ; в первый канал таймера
CMP DX,3E9h ; определяем, сколько пациентов было всего
; обследовано
JNE H ; переход на метку Н, если были обследованы
; не все пациенты
WAIT ; “зависание” системы, т.к. были
; обследованы все 1000 пациентов
7F0h: CLI ; запрещение прерывания
JMP 00000000h ; инициализация кодового сегмента
; и переход на основную программу
* Несмотря на то, что стековая память программой не используется, стек необходимо инициализировать, т.к. при переходе на подпрограмму (по прерыванию) МП автоматически записывает в стек адрес возврата и регистр флагов. Исходя из этого, начало стека инициализируется на неиспользуемый участок ОЗУ.
Программируемый таймер К1810ВИ54 относится к классу функционально ориентированных программно управляемых интерфейсных БИС, поэтому перед началом работы в него необходимо загрузить управляющее слово (УС) и константу пересчета. УС задает режим работы, тип счета (двоичный или двоично- десятичный), порядок загрузки и размерность (один или два байта) константы пересчёта.
Системой задействованы все 3 канала таймера: нулевой канал работает во втором режиме, генерируя сигналы запуска на АЦП с определённой периодичностью, первый канал работает в нулевом режиме, осуществляя счёт времени совместно со вторым каналом, который также работает во втором режиме.
Рис.2 Содержание регистра управляющего слова нулевого канала таймера
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.