Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОЭВМ_КП_N4_ПЗ.doc
Скачиваний:
10
Добавлен:
22.11.2018
Размер:
2.34 Mб
Скачать

5 Распределение адресного пространства устройств ввода-вывода

Память – один из основных элементов устройства. Она организована как множество ячеек, в которых может храниться информация. Совокупность всех ячеек памяти, к которым может обратиться МП, составляет адресное пространство памяти. Информационная емкость одной ячейки составляет 8 бит или 1 байт. Наибольший объем памяти, который может быть использован в устройстве, определяется объемом адресного пространства.

Адресные пространства памяти и УУВ представлены на рисунке 5.1 а,б

Рисунок 5.1 – Адресные пространства памяти (а) и УВВ (б)

В разрабатываемой МПС используется две микросхемы УВВ –ППА и ПИТ, в каждой из которых реализованы по четыре адресуемых устройства. Для микросхемы ППА это, соответственно, порты A, B и C (PA, PB и PC), а также регистр управляющего слова ППА (CWPPA). Для микросхемы ПИТ – это три таймера (T0, T1 и T2) и регистр управляющего слова ПИТ (CWPIT).

6 Оценка емкости пзу и озу

Команды и данные необходимо хранить и выбирать по мере необхо­димости в процессе работы ЭВМ. Для этой цели применяют запоминаю­щие устройства (ЗУ). Их можно разделить на два типа: ОЗУ и ПЗУ. ПЗУ используется для хранения команд и констант. Запись в ПЗУ сложна и за­нимает много времени, поэтому этот тип памяти применяется в тех случа­ях, когда не требуется изменять записанную однажды информацию. В данном курсовом проекте используется ПЗУ AT27C1024, используется одна микросхема данного типа.

ОЗУ используется для хранения данных, изменяющихся в процессе работы системы. Блок ОЗУ построен на основе 1 микросхемы AS7C 1026-15TC

7 Расчет потребляемого тока

Таблица 2 – токопотребление микросхем

Тип м/c

Колич-во (шт)

Iпотр+5В (мА)

i386SX

1

275

КР580ВИ53

1

115

КР580ВВ55

1

60

i8259A

1

85

VXO-61

1

25

К561ТМ2

1

8

КР1533АП6

5

44

КР533ИЕ19

1

21

КР556РТ23

1

130

К555ЛН1

2

6

К555ЛА1

1

2

К1533ИД14

1

4.5

AT27C1024

1

15

AS7C 1026-15TC

1

220

Итого

20

1223

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

Исходный код программы, реализующей алгоритм работы МПС представлен, ниже:

;---------------------------------------------------------------------------

;-- Определение констант --

;---------------------------------------------------------------------------

Adr_ROM_Codeseg EQU EFFFFh ; Начальный адрес сегмента кода

Adr_ROM_Reset_IP EQU FFFF0h ; Адрес области (ROM BIOS) с которой начинается выполнение команд при включении питания или сброса

Adr_RAM_Begin EQU 0h ; Начальный адрес ОЗУ

Adr_RAM_Start EQU 0400h ; Начальный адрес сегменда данных

Adr_RAM_Stack EQU 0FFFFh ; Максимально возможный адрес ОЗУ, для указания вершины стека

Adr_PPA_A EQU 16 ; Адрес регистра порта А ППА

Adr_PPA_B EQU 18 ; Адрес регистра порта B ППА

Adr_PPA_C EQU 20 ; Адрес регистра порта C ППА

Adr_PPA_U EQU 22 ; Адрес регистра управления ППА

Adr_PIT_0 EQU 8 ; Адрес регистра состояния счетчика 0 ПИТ

Adr_PIT_1 EQU 10 ; Адрес регистра состояния счетчика 1 ПИТ

Adr_PIT_2 EQU 12 ; Адрес регистра состояния счетчика 2 ПИТ

Adr_PIT_U EQU 14 ; Адрес регистра управления ПИТ

Adr_KP_A0 EQU 0 ; Адрес контроллера прерываний (A0 = 0)

Adr_KP_A1 EQU 2 ; Адрес контроллера прерываний (A0 = 1)

Adr_KP_Base EQU 00010010b ; Базовый адрес начала области векторов прерывания, с которыми будет работать КП

IRQ_n EQU 01001000b ; (IRQ2 or Adr_KR_Base)*4. Номер вектора прерывания адрес вызываемого прерывания в таблице прерываний

K EQU Adr_RAM_Start + 0 ; Ячейка в ОЗУ для хранения значения К

X EQU Adr_RAM_Start + 1 ; Ячейка в ОЗУ для хранения значкния Х

Y1 EQU Adr_RAM_Start + 2 ; Ячейка в ОЗУ для хранения зн. y1=4*min(x,k)

Y2 EQU Adr_RAM_Start + 3 ; Ячейка в ОЗУ для хранения зн. У2=min(x,2*k)+x

Y3 EQU Adr_RAM_Start + 4 ; Ячейка в ОЗУ для хранения зн. У3=2*max(x,k)

I EQU Adr_RAM_Start + 5 ; Ячейка в ОЗУ для хранения зн. i= max(x,k)+x

;---------------------------------------------------------------------------

;-- Подготовка к запуску основной программы после --

;-- включения питаниля или сброса --

;-- CS = FFFFh; DS = SS = ES = 0 --

;---------------------------------------------------------------------------

ORG Adr_ROM_Reset_IP ; Начальный адрес области ROM BIOS

jmp Adr_ROM_Codeseg

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

ORG Adr_ROM_Codeseg

