Методические указания для практических занятий по дисциплине мдк. 02. 01
Скачать 7.37 Mb.
|
Варианты решения для двух источников данных При реализации схемы подключения на мультиплексоре «2-в-1» для управления передачей данных необходим только один управляющий сигнал. Им может быть выходной битовый сигнал с одного из разрядов порта Р4 (рис. 29.3). Подключение мультиплексора D1 к внешней шине выполняется через трёхстабильный буферный элемент OBUFEс активным «высоким» состоянием разрешающего сигнала. Разрешающий сигнал формируется на выходе элемента D2 при совпадении сигнала чтения MKRD и того или иного адресного сигнала. Рис. 29.3. Вариант подключения двух источников через мультиплексор (управление от порта Р4) При организации внутренней шины с использованием Tri States – элементов с трёхстабильными выходами – достаточно использовать либо два элемента BUFE с «активным» высоким состоянием управляющего сигнала и один инвертор, либо один элемент BUFE и один элемент BUFT с «активным» низким состоянием управляющего сигнала (рис. 29.4). Рис. 29.4. Вариант подключения двух источников через буферные элементы (управление от порта Р4) Если все разряды порта Р4 заняты, то источник управляющего сигнала может быть задан только при обмене по системной шине. При малом количестве адресов для обмена данными по 155 шине приходится использовать решения, подобные тем, что применены в некоторых интерфейсных БИС, где для настройки БИС приходилось использовать строгую последовательность подачи определённых кодов с определёнными значениями в отдельных двоичных разрядах. В схеме на рис. 29.5 используется дополнительный регистр адреса (для двух источников – один триггер). Перед чтением данных в этот триггер (D1) необходимо записать «1» или «0». Для выдачи данных с выбранного источника можно использовать команду чтения по тому же или другому адресу. Схема подключения с использованием буферных элементов приведена на рис. 29.6. Рис. 29.5. Вариант подключения двух источников через мультиплексор Рис. 29.6. Вариант подключения двух источников через буферные элементы Варианты решения для четырёх источников данных На рис. 29.7 показана одна из возможных схем подключения к шине нескольких внешних устройств – источников данных. В схеме используется дополнительный регистр адреса (RGADDR), код в который записывается микроконтроллером при обращении по адресу 7FFAh. В схеме в регистр записывается унитарный 4 разрядный код. При обращении МК по второму адресу (7FFВh) происходит запись данных с шины в один из четырёх регистров (внешних устройств – приёмников данных). В зависимости от кода в регистре адреса подаётся разрешающий сигнал на один из четырёхбуферных элементов с «третьим» состоянием выхода. Для упрощения на схеме показано подключение к шине только одного (0-го) разряда источников данных. При использовании унитарного кода к шине может быть подключено до восьми 8 разрядных источников данных и до восьми 8 разрядных приемников данных. При использовании мультиплексора «4-в-1» для управления им требуются два сигнала: S0, S1. Поэтому в качестве регистра адреса используются два триггера (D1 иD2), и адрес источника представляется в виде двоичного кода (рис. 29.8). При наличии двух свободных разрядов порта Р4, которые можно использовать для управления выбором канала мультиплексора, схема подключения имеет вид, представленный на рис. 29.9. 156 Рис. 29.7. Схема подключения к шине нескольких внешних устройств – источников данных (унитарное кодирование адреса) Рис. 29.8. Вариант подключения четырёх источников через мультиплексор (управление от регистра адреса) Рис. 29.9. Вариант подключения четырёх источников через мультиплексор (управление от порта Р4) Для схемы с использованием буферных элементов потребуется дешифратор (D3) для преобразования двоичного кода в унитарный (рис. 29.15). 157 Рис. 29.10. Вариант подключения четырёх источников через буферные элементы (управление от порта Р4) Варианты решения для четырёх приёмников данных На рис. 29.11 и 29.12 показаны возможные схемы подключения к шине четырёх внешних устройств – приёмников данных. Для упрощения на рисунках показана 4 разрядная шина. В схемах используется дополнительный регистр адреса (RGADDR), код в который записывается микроконтроллером при обращении, например, по адресу 7FFAh. В первой схеме в регистр записывается унитарный 4-разрядный код. При обращении МК по второму адресу (7FFВh) происходит запись данных с шины в один из четырёх регистров (внешних устройств – приёмников данных). Рис. 29.11. Схема подключения к шине нескольких внешних устройств – приёмников данных (унитарное кодирование адреса) В регистр адреса может быть записан и чисто двоичный код. К выходу регистра в таком случае подключается дешифратор. Использование дешифратора позволяет в предельном случае подключать к шине до 256-ти внешних устройств. 158 Рис. 29.12. Схема подключения к шине нескольких внешних устройств – приёмников данных (двоичное кодирование адреса) Подключение внешних устройств к порту р4 На ПЛИС располагаются также внешние устройства, подключаемые к МК через порт Р4. Если восьми разрядов одного порта оказывается недостаточно, то можно использовать следующие решения. Например, если МК требуется проанализировать состояния четырёх битовых сигналов, а свободно только три разряда порта, то при использовании мультиплексора сначала нужно задать код источника сигнала на адресных входах мультиплексора, а затем опросить выход мультиплексора (рис. 29.13). Свободные четыре разряда порта Р4 позволяют подключить к МК до восьми битовых сигналов. На адресные входы мультиплексора можно подавать код и с регистра адреса. В этом случае достаточно одного разряда порта Р4. На рис. 29.14 для примера показана схема, которая позволяет при трёх свободных разрядах порта вести битовый сигнал в одну их четырёх точек схемы на ПЛИС. Рис. 29.13. Схема подключения к порту Р4 нескольких битовых сигналов Рис. 29.14. Схема ввода в порт Р4 нескольких битовых сигналов 159 Практическая работа №30. Тестирование и отладка микропроцессорных систем (АЛУ). Цель: изучение последовательности и способов отладки микропроцессорной системы для тестирования АЛУ. Теоретическая часть. Тестирование АЛУ выполняется в двух режимах: - одиночном при каждом сигнале «Готовность»; - непрерывном. И в том, и в другом режиме можно было бы запустить программу и увидеть конечный результат. Но это почти никогда не получается из-за допущенных ошибок (или не работает программа, или АЛУ выдаёт не тот результат). Ошибки могут возникнуть при проектировании АЛУ (их можно было не заметить ранее из-за тестирования на малом наборе операндов). При их обнаружении придётся исправлять схему АЛУ или её описание на языке VHDL. Для схемного варианта АЛУ можно вывести на индикацию состояние каких-то регистров. Но выполнить проверку работы АЛУ по тактам невозможно. Ошибки могут быть допущены в программе работы МК, как синтаксические, так и связанные с неверными вычислениями и с неверным формированием сигналов, выдаваемых на внешние устройства. Программные ошибки, прежде всего, нужно искать с использованием программного симулятор dScope, который для этого и предназначен. При этом обнаруживаются синтаксические ошибки, можно наблюдать состояние внутренних регистров МК, но невозможно видеть, что и в какие внешние устройства отправлено и невозможно работать с реальными данными с внешних устройств. Возможны и схемные ошибки, например такие: - неправильно составлена схема подключения АЛУ и регистров УЛС к системной шине; - перепутаны разряды шины; - перепутаны разряды операндов А и В; - не с тех разрядов регистра результата взят результат для передачи в МК. За ошибку иногда принимаются случаи несовпадения результата операции над дробными числами с результатом, вычисленным при помощи другой программы (сказываются погрешности округлений), а также неправильная интерпретация результатов тестирования, когда студенты забывают о том, с какими числами (дробными или целыми) работает АЛУ. Иногда ошибочная работа системы МПС–АЛУ вызывается неправильным формированием в программе управляющих сигналов – заданием перепадов уровней (0/1 или 1/0) вместо задания импульса (0/1/0 или 1/0/1). Для выявления этих ошибок и определения места неисправности нужно убедиться, что: - операнды выданы в буферные регистры на входе АЛУ верно; - операнды записались в регистры АЛУ правильно; - результат получается в регистре результата в нужных разрядах; - выполняется именно та операция, которая задана на пульте УЛС; - выполняется программа обработки прерываний. Это невозможно проверить с помощью программы dScope. Единственным выходом является отладка МПС на стенде с использованием управляющей программы MCS51. Можно использовать следующие режимы выполнения программы: «Основной» и «Останов в КТ» (КТ – контрольная точка). Режим «Основной» используется в тех случаях, когда необходимо наблюдать только конечный результат работы программы на индикаторах стенда. Отладка МПС, реализующей программу тестирования АЛУ в ПЛИС, должна выполняться в режиме «Останов в КТ», где можно видеть пошаговое исполнение программы (останов в заданной КТ), наблюдать изменение состояния регистров, аккумулятора, а самое главное отслеживать запись операндов и результата по конкретному адресу. Содержимое внутренней, внешней памяти, а также регистров выводится в соответствующие окна. 160 Для работы в режиме «Останов в КТ» пользовательская программа должна быть определенным образом подготовлена. - Необходимо перед каждой командой, которую пользователь хочет отметить как точку контроля, установить пустую команду (NOP). (Естественно, что это ведёт к увеличению объёма программы и изменению времени её работы.) - В теле программы нужно добавить команды, разрешающие прерывание от внешнего источника (Int 0) и устанавливающие для этого запроса высший приоритет, с помощью вставки в программу следующего кода: mov ie, #81h mov ip, #01h setb it0 - Для доступа к данному режиму необходимо установить не менее двух контрольных точек. - Для удобства работы следует отметить контрольные точки на блок-схеме алгоритма. Отметим одну особенность системы отладки. Она использует таймер Т1 МК, и настройки этого таймера нельзя менять при работе с отладчиком в режиме КТ. В программе МК можно использовать лишь таймер Т0. Как только запускается монитор отладки, он настраивает режим работы таймера Т1 с помощью регистра управления TMOD. Изменить состояния этого регистра путём загрузки в него только значений разрядов, относящихся к таймеру Т0, нельзя. Нужно считать код регистра TMOD в аккумулятор А, логически сложить с требуемым кодом режима таймера Т0, потом отправить содержимое аккумулятора А в регистр. Далее необходимо выполнить загрузку программы в УЛС (Load) и установить КТ, дважды кликнув левой кнопкой мыши на строке в окне «Program Window». Появление в выделенной строке символов «BP» можно наблюдать на рис. 30.1. Следует помнить, что точкой останова программы является именно комбинация вставленной команды NOP и установленной КТ. Одна команда NOP не может быть контрольной точкой. В данном режиме доступны следующие функции отладки: - загрузка пользовательской программы (Load); - запуск программы, в режиме «Останов в КТ» (Go To BP); - переход к следующей КТ (Next BP). Запуск программы осуществляется нажатием кнопки «Go To BP». Выполнение программы прерывается после выполнения команды, помеченной как точка контроля. Эта команда выделяется в программном окне (рис. 30.2). После этого пользователю становятся доступны все функции работы с внутренней и внешней памятью данных, а также с памятью регистров. Как видно из рис. 30.2, после останова в КТ появляется кнопка Next BP. После нажатия данной кнопки выполнение пользовательской программы будет продолжено до очередной КТ. Содержимое памяти регистров обновляется в каждой КТ. 161 Рис. 30.1. Программное окно с установленными КТ Использование индикаторов стенда при отладке программы и собственно тестировании АЛУ необязательно, однако их подключение в том или ином виде позволяет убедиться, что операнды выданы в буферные регистры на входе АЛУ верно, операнды переписаны в регистры АЛУ правильно, результат получается в регистре результата в нужных разрядах. При тестировании схемного АЛУ индикаторы можно подключать и к внутренним регистрам блока операций или устройства управления. 162 Рис. 30.2. Программное окно при останове в КТ, вызвавшей прерывание Можно программу разбить на отдельные участки с номерами 1, 2,… и при входе в каждый участок выводить на индикацию (либо светодиод, либо 7-сегментгный индикатор, либо ЖКИ) номер участка. Отлаживать программу не совсем просто из-за того, что постоянно изменяются комбинации операндов. Поэтому можно кроме основной программы создать еще несколько тестовых. Это могут быть программы: - выполнения операций над выбранной парой операндов несколько раз; - повторения какого-то участка основной программы; - реализации некоторого упрощенного алгоритма; - циклического выполнения некоторой программы; - выполнения иных программ (вывод на индикаторы или ЖКИ). Можно загружать каждую программу в память МПС по очереди, но это только удлиняет процесс тестирования. Лучше сразу все тестовые программы учесть в одной программе, в которой ввести команды анализа режима работы (тестирования). Приведём возможные способы задания нескольких режимов работы системы и её отладки: - задание режимов на регистре УЛС с вводом кода режима через порт Р4; - задание режимов на регистре УЛС с вводом кода режима через системную шину; - иной способ. Ввод через Р4 маловероятен из-за малого количества разрядов, ввод через системную шину приводит к усложнению схемы подключения к системной шине. Рассмотрим вариант с использованием клавиатуры. Она уже подключена к системной шине, нажатие одной из цифр вызывает прерывание, после чего обработчик прерывания считывает и распознаёт скан-код нажатой кнопки. При использовании клавиатуры могут быть различные способы решения. Один из них может быть таким. 163 Используем какой-либо флаг, например F0, для определения порядка работы программы. Исходное состояние этого флага или состояние после набора какого-то символа, например, «0»: F0=0. Если при чтении иного скан-кода обработчик обнаруживает, что F0=0, то происходит переход на участок программы ввода параметра, необходимого для выполнения основной программы (кода времени или начального значения операнда). После нажатия символа «F» флаг F0 устанавливается равным «1». В таком случае при чтении иного скан-кода обработчик переходит на участки программы, соответствующие различным тестам в зависимости от введенного символа. Заметим, что коды «0» и «F» вряд ли понадобятся при задании кода времени или начального значения операнда В. Такое решение использования прерывания от клавиатуры для выбора режима тестирования представляет собой подобие разделяемого прерывания (shared interrupts). Практическая часть. Рассмотрим пример программы обработки прерывания от клавиатуры при допущениях. В спроектированной МПС дополнительными внешними устройствами-приемниками информации, подключёнными к системной шине, являются: - регистры операндов А и В (для записи в них отведён адрес 7FFAh); - регистр адреса внешних устройств – приёмников информации (для записи в него отведён адрес 7FFBh). К шине внутри ПЛИС подключено четыре источника: - регистр результата – код в регистре адреса 00h; - регистры признаков – 01h; - ПЗУ знакогенератора – 02h; - регистр УЛС для задания операнда – 03h. Для чтения с шины внутри ПЛИС выделен адрес 7FFBh. Для формирования сигнала SNOIN используется разряд порта Р4.7, для сброса – Р4.4. При инициализации МК флаг F0 устанавливается в «0». При выполнении основной программы тестирования АЛУ клавиатура используется для ввода величины Т (период мигания индикаторов) в регистр R7. Для запуска тестовых программ используется нажатие следующих цифр на клавиатуре: «1» – программа ввода операнда А с регистра УЛС в регистр R3; «2» – программа ввода операнда В с регистра УЛС в регистр R4; «3» – программа отображения кода в А на четырёх 7 сегментных индикаторах (ввод слева) при реализации знакогенератора во внутренней памяти; «4» – умножение операнда в R3 на операнд в R4 (отображение операндов и результата на подключённых шкалах индикаторов). Текст программы обработки прерывания от клавиатуры ORG8013h;обработчик прерыванияINT1 MOVDPTR,#7FFFh MOVA,#40h MOVX@DPTR,A; разрешение чтения FIFO клавиатуры JBF0,LAB1 ; проверка режима работы клавиатуры MOVDPTR, #7FFEh; клавиатура - для ввода Т MOVXA,@DPTR; чтение скан-кода CJNEA, #00h,KK1; проверка на «0» LJMP EXIT KK1: CJNE A, #01h, KK2; проверка на «1» MOVR7,#01h; вывод вR7 кода «1» LJMP EXIT KK2: CJNE A, #02h, KK3; проверка на «2» MOVR7,#02h; вывод вR7 кода «2» LJMP EXIT 164 KK3: CJNE A, #03h, KK4; проверка на «3» MOVR7,#03h; вывод вR7 кода «3» LJMP EXIT KK4: CJNE A, #04h, KK5 ; проверка на «4» MOVR7,#04h; вывод вR7 кода «4» LJMP EXIT KK5: CJNE A, #05h, KK6; проверка на «5» MOVR7,#05h; вывод вR7 кода «5» LJMP EXIT KK6: CJNE A, #06h, KK7; проверка на «6» MOVR7,#06h; вывод вR7 кода «6» LJMP EXIT KK7: CJNE A, #07h, KK8; проверка на «7» MOVR7,#07h; вывод вR7 кода «7» LJMP EXIT KK8: CJNE A, #08h, KK9 ; проверка на «8» MOVR7,#08h; вывод вR7 кода «8» LJMP EXIT KK9: CJNE A, #09h, KKA ; проверка на «9» MOVR7,#09h; вывод вR7 кода «9» LJMPEXIT KKA:CJNEA, #0Ah,KKB; проверка на «A» MOVR7,#0Ah; вывод вR7 кода «A» LJMP EXIT KKB: CJNE A, #0Bh, KKC ; проверка на «B» MOVR7,#0Dh; вывод вR7 кода «B» KKC: CJNE A, #0Ch, KKD ; проверка на «C» MOVR7,#0Ch; вывод вR7 кода «C» LJMP EXIT KKD: CJNE A, #0Dh, KKE ; проверка на «D» MOVR7,#0Dh; вывод вR7 кода «D» LJMP EXIT KKE: CJNE A, #0Eh, KKF ; проверка на «E» MOVR7,#0Eh; вывод вR7 кода «E» LJMP EXIT KKF: CJNE A, #0Fh, EXIT ; проверка на «F» SETBF0 ; установка признака задания тестаF0=1 LJMP EXIT ; Установлен режим задания теста LAB1:CJNEA, #00h,KKK1 ; проверка на «0» CLRF0 ;установка режима ввода теста LJMPEXIT KKK1:CJNEA, #01h,KKK2 ; проверка на «1» LJMPPART1 KKK2:CJNEA, #02h,KKK3 ; проверка на «2» LJMPPART2 KKK3:CJNEA, #03h,KKK4 ; проверка на «3» LJMPPART3 KKK4:CJNEA, #04,EXIT; проверка на «4» ;Реализация программы 4 MOV A, R3 SWAPA ORLA,R4 ; АСС = А В 165 MOV DPTR, #7FFAh ; адрес записи в Р1 и Р2 MOVX @DPTR, A ; выдача операндов SETB 0c0h.7 ; выдача SNOIN CLR 0c0h.7 NOP ; задержка NOP SETB 0c0h.4 ; сброс схемы SNO CLR0c0h.4 LJMPEXIT ; Реализация программы 1 PART1: MOV DPTR, #7FFBh ; адрес записи в регистр адреса MOVA, #03h; адрес регистра УЛС MOVX @DPTR, A ; запись адреса в регистр адреса MOVX А, @DPTR ; чтение операнда А MOVR3,A LJMPEXIT ; Реализация программы 2 PART2: MOV DPTR, #7FFBh ; адрес записи в регистр адреса MOVA, #03h; адрес регистра УЛС MOVX @DPTR, A ; запись адреса в регистр адреса MOVX А, @DPTR ; чтение операнда B MOVR4,A LJMPEXIT ; Реализация программы 3 PART3:MOVR7,A ;сохранение значения А MOV DPTR,#7FFFh MOV A,#01h MOVX@DPTR,A ;ввод символов слева MOVDPTR,#7FFFh MOVA,#90h ;автоинкрементирование адреса MOVX @DPTR,A MOV 70h, #0F3h MOV 71h, #60h MOV 72h, #0B5h MOV 73h, #0F4h MOV 74h, #66h MOV 75h, #0D6h MOV 76h, #0D7h MOV 77h, #70h MOV 78h, #0F7h ;запись в память кодов символов MOV 79h, #0F6h MOV 7Ah, #77h MOV 7Bh, #0C7h MOV 7Ch, #93h MOV 7Dh, #0E5h MOV 7Eh, #097h MOV 7Fh, #17h MOV DPTR,#7FFEh MOV A,#00h MOVX @DPTR,A MOVX @DPTR,A ;гашение индикаторов MOVX@DPTR,A MOVX@DPTR,A 166 MOVA,R7 ;возврат А ;Вывод А в крайнюю левую ячейку дисплея CallVivod ;Вывод А во вторую слева ячейку CallVivod CallVivod ;Вывод А в две правые ячейки Call Vivod Vivod: MOV DPTR,#7FFEh ADD A, #70h MOV R0, A MOVA, @R0 MOVX @DPTR, A ;вывод цифры на индикацию RET EXIT:RETI END |