Описание реализуемой программы на языке ассемблера

out PIC_ICW1, al al, 01000000b ; Запись ICW2 в КП (номер вектора прерывания)

out PIC_ICW2, al al, 00000000b ; Запись OCW1 в КП (маскирование прерываний)

out PIC _ICW1, al ; Разрешение аппаратных прерываний

;-

; - Начало основной программы -

;-:

ProgramKlavIn ProgramCalculateY1SetY1SetInd ProgramStart

;-

; - Подпрограмма обработки прерывания -

;-: ax ProgramCalculateY2SetPIT ax

;-

; - Подпрограмма опроса клавиатуры (порта А ППА) -

;-: ax dx bx

; Принять и сохранить значение Х

in ax, PPA_A

mov ds: Data_X, ax

; Принять и сохранить значение К

in ax, PPA_B ds: Data_K, ax

bx dx ax

;-

; - Подпрограмма рассчитывает У1 и выводит его в порт С -

;-SetY1SetInd: ax dx bx

; расчет У1

mov ax, ds: Data_X ; Перемещение переменной X в ax

cmp ax, ds: Data_K ; Сравнивание X и K

jl xmin ; Если X меньше К, то переход на метку xminax, ds: Data_K ; Перемещение переменной K в ax

xmin: add ax, ds: Data_x ; MIN (X, K)+X

mov ds: Data_Y1, ax ; Cохранение результата

; Вывод в порт С

mov bx, ax

and ax, 0000000000001111b ; выделение младшей тетрады в ax

and bx, 0000000011110000b ; выделение старшей тетрады в bx ax, bx ; младшая и старшая тетрады в общий регистр ax

out PPA_C, al

bx dx ax

;-

; - Подпрограмма расчета Y2 и программирования ПИТ -

;-SetPIT: ax dx

; расчет У2 ax, ds: Data_X ; Перемещение переменной X в ax

cmp ax, ds: Data_K ; Сравнивание X и K

jg xmax ; Если X меньше К, то переход на метку xminax, ds: Data_K ; Перемещение переменной K в ax

xmax: add ax, 4d ; MAX (X, K)+4

mov ds: Data_Y2, ax

; программирование ПИТ по значению У2 ax, 0000000000011110b ; записать младший байт в счетчик 0

; и установить режим 3

out Adr_PIT_U, al

out Adr_PIT_0, dl ax, 0000000000101110b ; записать старший байт

out Adr_PIT_U, al Adr_PIT_0, dh ax, 0000000000001110b ; защелкнуть Adr_PIT_U, al dx ax

;-

; - Подпрограмма расчета Y3 -

;-SetPIT: ax dx

; расчет У3

mov ax, ds: Data_X ; Перемещение переменной X в ax

cmp ax, ds: Data_K ; Сравнивание X и K

jg xmax2 ; Если X меньше К, то переход на метку xminax, ds: Data_K ; Перемещение переменной K в ax

xmax2:ax, 2d ; MAX (X, K)*2 ds: Data_Y3, ax

; Программирование ПИТ для У3 ax, 0000000001010000b ; записать младший байт в счетчик 0

; и установить режим 3

out PIT_U, al

out PIT_1, dl ax, 0000000001100000b ; записать старший байт

out PIT_U, al PIT_1, dh ax, 0000000001000000b ; защелкнуть PIT_U, al dx

pop ax

ret

; - После сброса процессор выполняет команду из адреса CS:FFF0h

ORG 0FFF0hProgramBegin

ProgramBegin

Перейти на страницу: 1 2 

Читайте также

Проектирование модуля управления трехфазным асинхронным двигателем
В настоящее время создано множество схем управления двигателями переменного напряжения. При этом делается большой акцент на применение в этих схемах специальных унифицированных микросхем ...

Проектирование системы управления вентильным преобразователем
Вентильные преобразователи широко применяются для преобразования энергии, вырабатываемой и передаваемой в виде переменного напряжения промышленной частоты 50Гц в электрическую энергию др ...

Основная техническая документация на рабочий проект волоконно-оптической линии передачи
В настоящее время в России в рамках развития единой сети электросвязи (ЕСЭ) проводятся большие работы по расширению услуг электросвязи, особенно в части подвижной связи, спутникового и к ...

Основные разделы

Все права защищены! (с)2024 - www.generallytech.ru