mov ax, Adr_ROM_Codeseg

mov cs, ax

mov ax, Adr_RAM_Stack

mov ss, ax

mov ax, Adr_RAM_Start

mov ds, ax

xor ax, ax

cli ; Запрет аппаратных прерываний

jmp ProgramBegin

;---------------------------------------------------------------------------

;-- Установка начальны параметров --

;-- Программирование ПИТ, ППА, КП --

;-- Определение переменных в памяти --

;---------------------------------------------------------------------------

ProgramBegin:

; Установить вектор прерывания (адрес подпрограммы обработки прерывания)

; Настройка es на начало таблицы векторов прерываний - в реальном режиме

mov ax, 0h

mov es, ax

mov ax, offset ProgramPrer ; Смещение обработчика прерывания

mov es:IRQ_n, ax

push cs

pop ax

mov es:IRQ_n + 2, ax

; Программирование ППА

mov al, 10010010b ; Управляющее слово для ППА; Порт А-ввод, B-ввод.

out Adr_PPA_U, al

; Программирование ПИТ. Установка 0го порта в режим делителя на 1000.

mov al, 10111110b ; 3 режим, ввод младшего, затем старшего байта.

out Adr_PIT_U, al

mov dx, 1000

out Adr_PIT_0, dl

out Adr_PIT_0, dh

; Установить содержимое сегмента данных

; Указание меток и содержимого (переменных)

call ProgramKlavIn ; опрос клавиатуры для получения К и Х

call ProgramCalculateY1SetY1SetInd ; начальная установка У1 и индикации

; Рограммирование ПИТ

call ProgramCalculateY2SetPIT

call ProgramCalculateY3SetPIT

; Программирование контроллера прерываний

mov al, 00010000b ; Запись ICW1 в КП (работа КП)

out Adr_KP_A0, al

mov al, Adr_KP_Base ; Запись ICW2 в КП (адрес первого вектора прерывания, с которым работает КП)

out Adr_KP_A1, al

mov al, 00000000b ; Запись OCW3 в КП (маскирования прерываний для разрешения)

out Adr_KP_A1, al

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

;---------------------------------------------------------------------------

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

;---------------------------------------------------------------------------

ProgramStart:

call ProgramKlavIn

call ProgramCalculateY1SetY1SetInd

jmp ProgramStart

;---------------------------------------------------------------------------

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

;---------------------------------------------------------------------------

ProgramPrer:

push ax

call ProgramCalculateY2SetPIT

pop ax

iret

;---------------------------------------------------------------------------

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

;---------------------------------------------------------------------------

ProgramKlavIn:

push ax

push dx

push bx

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

in ax, Adr_PPA_A

mov ds:X, ax

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

in ax, Adr_PPA_B

mov ds:K

pop bx

pop dx

pop ax

ret

;---------------------------------------------------------------------------

;-- Подпрограмма рассчитывает У1 и функцию индикации --

;-- и выводит в порт С. --

;-- (для индикации младшая тетрада --

;-- для управления объектом старшая тетрада) --

;---------------------------------------------------------------------------

ProgramCalculateY1SetY1SetInd:

push ax

push dx

push bx

mov al, [x] ;вычисляем y1

mov dl, [k]

call max

mul bx, 2

mov [y1], bx

mov al, [x] ;вычисляем индикатор

mov dl, [k]

call min

mul bx, 4

mov [i], bx

mov ax, [y1]

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

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

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

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

out Adr_PPA_C, al

pop bx

pop dx

pop ax

ret

;---------------------------------------------------------------------------

;-- Подпрограмма нахождения максимума --

;---------------------------------------------------------------------------

proc max

pusha

cmp ax,dx

jg max_ax

popa

mov bx,dx

ret

max_ax: popa

mov bx,ax

ret

endp max

;---------------------------------------------------------------------------

;-- Подпрограмма нахождения минимума --

;---------------------------------------------------------------------------

proc min

pusha

cmp ax,dx

jl min_ax

popa

mov bx,dx

ret

min_ax: popa

mov bx,ax

ret

endp min

;---------------------------------------------------------------------------

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

;-- (поскольку надо У2 вычислить только раз при включении питания --

;-- или обработке прерывания) --

;---------------------------------------------------------------------------

ProgramCalculateY2SetPIT:

push ax

push dx

mov dl, [k] ;вычиляем y2

mov al, [x]

call max

dec al

mul al, 2

sub bx,al

mov [y2], bx

; программирование ПИТ по значению У2

mov al, 10011110b ;записать младший байт в счетчик 2 и установить реж 3

out Adr_PIT_U, al

out Adr_PIT_2, dl

mov al, 10101110b ; записать старший байт

out Adr_PIT_U, al

out Adr_PIT_2, dh

mov al, 10001110b ; защелкнуть

out Adr_PIT_U, al

pop dx

pop ax

ret

;---------------------------------------------------------------------------

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

;---------------------------------------------------------------------------

ProgramCalculateY3SetPIT:

push ax

push dx

mov al, [x] ;вычисляем y3

mov dl, [k]

call min

add bx, ax

mov [y3], bx

; Программирование ПИТ для У3

mov al, 01010000b ; записать младший байт в счетчик 1 и установить режим 0

out Adr_PIT_U, al

out Adr_PIT_1, dl

mov al, 01100000b ; записать старший байт

out Adr_PIT_U, al

out Adr_PIT_1, dh

mov al, 01000000b ; защелкнуть

out Adr_PIT_U, al

pop dx

pop ax

ret

end ProgramBegin

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]