- •Введение
- •1 Описание структурной схемы микропроцессорной системы управления объектом
- •1.1 Микропроцессорный модуль (мпм)
- •1.2 Программируемый параллельный адаптер (ппа)
- •1.3 Программируемый интервальный таймер (пит)
- •2 Описание основных элиментов системы
- •2.1 Микропроцессор i82386sx
- •2.2 Шинные формирователи адреса и данных кр1533ап6
- •2.3 Контролер прерывания i8259a
- •2.4 Параллельно-программируемый адаптер кр580вв55
- •2.5 Программируемый интервальный таймер кр580ви53
- •2.6 Оперативное запоминающее устройство as7c 1026-15tc
- •2.7 Постоянное запоминающее устройство at27c1024
- •2.8 Системный контролер
- •2.9 Реализация дша озу и пзу, увв
- •3 Описание электрической принципиальной схемы
- •4 Описание блок схемы алгоритма работы программы
- •5 Распределение адресного пространства устройств ввода-вывода
- •6 Оценка емкости пзу и озу
- •7 Расчет потребляемого тока
- •8 Описание реализуемой программы
- •Заключение
- •Список литературы
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