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).
Ссылка на скачивание - внизу страницы.