1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
| ;Определение символических имён операндов
B0: .EQU 90h ;линия P1.0 для вывода импульса
;запуска АЦП
PB1: .EQU 7002h ;порт PB РY55
PB2: .EQU 0801h ;порт PB РФ55
RGRU: .EQU 7000h ;регистр управляющего слова РУ55
SRU: .EQU 02h ;управляющее слово для настройки
;портов РУ55
RGRF: .EQU 0803h ;регистр направления передачи порта РB(РФ55)
SRF: .EQU 00h ;Управляющее слово для настройки портов
; (РФ55)
TMOD: .EQU 89h ;регистр управления режимами
;таймеров-счётчиков
STMOD: .EQU 02h ;управляющее слово для настройки
;таймера-счётчика
TH0: .EQU 8Ch ;старший байт Т/С0
STH0: .EQU 9Ah ;управляющее слово для задания
;частоты переполнения T/C0
TR0: .EQU 8Ch ;управляющий бит пуска T/C0
IE: .EQU A8h ;регистр разрешения прерываний
SIE: .EQU 83h ;слово разрешения прерываний
;от T/C0 и входа INT0
B: .EQU F0h ;регистр В
K1: .EQU 4Eh ;коэффициент разностного уравнения
K2: .EQU CCh ;коэффициент разностного уравнения
KM: .EQU 79h ;коэффициент масштабирования
X: .EQU 30h ;ячейка хранения отсчёта Xn
X2: .EQU 32h ;ячейка хранения отсчёта Xn-2
Y: .EQU 40h ;ячейка хранения отсчёта Yn
Y1: .EQU 41h ;ячейка хранения отсчёта Yn-1
PR1: .EQU 50h ;ячейка хранения произведения PR1n
PR2: .EQU 51h ;ячейка хранения произведения PR2n
.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, #SRU ;настройка
MOV DPTR, #RGRU ;порта PB РY55 -
MOVX @DPTR, A ;на ввод
MOV A, #SRF ;настройка порта PВ РФ55
MOV DPTR, #RGRF ;на вывод
MOVX @DPTR, A ;
MOV IE, #SIE ;разрешение прерываний
;от Т/С0 и входа INT0
STOP: SJMP STOP ;останов программы
;Формирование импульса пуска АЦП по внутреннему прерыва-
;нию от Т/С0
S2: .SECTION
.ORG 000Bh
LJMP START ;переход к программе
;формирования импульса
;пуска ПУ
S3: .SECTION
.ORG 00D0h
START: CLR B0 ;сброс бита Р1.0
SETB B0 ;установка бита Р1.0
RETI ;возврат из подпрограм-
;мы обработки прерыва-
;ния
;Вычисление выходного отсчёта по сигналу внешнего прерыва-
;ния от входа INT0, рабочий цикл фильтра
S4: .SECTION
.ORG 0003h
LJMP XYOUT ;переход к программе
;рабочего цикла фильтра
S5: .SECTION
.ORG 0100h
XYOUT: MOV DPTR, #PB1 ;ввод отсчёта Xn
MOVX A, @DPTR ;через порт РВ РУ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
;в памяти
;программный модуль вычисления
;произведения PR1n := KXn-2
;Xn хранится в ячейке ОЗУ с адресом X-2
;PR1n записать в ячейку ОЗУ с адресом PR1
M2: MOV A, X2 ;копирование Xn в аккуму-
RLC A ;лятор и анализ знака
JC M3 ;переход к программе ум-
;ножения отрицательного
;отсчёта Xn на K
RRC A ;восстановление положи-
;тельного отсчёта Xn
;в аккумуляторе
MOV B, #K1 ;вычисление произведе-
MUL AB ;ния K1Xn-2
MOV PR1, B ;запоминание K1 Xn-2
;в памяти
SJMP M4 ;переход к продолжению
M3: RRC A ;восстановление отрица-
;тельного отсчёта Xn-2
;в аккумуляторе
CPL A ;получение положительно-
INC A ;го отсчёта Xn-2 (смена зна-
;ка)
MOV B, #K1 ;вычисление произведе-
MUL AB ;ния K1Xn-2 и пересылка
MOV A, B ;в аккумулятор
CPL A ;получение отрицательно-
INC A ;го произведения K1Xn-2
;(смена знака)
MOV PR1, A ;запоминание K1Xn-2 в па-
;мяти
;программный модуль вычисления
;произведения PR2n := K2Yn-1
;Yn-1 хранится в ячейке ОЗУ с адресом Y1
;PR2n записать в ячейку ОЗУ с адресом PR2
M4: MOV A, Y1 ;копирование Yn-1 в аккуму-
RLC A ;лятор и анализ знака
JC M5 ;переход к программе ум-
;ножения отрицательного
;отсчёта Yn-1 на K
RRC A ;восстановление положи-
;тельного отсчёта Yn-1
;в аккумуляторе
MOV B, #K2 ;вычисление произведе-
MUL AB ;ния K2Yn-1
MOV PR2, B ;запоминание K2 Yn-1
;в памяти
SJMP M6 ;переход к продолжению
M5: RRC A ;восстановление отрица-
;тельного отсчёта Yn-1
;в аккумуляторе
CPL A ;получение положительно-
INC A ;го отсчёта Yn-1 (смена зна-
;ка)
MOV B, #K2 ;вычисление произведе-
MUL AB ;ния K2Yn-1 и пересылка
MOV A, B ;в аккумулятор
CPL A ;получение отрицательно-
INC A ;го произведения K2Yn-2
;(смена знака)
MOV PR2, A ;запоминание K2Yn-2 в па-
;мяти
;программный модуль вычисления выходного
;отсчёта Yn =Xn + PR1n - PR2n, слагаемые
;хранятся в ячейках ОЗУ, результат записать
;в ячейку ОЗУ ,организовать вывод по сигналам готовности и квитирования
M6: MOV A, X2 ;вычисление отсчёта Yn
ADD A, PR1 ;и сохранение в памяти
CLR C ;
SUBB A, PR2 ;
MOV Y, A ;
ADD A, #80h ;получение смещённого
;кода Yn для ЦАП
MOV DPTR, #PB2 ;вывод Yn
MOVX @DPTR, A ;через порт
;РB РФ55
;программный модуль сдвига отсчётов
;в памяти, подготовка следующего рабочего
;цикла
MOV X2, X ;
MOV Y1, Y ;
RETI ;возврат из подпрограммы
;обслуживания прерыва-
;по входу INT0
.END |