- •Постановка задачи (введение)
- •Формализация задачи (определение функций аппаратной части и программы и способов их реализации)
- •Функциональная схема цифрового фильтра
- •Исходное состояние Фильтра после включения питания.
- •2.3Формализация настроек для инициализации фильтра.
- •Формализация определений для рабочего цикла фильтра.
- •Согласование кодов мк и цап
- •Разработка и описание общего алгоритма функционирования фильтра
- •Аппаратно - реализуемые операции Программно - реализуемые операции
- •5.Разработка и отладка программы на языке команд мк
- •Исходные определения и ручной расчёт результатов работы программы: "Цифровой фильтр (верхних частот)"
- •6.Составление электрической принципиальной схемы и описание функционирования фильтра
- •7. Расчет быстродействия фильтра
- •8. Анализ характеристик фильтра для заданных и реальных значений коэффициентов (нули и полюса, ачх, фчх, оценка устойчивости)
- •9.Заключение
- •10. Список использованных источников
5.Разработка и отладка программы на языке команд мк
Рабочая программа разработана на основе спроектированного алгоритма функционирования фильтра, результатов анализа и формализации.
Было проведено ассемблирование. Проанализировав содержание листинга программы, устранили возникшие ошибки (внесли исправление в исходный текст, с расширением .asm) и повторили ассемблирование. Далее запустили редактор связей link.exe. Получили выходной файл с расширением .tsk по запросу Parameter – ввели х.
; Распределение памяти ПЗУ (РФ 55)
;0000h – команда перехода к программе инициализации по сигналу RST
;0013h - команда перехода к программе вычисления и вывода выходного отсчёта по
;сигналу на входе
;000Bh – команда перехода к программе формирования импульса запуска устройства по
;сигналу переполнения Т/С0
;00A0h … 00CFh - программа инициализации
;00D0h … 00FFh - программа формирования импульса запуска устройства
;0100h … 07FFh - программа вычисления и вывода выходного отсчёта
; Распределение памяти ОЗУ(BE31)
;70h – 7Fh - стек
;30h,31h - хранение отсчётов Xn, Xn-1
;40h,41h – хранение отсчётов Yn,Yn-1
;50h – хранение отсчётов P1n.
;Программа "Цифровой фильтр (верхних частот)"
;Автор Оськин Александр Игоревич
;Дата 26.02.12
;Разностное уравнение Yn = Xn - Xn-1 - 0,495Yn-1
;Определение символических имён операндов
B6: .EQU 96h ;линия P1.6 для вывода импульса
;запуска АЦП
PB: .EQU 0801h ;порт PB РФ55
PA: .EQU 0800h ;порт PA РФ55
RGRF1: .EQU 0803h ;регистр направления передачи
;порта РB РФ55
RGRF2: .EQU 0802h ;регистр направления передачи
;порта РA РФ55
SRF1: .EQU 00h ;управляющее слово для настройки
;порта PB РФ55
SRF2: .EQU FFh ;управляющее слово для настройки
;порта PA РФ55
TMOD: .EQU 89h ;регистр управления режимами
;таймеров-счётчиков
STMOD: .EQU 02h ;управляющее слово для настройки
;таймера-счётчика
TH0: .EQU 8Ch ;старший байт Т/С0
STH0: .EQU 27h ;управляющее слово для задания
;частоты переполнения T/C0
TR0: .EQU 8Ch ;управляющий бит пуска T/C0
IE: .EQU A8h ;регистр разрешения прерываний
SIE: .EQU 86h ;слово разрешения прерываний
;от T/C0 и входа INT1
B: .EQU F0h ;регистр В
K: .EQU 7Eh ;коэффициент разностного уравнения
KM: .EQU 66h ;коэффициент масштабирования
X: .EQU 30h ;ячейка хранения отсчёта Xn
X1: .EQU 31h ;ячейка хранения отсчёта Xn-1
Y: .EQU 40h ;ячейка хранения отсчёта Yn
Y1: .EQU 41h ;ячейка хранения отсчёта Yn-1
PR: .EQU 50h ;ячейка хранения произведения PRn
.FILLCHAR 00h ;записать в пропусках
;между секциями нули
;Инициализация по сигналу RST
S0: .SECTION
.ORG 0000h
LJMP INIT ;переход к программе
;инициализации
S1: SECTION
.ORG 00A0h
INIT: MOV TMOD, #STMOD ;настройка режима Т/С0
MOV TH0, #STH0 ;задание частоты дискре-
;тизации
SETB TR0 ;пуск Т/С0
MOV A, #SRF1 ;настройка порта PB РФ55
MOV DPTR, #RGRF1 ;на ввод
MOVX @DPTR, A
MOV A, #SRF2 ;настройка порта РA РФ55
MOV DPTR, #RGRF2 ;на вывод
MOVX @DPTR, A
MOV IE, #SIE ;разрешение прерываний
;от Т/С0 и входа INT1
STOP: SJMP STOP ;останов программы
;Формирование импульса пуска АЦП по внутреннему прерыва-
;нию от Т/С0
S2: .SECTION
.ORG 000Bh
LJMP START ;переход к программе
;формирования импульса
;пуска АЦП
S3: .SECTION
.ORG 00D0h
START: CLR B6 ;сброс бита Р1.6
SETB B6 ;установка бита Р1.6
RETI ;возврат из подпрограм-
;мы обработки прерыва-
;ния
;Вычисление выходного отсчёта по сигналу внешнего прерыва-
;ния от входа INT1, рабочий цикл фильтра
S4: .SECTION
.ORG 0013h
LJMP XYOUT ;переход к программе
;рабочего цикла фильтра
S5: .SECTION
.ORG 0100h
XYOUT: MOV DPTR, #PA ;ввод отсчёта Xn из АЦП
MOVX A, @DPTR ;через порт РB РФ55
;программный модуль масштабирования:
;вычисление произведения Xn := KмXn
;входной отсчёт - в аккумуляторе, масштаби-
;рованный отсчёт записать в ячейку ОЗУ
RLC A ;анализ знака Xn
JC M1 ;переход к программе ум-
;ножения отрицательного
;отсчёта Xn на Kм
RRC A ;восстановление положи-
;тельного отсчёта Xn
;в аккумуляторе
MOV B, #KM ;вычисление произведе-
MUL AB ;ния KмXn
MOV X, B ;запоминание масштаби-
;рованного отсчёта Xn
;в памяти
SJMP M2 ;переход к продолжению
M1: RRC A ;восстановление отрица-
;тельного отсчёта Xn
;в аккумуляторе
CPL A ;получение положительно-
INC A ;го отсчёта Xn (смена зна-
;ка)
MOV B, #KM ;вычисление произведе-
MUL AB ;ния KмXn и пересылка
MOV A, B ;в аккумулятор
CPL A ;получение отрицательно-
INC A ;го произведения KмXn
;(смена знака)
MOV X, A ;запоминание масштаби-
;рованного отсчёта Xn
;в памяти
;программный модуль вычисления
;произведения PRn := KYn-1
;Yn-1 хранится в ячейке ОЗУ с адресом Y1
;PRn записать в ячейку ОЗУ с адресом PR
M2: MOV A, Y1 ;копирование Yn-1 в аккуму-
RLC A ;лятор и анализ знака
JC M3 ;переход к программе ум-
;ножения отрицательного
;отсчёта Yn-1 на K
RRC A ;восстановление положи-
;тельного отсчёта Yn-1
;в аккумуляторе
MOV B, #K ;вычисление произведе-
MUL AB ;ния KYn-1
MOV PR, B ;запоминание KYn-1
;в памяти
SJMP M4 ;переход к продолжению
M3: RRC A ;восстановление отрица-
;тельного отсчёта Yn-1
;в аккумуляторе
CPL A ;получение положительно-
INC A ;го отсчёта Yn-1 (смена зна-
;ка)
MOV B, #K ;вычисление произведе-
MUL AB ;ния KYn-1 и пересылка
MOV A, B ;в аккумулятор
CPL A ;получение отрицательно-
INC A ;го произведения KYn-1
;(смена знака)
MOV PR, A ;запоминание KYn-1 в па-
;мяти
;программный модуль вычисления выходного
;отсчёта Yn =Xn - Xn-1 - PRn, слагаемые
;хранятся в ячейках ОЗУ, результат записать
;в ячейку ОЗУ и вывести на ЦАП
M4: MOV A, X ;вычисление отсчёта Yn
SUBB A, X1
CLR c ;и сохранение в памяти
SUBB A, PR ;
MOV Y, A ;
ADD A, #80h ;получение смещённого
;кода Yn для ЦАП
MOV DPTR, #PA ;вывод Yn
MOVX @DPTR, A ;через порт
;РA РФ55
;программный модуль сдвига отсчётов
;в памяти, подготовка следующего рабочего
;цикла
MOV X1, X ;
MOV Y1, Y ;
RETI ;возврат из подпрограммы
;обслуживания прерыва-
;по входу INT1
.END
Отладка:
Tue May 8 2012 17:12 Page 1
2500 A.D. 8051 Macro Assembler - Version 4.02a
------------------------------------------------
Input Filename : osk.asm
Output Filename : osk.obj
1 ;Программа "Цифровой фильтр (верхних частот)"
2
3 ;Автор Оськин Александр Игоревич
4 ;Дата 26.02.12
5 ;Разностное уравнение Yn = Xn - Xn-1 - 0,495Yn-1
6
7
8 ;Определение символических имён операндов
9
10 0096 B6: .EQU 96h ;линия P1.6 для вывода импульса
11 ;запуска АЦП
12 0801 PB: .EQU 0801h ;порт PB РФ55
13 0800 PA: .EQU 0800h ;порт PA РФ55
14 0803 RGRF1: .EQU 0803h ;регистр направления передачи
15 ;порта РB РФ55
16 0802 RGRF2: .EQU 0802h ;регистр направления передачи
17 ;порта РA РФ55
18 0000 SRF1: .EQU 00h ;управляющее слово для настройки
19 ;порта PB РФ55
20 00FF SRF2: .EQU FFh ;управляющее слово для настройки
21 ;порта PA РФ55
22 0089 TMOD: .EQU 89h ;регистр управления режимами
23 ;таймеров-счётчиков
24 0002 STMOD: .EQU 02h ;управляющее слово для настройки
25 ;таймера-счётчика
26 008C TH0: .EQU 8Ch ;старший байт Т/С0
27 0027 STH0: .EQU 27h ;управляющее слово для задания
28 ;частоты переполнения T/C0
29 008C TR0: .EQU 8Ch ;управляющий бит пуска T/C0
30 00A8 IE: .EQU A8h ;регистр разрешения прерываний
31 0086 SIE: .EQU 86h ;слово разрешения прерываний
32 ;от T/C0 и входа INT1
33 00F0 B: .EQU F0h ;регистр В
34 007E K: .EQU 7Eh ;коэффициент разностного уравнения
35 0066 KM: .EQU 66h ;коэффициент масштабирования
36 0030 X: .EQU 30h ;ячейка хранения отсчёта Xn
37 0031 X1: .EQU 31h ;ячейка хранения отсчёта Xn-1
38 0040 Y: .EQU 40h ;ячейка хранения отсчёта Yn
39 0041 Y1: .EQU 41h ;ячейка хранения отсчёта Yn-1
40 0050 PR: .EQU 50h ;ячейка хранения произведения PRn
41
42 .FILLCHAR 00h ;записать в пропусках
43 ;между секциями нули
44
45 ;Инициализация по сигналу RST
46 0000 S0: .SECTION
47 0000 .ORG 0000h
Tue May 8 2012 17:12 Page 2
48 0000 02 00 A0 LJMP INIT ;переход к программе
49 ;инициализации
50 0000 S1: SECTION
51 00A0 .ORG 00A0h
52 00A0 75 89 02 INIT: MOV TMOD, #STMOD ;настройка режима Т/С0
53 00A3 75 8C 27 MOV TH0, #STH0 ;задание частоты дискре-
54 ;тизации
55 00A6 D2 8C SETB TR0 ;пуск Т/С0
56
57 00A8 74 00 MOV A, #SRF1 ;настройка порта PB РФ55
58 00AA 90 08 03 MOV DPTR, #RGRF1 ;на ввод
59 00AD F0 MOVX @DPTR, A
60 00AE 74 FF MOV A, #SRF2 ;настройка порта РA РФ55
61 00B0 90 08 02 MOV DPTR, #RGRF2 ;на вывод
62 00B3 F0 MOVX @DPTR, A
63
64
65 00B4 75 A8 86 MOV IE, #SIE ;разрешение прерываний
66 ;от Т/С0 и входа INT1
67
68 00B7 80 FE STOP: SJMP STOP ;останов программы
69 00B9
70 ;Формирование импульса пуска АЦП по внутреннему прерыва-
71 ;нию от Т/С0
72
73 0000 S2: .SECTION
74 000B .ORG 000Bh
75 000B 02 00 D0 LJMP START ;переход к программе
76 ;формирования импульса
77 ;пуска АЦП
78 0000 S3: .SECTION
79 00D0 .ORG 00D0h
80 00D0 C2 96 START: CLR B6 ;сброс бита Р1.6
81 00D2 D2 96 SETB B6 ;установка бита Р1.6
82
83 00D4 32 RETI ;возврат из подпрограм-
84 ;мы обработки прерыва-
85 ;ния
86
87 ;Вычисление выходного отсчёта по сигналу внешнего прерыва-
88 ;ния от входа INT1, рабочий цикл фильтра
89
90 0000 S4: .SECTION
91 0013 .ORG 0013h
92 0013 02 01 00 LJMP XYOUT ;переход к программе
93 ;рабочего цикла фильтра
94 0000 S5: .SECTION
95 0100 .ORG 0100h
96 0100 90 08 00 XYOUT: MOV DPTR, #PA ;ввод отсчёта Xn из АЦП
97 0103 E0 MOVX A, @DPTR ;через порт РB РФ55
98
99 ;программный модуль масштабирования:
100 ;вычисление произведения Xn := KмXn
101 ;входной отсчёт - в аккумуляторе, масштаби-
102 ;рованный отсчёт записать в ячейку ОЗУ
103
104 0104 33 RLC A ;анализ знака Xn
Tue May 8 2012 17:12 Page 3
105 0105 40 0A JC M1 ;переход к программе ум-
106 ;ножения отрицательного
107 ;отсчёта Xn на Kм
108
109 0107 13 RRC A ;восстановление положи-
110 ;тельного отсчёта Xn
111 ;в аккумуляторе
112
113 0108 75 F0 66 MOV B, #KM ;вычисление произведе-
114 010B A4 MUL AB ;ния KмXn
115
116 010C 85 F0 30 MOV X, B ;запоминание масштаби-
117 ;рованного отсчёта Xn
118 ;в памяти
119
120 010F 80 0D SJMP M2 ;переход к продолжению
121 0111 13 M1: RRC A ;восстановление отрица-
122 ;тельного отсчёта Xn
123 ;в аккумуляторе
124
125 0112 F4 CPL A ;получение положительно-
126 0113 04 INC A ;го отсчёта Xn (смена зна-
127 ;ка)
128 0114 75 F0 66 MOV B, #KM ;вычисление произведе-
129 0117 A4 MUL AB ;ния KмXn и пересылка
130 0118 E5 F0 MOV A, B ;в аккумулятор
131
132 011A F4 CPL A ;получение отрицательно-
133 011B 04 INC A ;го произведения KмXn
134 ;(смена знака)
135
136 011C F5 30 MOV X, A ;запоминание масштаби-
137 ;рованного отсчёта Xn
138 ;в памяти
139
140 ;программный модуль вычисления
141 ;произведения PRn := KYn-1
142 ;Yn-1 хранится в ячейке ОЗУ с адресом Y1
143 ;PRn записать в ячейку ОЗУ с адресом PR
144
145 011E E5 41 M2: MOV A, Y1 ;копирование Yn-1 в аккуму-
146 0120 33 RLC A ;лятор и анализ знака
147
148 0121 40 0A JC M3 ;переход к программе ум-
149 ;ножения отрицательного
150 ;отсчёта Yn-1 на K
151
152 0123 13 RRC A ;восстановление положи-
153 ;тельного отсчёта Yn-1
154 ;в аккумуляторе
155
156 0124 75 F0 7E MOV B, #K ;вычисление произведе-
157 0127 A4 MUL AB ;ния KYn-1
158 0128 85 F0 50 MOV PR, B ;запоминание KYn-1
159 ;в памяти
160 012B 80 0D SJMP M4 ;переход к продолжению
161
Tue May 8 2012 17:12 Page 4
162 012D 13 M3: RRC A ;восстановление отрица-
163 ;тельного отсчёта Yn-1
164 ;в аккумуляторе
165 012E F4 CPL A ;получение положительно-
166 012F 04 INC A ;го отсчёта Yn-1 (смена зна-
167 ;ка)
168 0130 75 F0 7E MOV B, #K ;вычисление произведе-
169 0133 A4 MUL AB ;ния KYn-1 и пересылка
170 0134 E5 F0 MOV A, B ;в аккумулятор
171
172 0136 F4 CPL A ;получение отрицательно-
173 0137 04 INC A ;го произведения KYn-1
174 ;(смена знака)
175 0138 F5 50 MOV PR, A ;запоминание KYn-1 в па-
176 ;мяти
177 ;программный модуль вычисления выходного
178 ;отсчёта Yn =Xn - Xn-1 - PRn, слагаемые
179 ;хранятся в ячейках ОЗУ, результат записать
180 ;в ячейку ОЗУ и вывести на ЦАП
181
182 013A E5 30 M4: MOV A, X ;вычисление отсчёта Yn
183 013C 95 31 SUBB A, X1
184 013E C3 CLR c ;и сохранение в памяти
185 013F 95 50 SUBB A, PR ;
186 0141
187 0141 F5 40 MOV Y, A ;
188
189 0143 24 80 ADD A, #80h ;получение смещённого
190 ;кода Yn для ЦАП
191
192 0145 90 08 00 MOV DPTR, #PA ;вывод Yn
193 0148 F0 MOVX @DPTR, A ;через порт
194 ;РA РФ55
195
196 ;программный модуль сдвига отсчётов
197 ;в памяти, подготовка следующего рабочего
198 ;цикла
199 0149 85 30 31 MOV X1, X ;
200 014C 85 40 41 MOV Y1, Y ;
201 014F 32 RETI ;возврат из подпрограммы
202 ;обслуживания прерыва-
203 ;по входу INT1
204 0150 .END
Lines Assembled : 204 Assembly Errors : 0
