Разработка системы медицинской диагностики, позволяющей производить обследование 8 больных в течение 1 минуты (температура и частота пульса), страница 3

                        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         ; вывод на ЦАП показаний датчика

L2:                   INC DX                      

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          ; инициализация кодового сегмента

                                    ; и переход на основную программу

* Несмотря на то, что стековая память программой не используется, стек необходимо инициализировать, т.к. при переходе на подпрограмму (по прерыванию) МП автоматически записывает в стек адрес возврата и регистр флагов. Исходя из этого, начало стека инициализируется на неиспользуемый участок ОЗУ.

8.  ПРОГРАММИРОВАНИЕ ТАЙМЕРА

Программируемый таймер К1810ВИ54 относится к классу функционально ориентированных программно управляемых интерфейсных БИС, поэтому перед началом работы в него необходимо загрузить управляющее слово (УС) и константу пересчета. УС задает режим работы, тип счета (двоичный или двоично- десятичный), порядок загрузки и размерность (один или два байта) константы пересчёта.

Системой задействованы все 3 канала таймера: нулевой канал работает во втором режиме, генерируя сигналы запуска на АЦП с определённой периодичностью, первый канал работает в нулевом режиме, осуществляя счёт времени совместно со вторым каналом, который также работает во втором режиме.


Управляющее слово нулевого канала (24h) содержит в себе следующую информацию:

Рис.2  Содержание регистра управляющего слова нулевого канала таймера