Процедура INTRRUPT_PROC производит основные операции по считыванию состояния компаратора, инкремента (если на компараторе логическая единица) счетчика al, проверки счетчика отсчетов cl и, по достижении им нуля, вызов подпрограммы индикации display. В теле процедуры display происходит инициализация контроллера клавиатуры и индикации на работу в режиме ввода справа со сдвигом, 4 разряда на символ, с внешней дешифрацией. Среднее по N отсчетам время нахождения сигнала ниже заданного уровня (al/cl) индицируется путем выделения десятичных разрядов остатка и делимого, их вывода в ОЗУ отображения с инициализацией старшей тетрады строки единицей при переходе от индикации остатка к индикации частного – для засветки десятичной точки. После выполнения процедуры display (один раз на десять отсчетов) вся программа начинается с начала (метка globalbegin) c реинициализацией всех регистров.
Исходный текст микропрограммы системы анализа характеристик случайных сигналов:
8800h: main proc ; начало процедуры main
nТ
globalbegin: ; пользовательская метка globalbegin
2 CLI ; маскирование флага прерываний IF
4 mov cl,10 ; инициализация счетчика отсчетов в младшем байте cx
4 mov ch,10 ; инициализация счетчика отсчетов в старшем байте cx
4 mov al,204 ; инициализация младшего байта регистра ax числом 204
10 out 111111111 11 111 0 1b, al ; запись в ЦАП: 204d=11001100b+00b ->
-> 1100110000b=816d -> 816-й уровень напряжения = 4.000 В
4 mov al,00101100b ; инициализация младшего байта регистра ax числом 44
10 out 111111111 11 110 0 0b, al ; инициализация интервального таймера -> канал 0, чтение запись/младшего байта, режим 2, двоичный счет
4 mov al, 30 ; инициализация младшего байта регистра ax числом 30
10 out 111111111 11 000 0 0b, al ; запись константы пересчета = 30
4 mov ax,0 ; инициализация счетчика «низкого уровня» в регистре bx
2 STI ; размаскирование флага прерываний IF
3 WAIT ; ожидание запроса прерывания
8400h: INTERRUPT_PROC ; начало процедуры обработки прерывания
10 in ax,111111111 11 111 1 0b ; считывание состояния компаратора по младшему разряду на ШД
4 cmp ax,1 ; сравнение вида ax=1, и если true, то...
4 jne endcheck ; ...переход на метку lowlevel...
2 inc ax ; увеличение счетчика «низкого уровня» на единицу
endcheck: ; пользовательская метка endcheck
2 dec cl ; уменьшение общего счетчика отсчетов на единицу
4 cmp cl,0 ; сравнение вида cl=0, и если true, то...
4 jne toendproc ; ...переход на метку indicate...
11 call display ; вызов процедуры display
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.