3. КР1821РУ55- микросхема, в состав которой входят: ОЗУ, таймер, два 8-разрядных (РА и РВ) порта ввода/вывода и один 6-разрядный порт (РС).
Выходной сигнал должен иметь аналоговый вид, для преобразования цифрового кода в аналоговый сигнал, используя ЦАП типа AD9708. Микросхема AD9708 представляет собой 8-разрядный ЦАП, построенный по схеме на транзисторных источниках тока, весовые токи формируются с помощью матрицы R-2R. В качестве опорного источника напряжения может выбираться либо внутренний – с напряжением +1,2 В, либо – внешний. Для обеспечения требуемого размаха напряжения ±5 В, к токовым выходам ЦАП подключаем операционный усилитель.
5. Разработка и отладка программы на языке команд микропроцессора
Рабочая программа фильтра разрабатывается на основе алгоритма функционирования устройства. Для настройки таймера/счетчика Т/С0, в качестве таймера, на работу в непрерывном режиме 2 (без блокировки сигналом и с перезагрузкой после каждого цикла счета) необходимо управляющие биты GATE0=0, C/=0 и код режима 10 записать в состав управляющего слова (константа #02) для регистра TMOD при инициализации – команда MOV 89, #02.
Управляющее слово для регистра TMOD (прямой адрес 89)
TMOD.7
TMOD.6
TMOD.5
TMOD.4
TMOD.3
TMOD.2
TMOD.1
TMOD.0
GATE 1
C/ 1
M 1.1
M 0.1
GATE 0
C/ 0
M 1.0
M 0.0
X(0)
0
1
Для обеспечения требуемой частоты дискретизации , при инициализации, константа #8Е должна быть записана в регистр TH0 – команда MOV 8C, #8Е. Пуск Т/С0 производится путем установке в управляющем регистре TCON бита TR0=1. Команда SETB 8C.
Для настройки порта РВ БИС РУ55 на ввод данных надо в состав регистра управляющего слова записать константу #00.
Управляющее слово для РУС БИС HE 55 (адрес 7000)
D7
D6
D5
D4
D3
D2
D1
D0
TM2
TM1
IE B
IE A
PC2
PC1
PB
PA
x(0)
При инициализации – команды MOV A, #00, MOV DPTR, #7000, MOVX @DPTR, A.
А для настройки порта РВ РФ 55 на вывод данных надо в регистр направления передачи порта РВ записать 1. При инициализации – команды MOV A, #01, MOV DPTR, #0803, MOVX @DPTR, A.
Формирование импульса запуска внешнего источника данных выполняется по прерывания от флага TF0, устанавливающегося при переполнении Т/С0. Подпрограмма обработки прерывания от флага TF0 имеет стартовый адрес 000В и содержит команды: CLR 90, SETB 90(сброс и установка бита по линии Р1.0).
Настройка прерываний необходима, так как в результате сброса МК все прерывания запрещены (управляющий регистр IE обнуляется). В первую очередь необходимо разрешить прерывания вообще (бит EA=1), также разрешить прерывания от Т/С0 (бит ET0=1) и по входу (бит EXO=1).
Управляющее слово для регистра IE (прямой адрес А8)
IE 7
IE 6
IE 5
IE 4
IE 3
IE 2
IE 1
IE 0
EA
—
ES
ET1
EX1
ET0
EX0
При инициализации – команда MOV A8, #83.
Переопределять приоритеты прерываний не требуется, так как в результате задержки преобразования внешним устройством аналогового сигнала в цифровой код, запросы на прерывания от Т/С0 и по входу по времени не совпадают (в результате сброса МК управляющий регистр IP – обнуляется).
Распределение памяти ОЗУ (КР1830ВЕ31).
70h-7Fh - стек;
30h, 31h, 32h – хранение отсчетов , , ;
40h, 41h – хранение выходных отсчетов , ;
50h, 51h – хранение отсчетов , .
Распределение памяти ПЗУ (КР1821РФ55).
0000h – команда перехода к программе инициализации по сигналу RST
0003h – команда перехода к программе вычисления и вывода выходного отсчета по сигналу на входе ;
000Bh – команда перехода к программе формирования импульса внешнего источника данных по сигналу переполнения от Т/С0;
00A0h … 00СFh – программа инициализации;
00D0h … 00FFh – программа формирования импульса запуска внешнего источника данных;
0100h … 07FFh – программа вычисления и вывода выходного отсчета на ЦАП.
Текст программы
Программа "Цифровой фильтр (нижних частот)
Автор: Дмитриев Александр Юрьевич
Дата: 12 мая 2007 года
Разностное уравнение:
Определение символических имен операндов
B0: .EQU 90h ;линия для вывода импульса запуска внешнего ;источника данных
PBRU: .EQU 7002h ;порт РВ РУ 55
RGRU: .EQU 7000h ;регистр управляющего слова РУ 55
SRU: .EQU 00h ;управляющее слово для настройки порта РВ РУ 55
PBRF: .EQU 0801h ;порт РВ РФ 55
RGRF: .EQU 0803h ;регистр направления передачи порта РВ РФ 55
SRF: .EQU 01h ;управляющее слово для регистра направления передачи порта РВ РФ 55
TMOD: .EQU 89h ;регистр управления Т/С
STMOD: .EQU 02h ;управляющее слово для настройки Т/С0
TH0: .EQU 8Ch ;старший байт Т/С0
STH0: .EQU 8Eh ;управляющее слово для задания частоты переполнения Т/С0
TR0: .EQU 8Ch ;управляющий бит пуска Т/С0
IE: .EQU A8h ;регистр управления прерываниями
SIE: .EQU 83h ;управляющее слово для настройки прерываний
B: .EQU F0h ;регистр В
k1: .EQU F8h ;коэффициент =0,97
k2: .EQU D6h ;коэффициент =0,8394
Km: .EQU 5Bh ;коэффициент масштабирования
X: .EQU 30h ;ячейка хранения отсчета
X1: .EQU 31h ;ячейка хранения отсчета
X2: .EQU 32h ;ячейка хранения отсчета
Y: .EQU 40h ;ячейка хранения отсчета
Y1: .EQU 41h ;ячейка хранения отсчета
P1: .EQU 50h ;хранение отсчета
P2: .EQU 51h ;хранение отсчета
FILLCHAR 00h ;записать в пропуски между секциями 00
Инициализация по сигналу 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 ;РВ РУ 55
MOVX @DPTR, A ;на ввод данных
MOV A, #SRF ;настройка порта
MOV DPTR, #RGRF ;РВ РФ 55
MOVX @DPTR, A ;на вывод данных
MOV IE, #SIE ;настройка прерываний
STOP: SJMP STOP ;останов МК
Формирование импульса по внутреннему прерыванию от Т/С0
S2: .SECTION
ORG 000Bh
LJMP START ;переход к п/п формирования импульса запуска внешнего источника данных
S3: .SECTION
ORG 00D0h
START: CLR B0 ;сброс бита В0
SETB B0 ;установка бита В0
RETI ;возврат из п/п обслуживания прерывания от Т/С0
Вычисление выходного отсчета по сигналу внешнего прерывания по входу , рабочий цикл фильтра
S4: .SECTION
ORG 0003h
LJMP XYOUT
S5: .SECTION
ORG 0100h
XYOUT: MOV DPTR, #PBRU ;ввод данных через
MOVX A, @DPTR ;РВ РУ 55
Программный модуль масштабирования:
вычисление произведения =
входной отсчет - в аккумуляторе, масштабированный отсчет записать в ОЗУ
RLC A ;анализ знака
JC M1 ;переход к программе умножения отрицательного отсчета на
RRC A ;восстановление положительного отсета в аккумуляторе
MOV B, #Km ;вычисление произведения
MUL AB ;
MOV X, B ;запоминание масштабированного отсчета в памяти
SJMP M2 ;переход к продолжению
M1: RRC A ;восстановление отрицательного отсчета в аккумуляторе
CPL A ;получение положительного
INC A ;отсчета (смена знака)
MOV B, #Km ;вычисление произведе-
MUL AB ;ния и пересылка
MOV A, B ;в аккумулятор
CPL A ;получение отрицательного
INC A ;произведения (смена знака) MOV X, A ;запоминание масштабированного отсчета в памяти программный модуль вычисления произведения
Страницы: 1, 2, 3