;Программирование портов ввода/вывода 2. Порты А, В и С –
;вывод на индикаторные элементы.
mov al,10000000b
mov [8003h],al
;Гашение всех индикаторных элементов.
xor al,al
mov [8000h],al
mov [8001h],al
mov [8002h],al
;Разрешение аппаратных прерываний.
sti
;Передача управления основной программе.
GLOBAL:
;Чтение значений Х1,Х2,Х3,Х4.
mov al,[6002h]
mov [x1234],al; x1234 – ячейка памяти
;Логическая функция X1+X2*(X3+X3)
;AL = X4 X3 X2 X1
shr al,1
adc bh,0
shr al,1
adc bl,0
shr al,1
adc ah,0
;X1 в bh; X2 в bl; X3 в ah; X4 в AL
;Вычисление значения Y1 в AL
xor al,ah
and al,bl
xor al,bh
;Сравнение с 1-ей
or al,al
;Если равно единице, то выдаем сигнал 1
jz notY1
;Формирование задержки сигнала Y1. Через 40мс он снова
;сбрасывается в 0.
;Загрузка счетчика канала 0. 40мс / 500мкс =80 (один такт 500 мкс).
mov [7000h],80
mov [7000h],0
;Устанавливаем сигнал Y1 в единицу
;Установка сигнала СЕ0 в единицу (разрешение счета).
mov al,[ce]
or al,00000101b
mov [0C000h],al
;Ожидание МП.
wait
;Сигнал Y1 переводим в состояние 0.
;Установка сигнала СЕ0 в ноль (запрещение счета).
and al,00011010b
mov [0C000h],al
notY1:
;Чтение значения N5
mov al,[0A000h]
;Чтение значения N6
mov ah,[0A001h]
add al,bh
jc n5_n6; если N5+N6 > 255 то N5+N6>K
;По адресу [key] находится код клавиши.
cmp al,[key]
jc n5_n6
mov al,[key]
n5_n6:
;Формируем сигнал Q2.
;Сравнение Q2 и Q0
cmp al,q0
;q0 - константа
jl l2
;Загрузка счетчика канала 0. 200мс на 500мкс = 400 (один такт 500 мкс)
mov [4000h],144
mov [4000h],1
;Формирование Y3.
;Установка сигнала СЕ0 в единицу (разрешение счета).
mov al,00010001b
mov [0c000],al
jmp l1
l2:
;Загрузка счетчика канала 0. 70мс на 500 мкс=140 (один такт ;500 мкс).
mov [8000h],140
mov [8000h],0
;Формирование Y2.
;Установка сигнала СЕ0 в единицу (разрешение счета).
mov [0c000],00001001b
l1:
;Ожидание МП.
wait
;Установка сигналов У2, У3 в 0.
;Установка сигнала СЕ0 в ноль (запрещение счета).
xor al,al
mov [0c00h],al
;Ввод значения N7.
mov al,[8002h]
;Вычисление Q4=A0+A1*N7.
and al,A1;A1 - константа
xor al,a0
;Скидываем Q4 в память по адресу q4.
mov [q4],al
;Выдача Q4 на ЦАП.
mov [6000h],al
jmp GLOBAL
ОБРАБОТКА IRQ0 - ПРЕРЫВАНИЯ ОТ АВАРИЙНОГО ДАТЧИКА
При обработке прерывания от аварийного датчика МПС должна выполнить следующие действия:
а) включить на ПУ аварийную сигнализацию;
б) выдать на индикацию значения сигналов Х1,...,X4 и цифровой код Q4;
в) перевести МПС в состояние ожидания. Выход МПС из состояния ожидания обеспечивается сигналом СБРОС.
IRQ0:
;Запрещение прерывания.
cli
;Подаем на вход СЕ1 единицу (разрешение счета).
mov [0С000h],1
;Выдать на индикацию значения сигналов Х1,Х2,Х3,Х4 и цифровой код Q4.
mov al,[x1234]
mov [6002h],al
call Output
hlt
;Преобразование цифрового кода Q4 из AL для вывода на ;индикатор.
Output: mov al,[q4]
xor ah,ah
mov bx,offset TABLE
;таблица в который находятся значения констант для ;вывода на индикацию.
;mov cl,10
;1-ая цифра
mov dx,ax
div cl
div cl
xlat
mov [8000h],al
mul cl
mul cl
sub dx,ax
mov ax,dx
;2-ая цифра
mov dx,ax
div cl
xlat
mov [8001h],al
mul cl
sub dx,ax
mov ax,dx
;3-я цифра
xlat
mov [8002h],al
ret
;Таблица перекодировки для индикаторов.
TABLE: db ddh,05h,9bh,8fh,47h,ceh,deh,85h,dfh,cfh,d7h,5eh,d8h,1fh
; 0 1 2 3 4 5 6 7 8 9 A B C D
dah,d2h
; E F
ОБРАБОТКА IRQ1 - ПРЕРЫВАНИЯ ОТ ИСТОЧНИКА ПИТАНИЯ
При обработке прерывания отказа источника питания МПС должна записать в энергонезависимое ОЗУ текущие значения содержимого регистров микропроцессора.
IRQ1:
cli
mov ax,0
mov ss,ax
mov sp,04FFh; для сохранения содержимого регистров по известному адресу
pushf
push ax
push cx
push dx
push bx
push bp
push si
push di
hlt
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.