Лабораторная работа 8 по цуиМП изучение алгоритма функционирования и программы цифрового фильтра Выполнил ст гр. 7011 Проверил
Скачать 1.53 Mb.
|
Министерство науки и высшего образования РФ ФГБОУ ВО «Рязанский государственный радиотехнический университет имени В.Ф. Уткина» Кафедра РТС Лабораторная работа №8 по ЦУиМП: «ИЗУЧЕНИЕ АЛГОРИТМА ФУНКЦИОНИРОВАНИЯ И ПРОГРАММЫ ЦИФРОВОГО ФИЛЬТРА» Выполнил ст.гр.7011: Проверил: Рязань, 2021 Цель работы: Изучение системы команд МК КР1830ВЕ31, их содержания, способов адресации. Изучение представления и преобразования данных в МП-системе. Изучение взаимодействия аппаратной части цифрового фильтра и программы. Изучение технологии отладки программы для МК с использованием программного отладчика. Установление истинности результатов выполнения программы цифрового фильтра. Подготовка к работе Ручной расчёт результатов работы программы: Разностное уравнение представим в виде: 1) Реализуемый коэффициент масштабирования kMP (число без знака) при 8-разрядном формате беззнаковых коэффициентов: kM=0,381679389(10); kMP = ,01100001(2) = 61(16) = 0,37890625 (10) 2) Реализуемые коэффициенты разностного уравнения (числа без знака) при 8-разрядном форматё беззнаковых коэффициентов: k=0,81(10) ; kP = ,11001111(2) = CF(16) = 0,80859375(10) 3) Код для положительного входного отсчета максимальной амплитуды (немасштабированный отсчет): xn = 0,1111111(2) = 7F(16) 4) Масштабированный входной положительный отсчёт максимальной амплитуды: xn := kMP xn = ,01100001(2). 0,1111111(2) = 61(16). 7F(16) = 30(16) = 0,0110000 (2) = +0,375(10) 5) Зададим состояние памяти после запоминания масштабированных входных отсчётов максимальной амплитуды и отрицательных выходных отсчётов максимальной амплитуды:
6) Получим произведениеp1n : p1n = kP xn = CF(16) 30(16) = ,11001111(2). 0,011000 (2) = 26(16) = 0,0100110(2) = + 0,296875(10) 7) Получим модуль произведения отрицательного отсчёта yn-2 на коэффициент kP : |p2n| = kP |yn-2| = CF(16) 30(16) = ,11001111(2). 0,011000 (2) = 26(16) = 0,0100110(2) = 0,296875(10) 8) Вычислим выходной отсчёт: yn = p1n + xn-2 - (- |p2n|) = 26(16) + 30(16) + 26(16) = 7C(16) = 0,1111100 (2) = +0,96875(10). Выполним все те же действия для отрицательного входного отсчета максимальной амплитуды. Разностное уравнение представим в виде: 1) Реализуемый коэффициент масштабирования kMP (число без знака) при 8-разрядном формате беззнаковых коэффициентов: kM=0,381679389(10); kMP = ,01100001(2) = 61(16) = 0,37890625 (10) 2) Реализуемые коэффициенты разностного уравнения (числа без знака) при 8-разрядном форматёбеззнаковых коэффициентов: k=0,81(10) ; kP = ,11001111(2) = CF(16) = 0,80859375(10) 3) Код для отрицательного входного отсчета максимальной амплитуды (немасштабированный отсчет): xn = 1,0000001(2) = 81(16) 4) Масштабированный входной положительный отсчёт максимальной амплитуды: |xn| := kMP|xn| = ,01100001(2). 0,1111111(2) = 61(16). 7F(16) = 30(16) = 0,0110000 (2) = +0,375(10) xn := D0(16) = 1, 1010000(2) = -0,375(10) 5) Зададим состояние памяти после запоминания масштабированных выходных отсчётов максимальной амплитуды и отрицательных входных отсчётов максимальной амплитуды
6) Получим модуль произведения отрицательного отсчёта yn-2 на коэффициент kP : |p1n| = kP|xn| = CF(16) 30(16) = ,11001111(2). 0,011000 (2) = 26(16) = 0,0100110(2) = 0,296875(10) 7) Получим произведениеp1n : p1n = kPyn-2 = CF(16) 30(16) = ,11001111(2). 0,011000 (2) = 26(16) = 0,0100110(2) = + 0,296875(10) 8) Вычислим выходной отсчёт: yn = -p2n +xn-2- (- |p1n|) = DA(16) + D0(16) - 26(16) = 84(16) = 1,0000100 (2) = -0,96875(10) Если расчётные значения и соответствующие им значения, вычисляемые программой, идентичны – программа работает правильно (без переполнения и логических ошибок). По сигналу RST=1 выполняются следующие действия: 1) программный счетчик и все управляющие регистры МК, кроме PCON, IE, IP–устанавливаются в нулевое состояние; 2) в управляющих регистрах PCON, IE, IP–резервные биты принимают случайные значения, все остальные сбрасываются в 0; 3) в указателе стека устанавливается адрес SP=70 (вершина стека); 4) запрещаются прерывания от всех источников, запрещается работа таймеров/счетчиков, запрещается работа последовательного порта; 5) выбирается банк 0 POH(текущий банк регистров); 6) порты Р0, Р1, Р2, Р3 настраиваются на ввод для приема данных; 7) в обоих регистрах SBUF последовательного порта устанавливаются случайные значения. Выполнение работы Распределение памяти: Далее приведем алгоритм: Текст программы FZ.asm Листинг программы: 1. Открыть папку МП Лаб работы. Запустить программный отладчик EMU51.exe. Загрузить файл программы, подлежащий отладке: FZ.tsk. Объяснить исходное состояние МП-системы, соответствующее аппаратному сбросу по входу RST МК, по всем сегментам памяти: RSEG &SFR, DSEG, XSEG, CSEG, BSEG. Определить объём памяти (CSEG), занимаемый программой FZ.asm. Представим на рисунках все занятые ячейки в области CSEG: В данном случае занято 9 ячеек. Далее представлены рисунки с занятыми ячейками модулей 00A0h, 00D0h и 0010h. На левом рисунке занято 55 ячеек На правом рисунке занято 82 ячейки Всего занято 146 ячеек. 2. Выполнить в пошаговом режиме программный модуль инициализации. Объяснить содержание использованного способа останова программы после выполнение инициализации системы. 3. Проверить выполнение всех настроек, предусмотренных инициализацией МП-системы (период переполнения Т/С0, пуск Т/С0, разрешение прерываний от Т/С0 и INT0, порт PA РУ55 – ввод, порт PB РУ55 – вывод). Значение 83h в регистре IE говорит о разрешении прерываний от T/C0 и INT0. Задание периода переполнения можно проследить в регистре RSEG . При этом в TH0 видим значение 9С. Значение 02 в ячейке 7000h (XSEG) говорит о настройке портов. 4. Загружаем в память МП-системы (DSEG) расчётные значения входных и выходных отсчётов xn-1, xn-2, yn-1, yn-2, заданные для определения правильности работы программы. В ячейках 31h и 32h (DSEG) введены значения 30h, а в ячейках 41h и 42h введены значения D0h. Рассчитанные текущие значения масштабированного входного отсчёта, выходного отсчёта и произведений (xn, yn, p1n, p2n) не загружаются. Выделенные для хранения xn, yn, p1n, p2n ячейки памяти загружаются программой в отлаживаемом рабочем цикле. 5. Загружаем в память МП-системы (XSEG) максимальное значение немасштабированного положительного входного отсчёта xn. В ячейке 7001h видим загруженное максимальное значение немасштабированного положительного входного отсчёта xn (7F). 6. Формируем сигнал запроса прерывания от Т/С0 (Alt + t) и выполняем в пошаговом режиме программный модуль формирования импульса пуска АЦП. Убедились, что на линии P1.0 формируется импульс нулевого уровня. 7. Сформировать сигнал запроса прерывания от АЦП по входу INT0 (Alt + i) и выполнить в пошаговом режиме рабочий цикл программы. а) Убеждаемся, что при выполнении программного модуля масштабирования, что вычисленное программой численное значение масштабированного отсчёта xn равно расчётному и запоминается в заданной ячейке памяти. Получили в ячейке 30h (DSEG) значение 30h б) Убеждаемся, что вычисленные программой численные значения произведений p1n, p2n равны расчётным и запоминаются в заданных ячейках. В ячейках 50h и 51h (DSEG) получили значения 26h и DAh. в) Убеждаемся, что вычисленное программой численное значение выходного отсчёта yn равно расчётному и запоминается в заданной ячейке. В ячейке 40h (DSEG) получили значение 7Сh. г) Убеждаемся, что на ЦАП выведен смещённый входной код и выполнен сдвиг отсчётов в памяти для подготовки следующего рабочего цикла. 8. Загружаем в память МП-системы (XSEG) максимальное значение немасштабированного отрицательного входного отсчёта xn. 9. Повторяем выполнение программы с отрицательным входным отсчётом xn. Обращаем внимание на изменение трассы программы и убеждаемся в истинности полученных результатов. Загружаем в память МП-системы (DSEG) расчётные значения входных и выходных отсчётов xn-1, xn-2, yn-1, yn-2, заданные для определения правильности работы программы. В ячейках 31h и 32h (DSEG) введены значения D0h, а в ячейках 41h и 42h введены значения 30h. а) Убеждаемся, что при выполнении программного модуля масштабирования вычисленное программой численное значение масштабированного отсчёта xn равно расчётному и запоминается в заданной ячейке памяти. Получили в ячейке 30h (DSEG) значение D0h. б) Убеждаемся, что вычисленные программой численные значения произведений p1n, p2n равны расчётным и запоминаются в заданных ячейках. В ячейках 50h и 51h (DSEG) получили значения DAh и 26h. в) Убеждаемся, что вычисленное программой численное значение выходного отсчёта yn равно расчётному и запоминается в заданной ячейке. В ячейке 40h (DSEG) получили значение 7Сh. г) Убеждаемся, что на ЦАП выведен смещённый входной код и выполнен сдвиг отсчётов в памяти для подготовки следующего рабочего цикла. 10. Получили длительность программы 95 машинных циклов, что соответствует 95 мкс. Всё данные, полученные расчётным путем, совпали с теми, что были получены в ходе выполнения программы. Данный факт говорит о правильности ручного расчёта. По результатам выполненной работы можно сделать следующие выводы: Вычисленное программой численное значение масштабированного отсчёта xn равно расчётному и запоминается в заданной ячейке памяти. Вычисленное программой численные значения произведений p1n, p2n равны расчётным и запоминаются в заданных ячейках. Вычисленное программой численное значение выходного отсчёта yn равно расчётному и запоминается в заданной ячейке. На ЦАП выведен смещенный входной код Выполнен сдвиг отсчётов в памяти для подготовки следующего рабочего цикла. Также в ходе работы были выполнены все цели, поставленные перед началом работы. |