- •Содержание
- •Задание.
- •Введение
- •Структурная схема мпс
- •Структурная схема цп
- •Структура памяти, распределение данных
- •Разработка схемы алгоритма функционирования мпс, реализующей операцию цифровой фильтрации.
- •Укрупнённая схема алгоритма функционирования мпс.
- •4.2. Схема алгоритма вычисления выражения для цф
- •6. Описание принципиальной схемы
- •Основные результаты разработки.
- •8. Отладка программы.
- •Листинг программы
- •10.Список используемых источников
Структура памяти, распределение данных
Определим биты адреса для частичной селекции ПЗУ и ОЗУ:
ПЗУ: 4К = — А11-АО — адрес байта ПЗУ,
ОЗУ: 2К = —»А10-А0 - адрес байта ОЗУ.
Бит адреса А12=1 служит для выбора модуля ПЗУ программ, а А12=0 — модуля ОЗУ. Карта памяти модуля ЗУ 6 кБ см. на рис. 4.yi
Карта памяти модуля ЗУ 6 кБ.
Рис. 4.
Расположение адресов модуля ЗУ 6 кБ см. на рис. 5
Расположение адресов модуля ЗУ 6 кБ.
Таблица 1
Адрес 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 |
Диапазон адресов |
Тип ЗУ |
Сигнал yi |
|||
0 0 0 0 0 0 0 1 1 1 1 1 1 1 |
0 1 |
0 X |
X X X X X X X X X X X X X X X X X X X X X X |
[00000 – 007FF] [FF000 – FFFFF] |
ОЗУ 2К ПЗУ 4К |
#y0 #y1 |
Частичная адресация битом А12
Полная адресация битами А19 – А11
Рис. 5.
Функциональная схема подсистемы памяти ёмкостью 6 кБ (ПЗУ 4кБ, ОЗУ 2кБ) изображена на рис. 6. В соответствии с таблицей 1 выражения для сигналов #y0 и #y1 будут иметь вид:
;
Структурная организация подсистемы памяти МПС.
Рис. 6.
Память МП К1810ВМ88 содержит только один банк, вследствие чего в МП отсутствует сигнал #ВНЕ. В данной организации подсистемы памяти МПС применяется вертикальное наращивание модулей ПЗУ. Это вызвано тем, что при проектировании системы не было найдено требуемого объёма ПЗУ(4 кБ) в виде одного модуля. Для получения заданного объема были выбраны два модуля ёмкостью по 2 кБ каждый. Селекция модулей осуществляется с помощью сигналов #y10 и #y11 , которые формируются при подаче на дешифраторы сигнала общего сигнала для ПЗУ #y1 и бита адреса A11.
Расположение адресов у модулей ПЗУ:
Таблица 2
Адрес 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 |
Диапазон адресов |
Тип ЗУ |
Сигнал yi |
|||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 |
1 1 |
0 1 |
X X X X X X X X X X X X X X X X X X X X X X |
[FF000 – FF700] [FF800 – FFFFF] |
ПЗУ D11 ПЗУ D12 |
#y10 #y11 |
#y1
Селекция модулей ПЗУ
В соответствии с таблицей 2 выражения для сигналов #y10 и #y11 будут иметь вид:
;
Разработка схемы алгоритма функционирования мпс, реализующей операцию цифровой фильтрации.
Укрупнённая схема алгоритма функционирования мпс.
Укрупнённая схема алгоритма функционирования МПС.
Рис. 7.
4.2. Схема алгоритма вычисления выражения для цф
Схема алгоритма вычисления выражения для ЦФ
Рис. 8.
4.3. Схема алгоритма вычисления W1 = 10Xn и регистровая модель.
Схема алгоритма вычисления W1
Рис. 9.
Регистровая модель вычисления W1
Рис. 10.
4.4. Схема алгоритма вычисления W2 = W1 +7Xn-1 и регистровая модель.
Схема алгоритма вычисления W2
Рис. 11.
Регистровая модель вычисления W2
Рис. 12.
4.5. Схема алгоритма вычисления W3 = W2 +4Xn-2 и регистровая модель.
Схема алгоритма вычисления W3
Рис. 13.
Регистровая модель вычисления W3
Рис. 14.
4.6. Схема алгоритма вычисления W4 = W3 +1Xn-3 и регистровая модель.
Схема алгоритма вычисления W4
Рис. 15.
Регистровая модель вычисления W4
Рис. 16.
4.7. Схема алгоритма вычисления W5 = W4 -2Xn-4 и регистровая модель.
Схема алгоритма вычисления W5
Рис.17.
Регистровая модель вычисления W5
Рис. 18.
4.8. Схема алгоритма вычисления W6 = W5 -5Xn-5 и регистровая модель.
Схема алгоритма вычисления W6
Рис.19.
Регистровая модель вычисления W6
Рис. 20.
4.9. Схема алгоритма выявления переполнения Yn .
Схема алгоритма выявления переполнения Yn
Рис.21.
4.10. Схема алгоритма деления на 15 и регистровая модель.
Схема алгоритма деления на 15
Рис.22.
Регистровая модель деления на 15
Рис. 23.
4.11. Схема алгоритма очереди и регистровая модель.
Схема алгоритма очереди
Рис.24.
Регистровая модель очереди
Рис. 25.
5. Разработка программы вычисления
.
;Программа вычисления Yn=(10Xn+7Xn-1+4Xn-2+Xn-3-2Xn-4-5Xn-5)/15
.model small ;модель памяти SMALL
.stack 64 ;модель стека 64
.data ;начало сегмента данных
xn dw 0 ;резервирование
xn1 dw 0 ;места в памяти
xn2 dw 0 ;под переменные
xn3 dw 0 ;xn,xn1,xn2,xn3
xn4 dw 0 ;xn4
xn5 dw 0 ;xn5
yn dw 0 ;yn
;************************************************************************
;
;Константы для деления и выявления переполнения
;
r1m equ 7ff1h ;константа r1m примет значение k(+ymax)мл
r1c equ 0007h ;константа r1c примет значение k(+ymax)ст
r2m equ 8000h ;константа r2m примет значение k(-ymax)мл
r2c equ 0fff8h ;константа r2c примет значение k(-ymax)ст
k equ 15 ;делитель
;************************************************************************
;
;Программа вычисления выражения
.code ;начало кодового сегмента
filtr proc ;начало процедуры filtr
mov ax,@data ;указание регистра DS
mov ds,ax ;сегмент данных
;************************************************************************
;
;Сброс переменных xn,xn1,xn2,xn3,xn4,xn5,yn
sub ax,ax ;сброс аккумулятора AX
mov xn,ax ;сброс xn
mov xn1,ax ;сброс xn1
mov xn2,ax ;сброс xn2
mov xn3,ax ;сброс xn3
mov xn4,ax ;сброс xn4
mov xn5,ax ;сброс xn5
mov yn,ax ;сброс yn
;************************************************************************
;Вычисление W1=10xn
M1: mov ax,xn ;запись xn в AX
cwd ;расширение слова до двойного слова
add ax,ax ;получим 2Xnмл и сохраним в AX
adc dx,dx ;получим 2Xnст и сохраним в DX
mov di,ax ;запомним 2Xnмл в DI
mov si,dx ;запомним 2Xnст в SI
add ax,ax ;вычисление 4Xnмл и запись в AX
adc dx,dx ;вычисление 4Xnст и запись в DX
add ax,ax ;вычисление 8Xnмл и запись в AX
adc dx,dx ;вычисление 8Xnст и запись в DX
add ax,di ;вычисление 10Xnмл и запись в AX
adc dx,si ;вычисление 10Xnст и запись в DX
mov bx,ax ;сохранение
mov bp,dx ;результатов в BP:BX
;************************************************************************
;
;Вычисление W2=W1+7xn1
mov ax,xn1 ;запись xn1 в аккумулятора
cwd ;расширение xn1 до двойного слова
mov di,ax ;запомним Xn1мл в DI
mov si,dx ;запомним Xn1ст в SI
add ax,ax ;вычисление 2Xn1мл и сохраним в AX
adc dx,dx ;вычисление 2Xn1ст и сохраним в DX
add ax,ax ;вычисление 4Xn1мл и запись в AX
adc dx,dx ;вычисление 4Xn1ст и запись в DX
add ax,ax ;вычисление 8Xn1мл и запись в AX
adc dx,dx ;вычисление 8Xn1ст и запись в DX
sub ax,di ;вычисление 7Xn1мл и запись в AX
sbb dx,si ;вычисление 7Xn1ст и запись в DX
add bx,ax ;вычисление младшей части 10xn+7xn1
adc bp,dx ;вычисление старшей части 10xn+7xn1
;************************************************************************
;;Вычисление W3=W2+4xn2
mov ax,xn2 ;запись xn2 в аккумулятора
cwd ;расширение xn2 до двойного слова
add ax,ax ;вычисление 2Xn2мл и сохраним в AX
adc dx,dx ;вычисление 2Xn2ст и сохраним в DX
add ax,ax ;вычисление 4Xn2мл и запись в AX
adc dx,dx ;вычисление 4Xn2ст и запись в DX
add bx,ax ;вычисление младшей части 10xn+7xn1+4xn2
adc bp,dx ;вычисление старшей части 10xn+7xn1+4xn2
;************************************************************************
;Вычисление W4=W3+1xn3
mov ax,xn3 ;запись xn3 в аккумулятора
cwd ;расширение xn3 до двойного слова
add bx,ax ;вычисление младшей части 10xn+7xn1+4xn2+1xn3
adc bp,dx ;вычисление старшей части 10xn+7xn1+4xn2+1xn3
;************************************************************************
;
;Вычисление W5=W3-2xn4
mov ax,xn4 ;запись xn4 в аккумулятора
cwd ;расширение xn4 до двойного слова
add ax,ax ;вычисление 2Xn4мл и сохраним в AX
adc dx,dx ;вычисление 2Xn4ст и сохраним в DX
sub bx,ax ;вычисление младшей части 10xn+7xn1+4xn2+1xn3-2xn4
sbb bp,dx ;вычисление старшей части 10xn+7xn1+4xn2+1xn3-2xn4
;************************************************************************
;
;Вычисление W6=W5-5xn5
mov ax,xn5 ;запись xn5 в аккумулятора
cwd ;расширение xn5 до двойного слова
mov di,ax ;запомним Xn5мл в DI
mov si,dx ;запомним Xn5ст в SI
add ax,ax ;вычисление 2Xn5мл и сохраним в AX
adc dx,dx ;вычисление 2Xn5ст и сохраним в DX
add ax,ax ;вычисление 4Xn5мл и запись в AX
adc dx,dx ;вычисление 4Xn5ст и запись в DX
add ax,di ;вычисление 5Xn5мл и запись в AX
adc dx,si ;вычисление 5Xn5ст и запись в DX
sub bx,ax ;вычисление младшей части 10xn+7xn1+4xn2+1xn3-;2xn4-5xn5
sbb bp,dx ;вычисление старшей части 10xn+7xn1+4xn2+1xn3-;2xn4-5xn5
;************************************************************************
;Проверка на переполнение
mov ax,bx ;передача делимого W6
mov dx,bp ;в DX:AX
cmp ax,r1m ;сравнение ax с r1m
sbb dx,r1c ;сравнение dx с r1c
jns m2 ;переход на метку m2 если W5>15(+ymax)
mov dx,bp ;восстановить DX
cmp ax,r2m ;сравнить ax c r2m
sbb dx,r2c ;сравнить dx с r2c
js m3 ;переход на метку m3 если W5<15(-ymax)
;************************************************************************
;Деление DX:AX на k=15
mov dx,bp ;восстановить dx
mov si,k ;запись делителя k в si
idiv si ;ax <- dx:ax/si
mov yn,ax ;запись результата деления в yn
jmp m4 ;переход на метку m4
m2: mov yn,7FFFh ;запись в yn константы 7FFFh
jmp m4 ;переход на метку m4
m3: mov yn,8000h ;запись в yn константы 8000h
jmp m4 ;переход на метку m4
;************************************************************************
;Формирование очереди
m4:
mov ax,xn4 ;передать xn4
mov xn5,ax ;на место xn5
mov ax,xn3 ;передать xn3
mov xn4,ax ;на место xn4
mov ax,xn2 ;передать xn2
mov xn3,ax ;на место xn3
mov ax,xn1 ;передать xn1
mov xn2,ax ;на место xn2
mov ax,xn ;передать xn
mov xn1,ax ;на место xn1
jmp M1 ;переход на метку M1
;************************************************************************
;
;Окончание программы
mov AH,4CH ;функция DOS
int 21H ;выход из программы
filtr ENDP ;конец процедуры filtr
END filtr ;конец программы