Принципиальная схема содержит 15 микросхем. Схема приведена в приложении. Микропроцессор К1810ВМ88 работает в максимальном режиме. Его выводы, включая сигнал переключения режима, обозначены в соответствий с этим режимом. Тактовые сигналы для процессора вырабатываются генератором К1810ГФ84 с частотой 5МГц.
Микропроцессор подключен к 8-разрядной шине данных с помощью одной 8-разрдной БИС шинного формирователя КА580ВА86. Шина адреса 20- разрядная, организуется с помощью трёх 8-разрдных регистров-защёлок К580ИР82. Для получения емкости ПЗУ 4Кбайт, применено наращивание памяти двумя микросхемами КР566РТ18. Управление регистрами адреса, шинным формирователем и памятью производится с помощью контроллера шины К1810ВГ88 по сигналам состояния с микропроцессора.
7. Основные результаты разработки.
Аппаратурные затраты: 15 микросхем.
Длина программы в байтах: 6 190 байт.
Время выполнения программы (1 проход): 574 тактов.
Расчёт времени выполнения программы Таблица 3
Мнемоника | Вид адресации | Число тактов на выполнение программы |
XOR AX,AX | Регистровая | |
MOV X1,AX | Прямая | |
MOV X2,AX | Прямая | |
MOV X3,AX | Прямая | |
MOV X4,AX | Прямая | |
MOV X5,AX | Прямая | |
MOV X,AX | Прямая | |
CWD | — | |
MOV SP,DX | Регистровая | |
ADD AX,AX | Регистровая | |
ADC DX,DX | Регистровая | |
… | … | … |
MOV AX,8000H | Регистровая | |
MOV Yn,AX | Прямая | |
JMP NEXT | — | |
MOV AX,4CH | Регистровая | |
INT 21H | — |
8. Отладка программы.
При X>0 (X=100) Таблица 4
Xn | ||||||
Yn | AA | |||||
Xn=100 | Xn=100 | Xn=100 | Xn=100 | Xn=100 | Xn=100 | |
Xn-1=0 | Xn-1=100 | Xn-1=100 | Xn-1=100 | Xn-1=100 | Xn-1=100 | |
Xn-2=0 | Xn-2=0 | Xn-2=100 | Xn-2=100 | Xn-2=100 | Xn-2=100 | |
Xn-3=0 | Xn-3=0 | Xn-3=0 | Xn-3=100 | Xn-3=100 | Xn-3=100 | |
Xn-4=0 | Xn-4=0 | Xn-4=0 | Xn-4=0 | Xn-4=100 | Xn-4=100 | |
Xn-5=0 | Xn-5=0 | Xn-5=0 | Xn-5=0 | Xn-5=0 | Xn-5=100 | |
Yn=AA | Yn=122 | Yn=166 | Yn=177 | Yn=155 | Yn=100 |
При X<0 (X=-100) Таблица 5
Xn | FF00 | FF00 | FF00 | FF00 | FF00 | FF00 |
Yn | FF56 | FEDE | FE9A | FE89 | FEAB | FF00 |
Xn= FF00 | Xn= FF00 | Xn= FF00 | Xn= FF00 | Xn= FF00 | Xn= FF00 | |
Xn-1= 0 | Xn-1= FF00 | Xn-1= FF00 | Xn-1= FF00 | Xn-1= FF00 | Xn-1= FF00 | |
Xn-2=0 | Xn-2= 0 | Xn-2= FF00 | Xn-2= FF00 | Xn-2= FF00 | Xn-2= FF00 | |
Xn-3=0 | Xn-3=0 | Xn-3= 0 | Xn-3= FF00 | Xn-3= FF00 | Xn-3= FF00 | |
Xn-4=0 | Xn-4=0 | Xn-4=0 | Xn-4= 0 | Xn-4= FF00 | Xn-4= FF00 | |
Xn-5=0 | Xn-5=0 | Xn-5=0 | Xn-5=0 | Xn-5= 0 | Xn-5= FF00 | |
Yn=FF56 | Yn= FEDE | Yn= FE9A | Yn= FE89 | Yn= FEAB | Yn= FF00 |
При положительном переполнении (X=8000) Таблица 6
Xn | ||||||
Yn | AAAB | |||||
Xn= 8000 | Xn= 8000 | Xn= 8000 | Xn= 8000 | Xn= 8000 | Xn= 8000 | |
Xn-1= 0 | Xn-1= 8000 | Xn-1= 8000 | Xn-1= 8000 | Xn-1= 8000 | Xn-1= 8000 | |
Xn-2=0 | Xn-2= 0 | Xn-2= 8000 | Xn-2= 8000 | Xn-2= 8000 | Xn-2= 8000 | |
Xn-3=0 | Xn-3=0 | Xn-3= 0 | Xn-3= 8000 | Xn-3= 8000 | Xn-3= 8000 | |
Xn-4=0 | Xn-4=0 | Xn-4=0 | Xn-4= 0 | Xn-4= 8000 | Xn-4= 8000 | |
Xn-5=0 | Xn-5=0 | Xn-5=0 | Xn-5=0 | Xn-5= 0 | Xn-5= 8000 | |
Yn=AAAB | Yn= 8000 | Yn= 8000 | Yn= 8000 | Yn= 8000 | Yn= 8000 |
При отрицательном переполнении (X=7FFF) Таблица 7
Xn | 7FFF | 7FFF | 7FFF | 7FFF | 7FFF | 7FFF |
Yn | 7FFF | 7FFF | 7FFF | 7FFF | 7FFF | |
Xn= 7FFF | Xn= 7FFF | Xn= 7FFF | Xn= 7FFF | Xn= 7FFF | Xn= 7FFF | |
Xn-1= 0 | Xn-1= 7FFF | Xn-1= 7FFF | Xn-1= 7FFF | Xn-1= 7FFF | Xn-1= 7FFF | |
Xn-2=0 | Xn-2= 0 | Xn-2= 7FFF | Xn-2= 7FFF | Xn-2= 7FFF | Xn-2= 7FFF | |
Xn-3=0 | Xn-3=0 | Xn-3= 0 | Xn-3= 7FFF | Xn-3= 7FFF | Xn-3= 7FFF | |
Xn-4=0 | Xn-4=0 | Xn-4=0 | Xn-4= 0 | Xn-4= 7FFF | Xn-4= 7FFF | |
Xn-5=0 | Xn-5=0 | Xn-5=0 | Xn-5=0 | Xn-5= 0 | Xn-5= 7FFF | |
Yn=5554 | Yn= 7FFF | Yn= 7FFF | Yn= 7FFF | Yn= 7FFF | Yn= 7FFF |
При положительном переполнении и X=8009>Xmax Таблица 8
Xn | AAB1 | |||||
Yn | ||||||
Xn= 8009 | Xn= 8009 | Xn= 8009 | Xn= 8009 | Xn= 8009 | Xn= 8009 | |
Xn-1= 0 | Xn-1= 8009 | Xn-1= 8009 | Xn-1= 8009 | Xn-1= 8009 | Xn-1= 8009 | |
Xn-2=0 | Xn-2= 0 | Xn-2= 8009 | Xn-2= 8009 | Xn-2= 8009 | Xn-2= 8009 | |
Xn-3=0 | Xn-3=0 | Xn-3= 0 | Xn-3= 8009 | Xn-3= 8009 | Xn-3= 8009 | |
Xn-4=0 | Xn-4=0 | Xn-4=0 | Xn-4= 0 | Xn-4= 8009 | Xn-4= 8009 | |
Xn-5=0 | Xn-5=0 | Xn-5=0 | Xn-5=0 | Xn-5= 0 | Xn-5= 8009 | |
Yn=AAB1 | Yn= 8000 | Yn= 8000 | Yn= 8000 | Yn= 8000 | Yn= 8009 |
Листинг программы
Turbo Assembler Version 4.1 13/05/11 19:04:49 Page 1
filter.ASM
1;Программа вычисления Yn=(10Xn+7Xn-1+4Xn-2+Xn-3-2Xn-4-5Xn-5)/15
2 0000.model small;модель памяти SMALL
3 0000.stack 64;модель стека 64
4 0000.data;начало сегманта данных
5 0000 0000 xn dw 0;резервирование
6 0002 0000 xn1 dw 0;места в памяти
7 0004 0000 xn2 dw 0;под переменные
8 0006 0000 xn3 dw 0;xn,xn1,xn2,xn3
9 0008 0000 xn4 dw 0;xn4
10 000A 0000 xn5 dw 0;xn5
11 000C 0000 yn dw 0;yn
12;******************************************************************************
13;
14;Константы для деления и выявления переполнения
15;
16 =7FF1 r1m equ 7ff1h;константа r1m примет значение k(+ymax)мл
17 =0007 r1c equ 0007h;константа r1c примет значение k(+ymax)ст
18 =8000 r2m equ 8000h;константа r2m примет значение k(-ymax)мл
19 =FFF8 r2c equ 0fff8h;константа r2c примет значение k(-ymax)ст
20 =000F k equ 15;делитель
21;******************************************************************************
22;
23;Программа вычисления выражения
24;
25 000E.code;начало кодового сегмента
26 0000 filtr proc;начало процедуры filtr
27 0000 B8 0000s mov ax,@data;указание регистра DS
28 0003 8E D8 mov ds,ax;сегмент двнных
29;******************************************************************************
30;
31;Сброс переменных xn,xn1,xn2,xn3,xn4,xn5,yn
32 0005 2B C0 sub ax,ax;сброс аккумулятора AX
33 0007 A3 0000r mov xn,ax;сброс xn
34 000A A3 0002r mov xn1,ax;сброс xn1
35 000D A3 0004r mov xn2,ax;сброс xn2
36 0010 A3 0006r mov xn3,ax;сброс xn3
37 0013 A3 0008r mov xn4,ax;сброс xn4
38 0016 A3 000Ar mov xn5,ax;сброс xn5
39 0019 A3 000Cr mov yn,ax;сброс yn
40;******************************************************************************
41;
42;Вычисление W1=10xn
43 001C A1 0000r M1: mov ax,xn;запись xn в AX
44 001F 99 cwd;расширение слова до двойного слова
45 0020 03 C0 add ax,ax;получим 2Xnмл и сохраним в AX
46 0022 13 D2 adc dx,dx;получим 2Xnст и сохраним в DX
47 0024 8B F8 mov di,ax;запомним 2Xnмл в DI
48 0026 8B F2 mov si,dx;запомним 2Xnст в SI
49 0028 03 C0 add ax,ax;вычисление 4Xnмл и запись в AX
50 002A 13 D2 adc dx,dx;вычисление 4Xnст и запись в DX
51 002C 03 C0 add ax,ax;вычисление 8Xnмл и запись в AX
52 002E 13 D2 adc dx,dx;вычисление 8Xnст и запись в DX
53 0030 03 C7 add ax,di;вычисление 10Xnмл и запись в AX
54 0032 13 D6 adc dx,si;вычисление 10Xnст и запись в DX
55 0034 8B D8 mov bx,ax;сохранение
56 0036 8B EA mov bp,dx;результатов в BP:BX
57;******************************************************************************
Turbo Assembler Version 4.1 13/05/11 19:04:49 Page 2
filter.ASM
58;
59;Вычисление W2=W1+7xn1
60 0038 A1 0002r mov ax,xn1;запись xn1 в аккумулятора
61 003B 99 cwd;расширение xn1 до двойного слова
62 003C 8B F8 mov di,ax;запомним Xn1мл в DI
63 003E 8B F2 mov si,dx;запомним Xn1ст в SI
64 0040 03 C0 add ax,ax;вычисление 2Xn1мл и сохраним в AX
65 0042 13 D2 adc dx,dx;вычисление 2Xn1ст и сохраним в DX
66 0044 03 C0 add ax,ax;вычисление 4Xn1мл и запись в AX
67 0046 13 D2 adc dx,dx;вычисление 4Xn1ст и запись в DX
68 0048 03 C0 add ax,ax;вычисление 8Xn1мл и запись в AX
69 004A 13 D2 adc dx,dx;вычисление 8Xn1ст и запись в DX
70 004C 2B C7 sub ax,di;вычисление 7Xn1мл и запись в AX
71 004E 1B D6 sbb dx,si;вычисление 7Xn1ст и запись в DX
72 0050 03 D8 add bx,ax;вычисление младшей части 10xn+7xn1
73 0052 13 EA adc bp,dx;вычисление старшей части 10xn+7xn1
74;******************************************************************************
75;
76;Вычисление W3=W2+4xn2
77 0054 A1 0004r mov ax,xn2;запись xn2 в аккумулятора
78 0057 99 cwd;расширение xn2 до двойного слова
79 0058 03 C0 add ax,ax;вычисление 2Xn2мл и сохраним в AX
80 005A 13 D2 adc dx,dx;вычисление 2Xn2ст и сохраним в DX
81 005C 03 C0 add ax,ax;вычисление 4Xn2мл и запись в AX
82 005E 13 D2 adc dx,dx;вычисление 4Xn2ст и запись в DX
83 0060 03 D8 add bx,ax;вычисление младшей части 10xn+7xn1+4xn2
84 0062 13 EA adc bp,dx;вычисление старшей части 10xn+7xn1+4xn2
85;******************************************************************************
86;
87;Вычисление W4=W3+1xn3
88 0064 A1 0006r mov ax,xn3;запись xn3 в аккумулятора
89 0067 99 cwd;расширение xn3 до двойного слова
90 0068 03 D8 add bx,ax;вычисление младшей части 10xn+7xn1+4xn2+1xn3
91 006A 13 EA adc bp,dx;вычисление старшей части 10xn+7xn1+4xn2+1xn3
92;******************************************************************************
93;
94;Вычисление W5=W3-2xn4
95 006C A1 0008r mov ax,xn4;запись xn4 в аккумулятора
96 006F 99 cwd;расширение xn4 до двойного слова
97 0070 03 C0 add ax,ax;вычисление 2Xn4мл и сохраним в AX
98 0072 13 D2 adc dx,dx;вычисление 2Xn4ст и сохраним в DX
99 0074 2B D8 sub bx,ax;вычисление младшей части 10xn+7xn1+4xn2+1xn3-2xn4
100 0076 1B EA sbb bp,dx;вычисление старшей части 10xn+7xn1+4xn2+1xn3-2xn4
101;******************************************************************************
102;
103;Вычисление W6=W5-5xn5
104 0078 A1 000Ar mov ax,xn5;запись xn5 в аккумулятора
105 007B 99 cwd;расширение xn5 до двойного слова
106 007C 8B F8 mov di,ax;запомним Xn5мл в DI
107 007E 8B F2 mov si,dx;запомним Xn5ст в SI
108 0080 03 C0 add ax,ax;вычисление 2Xn5мл и сохраним в AX
109 0082 13 D2 adc dx,dx;вычисление 2Xn5ст и сохраним в DX
110 0084 03 C0 add ax,ax;вычисление 4Xn5мл и запись в AX
111 0086 13 D2 adc dx,dx;вычисление 4Xn5ст и запись в DX
112 0088 03 C7 add ax,di;вычисление 5Xn5мл и запись в AX
113 008A 13 D6 adc dx,si;вычисление 5Xn5ст и запись в DX
114 008C 2B D8 sub bx,ax;вычисление младшей части 10xn+7xn1+4xn2+1xn3-2xn4-5xn5
Turbo Assembler Version 4.1 13/05/11 19:04:49 Page 3
filter.ASM
115 008E 1B EA sbb bp,dx;вычисление старшей части 10xn+7xn1+4xn2+1xn3-2xn4-5xn5
116;******************************************************************************
117;
118 0090 8B C3 mov ax,bx;передача делимого W6
119 0092 8B D5 mov dx,bp;в DX:AX
120 0094 3D 7FF1 cmp ax,r1m;сравнение ax с r1m
121 0097 83 DA 07 sbb dx,r1c;сравнение dx с r1c
122 009A 79 17 jns m2;переход на метку m2 если W5>15(+ymax)
123 009C 8B D5 mov dx,bp;восстановить DX
124 009E 3D 8000 cmp ax,r2m;сравнить ax c r2m
125 00A1 83 DA F8 sbb dx,r2c;сравнить dx с r2c
126 00A4 78 16 js m3;переход на метку m3 если W5<15(-ymax)
127;******************************************************************************
128;
129;Деление DX:AX на k=15
130 00A6 8B D5 mov dx,bp;восстановить dx
131 00A8 BE 000F mov si,k;запись делителя k в si
132 00AB F7 FE idiv si;ax <- dx:ax/si
133 00AD A3 000Cr mov yn,ax;запись результата деления в yn
134 00B0 EB 13 90 jmp m4;перход на метку m4
135 00B3 C7 06 000Cr 7FFF m2: mov yn,7FFFh;запись в yn константы 7FFFh
136 00B9 EB 0A 90 jmp m4;перход на метку m4
137 00BC C7 06 000Cr 8000 m3: mov yn,8000h;запись в yn константы 8000h
138 00C2 EB 01 90 jmp m4;перход на метку m4
139;******************************************************************************
140;
141;Формирование очереди
142 00C5 m4:
143 00C5 A1 0008r mov ax,xn4;передать xn4
144 00C8 A3 000Ar mov xn5,ax;на место xn5
145 00CB A1 0006r mov ax,xn3;передать xn3
146 00CE A3 0008r mov xn4,ax;на место xn4
147 00D1 A1 0004r mov ax,xn2;передать xn2
148 00D4 A3 0006r mov xn3,ax;на место xn3
149 00D7 A1 0002r mov ax,xn1;передать xn1
150 00DA A3 0004r mov xn2,ax;на место xn2
151 00DD A1 0000r mov ax,xn;передать xn
152 00E0 A3 0002r mov xn1,ax;на место xn1
153 00E3 E9 FF36 jmp M1;переход на метку M1
154;******************************************************************************
155;
156;Окончание программы
157 00E6 B4 4C mov AH,4CH;функция DOS
158 00E8 CD 21 int 21H;выход из программы
159 00EA filtr ENDP;конец процедуры filtr
160 END filtr;конец программы
Turbo Assembler Version 4.1 13/05/11 19:04:49 Page 4
Symbol Table
Symbol Name Type Value
??DATE Text "13/05/11"
??FILENAME Text "filter "
??TIME Text "19:04:49"
??VERSION Number 040A
@32BIT Text 0
@CODE Text _TEXT
@CODESIZE Text 0
@CPU Text 0101H
@CURSEG Text _TEXT
@DATA Text DGROUP
@DATASIZE Text 0
@FILENAME Text FILTER
@INTERFACE Text 000H
@MODEL Text 2
@STACK Text DGROUP
@WORDSIZE Text 2
FILTR Near _TEXT:0000
K Number 000F
M1 Near _TEXT:001C
M2 Near _TEXT:00B3
M3 Near _TEXT:00BC
M4 Near _TEXT:00C5
R1C Number 0007
R1M Number 7FF1
R2C Number FFF8
R2M Number 8000
XN Word DGROUP:0000
XN1 Word DGROUP:0002
XN2 Word DGROUP:0004
XN3 Word DGROUP:0006
XN4 Word DGROUP:0008
XN5 Word DGROUP:000A
YN Word DGROUP:000C
Groups & Segments Bit Size Align Combine Class
DGROUP Group
STACK 16 0040 Para Stack STACK
_DATA 16 000E Word Public DATA
_TEXT 16 00EA Word Public CODE
Заключение
В результате выполнения курсовой работы на основе МП 1810ВМ88, работающего в максимальном режиме, произведена разработка микропроцессорной системы, выполняющей функцию цифровой фильтрации.
Построен алгоритм выполнения ЦФ и реализован на языке Assembler. Характеристики ЦФ исследованы в режиме отладки. Рассчитано время выполнения программы в числе тактов. Приведена функциональная схема МПС.
Разработанная МПС удовлетворяет требованиям задания, в частности, условию минимализации длины программы и времени вычисления.