Разработка микропроцессорной системы. Составление карты распределения адресного пространства, страница 17

;Программирование портов ввода/вывода 2. Порты А, В и С –

;вывод на индикаторные элементы.

mov al,10000000b

mov [8003h],al

;Гашение всех индикаторных элементов.

xor al,al

mov [8000h],al

mov [8001h],al

mov [8002h],al

;Разрешение аппаратных прерываний.

sti

;Передача управления основной программе.


3.2.Логическая обработка сигналов Х1...Х4 и формирование управляющего сигнала Y1

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:

3.3.Ввод напряжений Х5 и Х6 и формирование сигналов Y2, Y3

;Чтение значения 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

3.4.Ввод напряжения Х7 и формирование сигнала Y4

;Ввод значения 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


3.5.Обработка сигналов прерывания

ОБРАБОТКА 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