АЛМАТИНСКИЙ ИНСТИТУТ ЭНЕРГЕТИКИ И СВЯЗИ

 

Кафедра электроники и компьютерных технологий

 

 

 

МИКРОПРОЦЕССОРЫ И МИКРОПРЦЕССОРНЫЕ

СИСТЕМЫ

Методические указания к выполнению лабораторных работ для студентов всех форм обучения специальностей:

350140 – Электронные системы и технологии

050719 – Радиотехника, электроника и телекоммуникации

 ( бакалавриат)

 

 

 

 

 

 

 

 

 

 

 

 

Алматы 2005

 

 

 

 

 

 

СОСТАВИТЕЛИ: С.Н.Петрищенко, Г.Д.Мусапирова. Микропроцессоры и микропроцессорные системы. Методические указания к выполнению лабораторных работ (для студентов всех форм обучения специальностей 350140 - Электронные системы и технологии и 050719 – Радиотехника, электроника и телекоммуникации).- Алматы: АИЭС, 2005.- 42 с.

 

 

В методической разработке приводится описание четырех лабораторных работ, посвященных исследованию работы высокопроизводительного 16 – разрядного микроконтроллера серии MCS-196 фирмы Intel, предназначенного для решения задач встроенного управления оборудованием. Описание содержит общие сведения, характеризующие суть рассматриваемых вопросов,  порядок их выполнения, фрагменты и примеры программ и порядок содержания отчетов о выполненной работе.

 Методическая разработка предназначена для студентов специальностей  «Электронные системы и технологии» и «Радиотехника, электроника и телекоммуникации»  (бакалавриат).

 

1 Лабораторная работа № 1

 

Изучение программно-аппаратного комплекса «Микропроцессорные системы и средства»

 

Цель работы:

- изучение функциональных возможностей программно-аппаратного комплекса "Микропроцессорные системы и средства";

- приобретение навыков в подготовке программ с использованием интегрированной среды;

- изучение порядка программирования и принципов работы микроконтроллера на примере изучения его методов адресации.

 

1.1 Общие сведения

Интегрированная, программно-аппаратная среда предназначена для создания и отладки программного обеспечения для микроконтроллера i80196KC фирмы Intel. Она включает в себя модули:

-  встроенный редактор;

- средства для трансляции программ и создания исполняемых файлов;

- средства отладки;

- виртуальный осциллограф;

- справочную подсистему.

Система меню состоит из следующих стандартных пунктов:

- файл – работа с открытием, закрытием и печатью файлов;

- правка – работа с редактированием ассемблерных файлов;

- окно – упорядочивание окон;

- справка – вызов справки.

Специальные пункты меню:

- вид – открытие окон отладчика, работа с панелями инструментов и статусной строкой;

- компиляция – работа с компилятором;

- платформа – работа с отладочной платформой.

Рассмотрим  подробно назначение специальных пунктов меню.

Меню Вид содержит следующие опции:

- регистры SFR  – открытие/закрытие окна SFR;

- регистровый файл (РФ) – открытие/закрытие окна РФ;

- память    открытие окна памяти;

- дисассемблер    открытие/закрытие окна дисассемблера;

- осциллограф    открытие/закрытие окна осциллографа;

- панель инструментов – показать/скрыть панель инструментов;

- панель отладки – показать/скрыть рабочую панель отладки;

- статусная строка – показать/скрыть статусную строку;

- обновить – обновить значение данных во всех окнах;

Меню Компиляция содержит следующие опции:

- компиляция    компиляция и компоновка ассемблерного файла;               

- загрузка– загрузка HEX файла в отладочную плату;

- настройка компилятора – вызов диалогового окна настройки.


Настройки компилятора можно менять только с разрешения преподавателя!

Меню Платформа содержит следующие опции:

- сброс – сброс платформы и перезапуск программы монитора;

- стоп–остановка работы программы в режиме запуска или отладки;

- старт – запуск программы на выполнение;

- старт отладки - запуск программы в режиме отладки;

- выполнить инструкцию – выполнить 1 инструкцию программы в режиме отладки;

- состояние платформы - выводит диалоговое окно состояния платформы.

Интегрированная оболочка имеет статусную строку и две панели:

-  панель инструментов;

-  панель отладки.

Панели управления дублируют работу основных опций меню, которые наиболее часто используются. Статусная строка отражает состояние работы системы и дает подсказки пользователю о функциональном назначении опции меню и кнопок.

Данные опции меню дублируются контекстным меню основного окна приложения. Для вызова контекстного меню необходимо подвести к рамке основного окна программы мышь и нажать на правую клавишу.

Интегрированная оболочка имеет 6 рабочих окон:

а) окно редактирования ассемблерных файлов позволяет пользователям производить редактирования ассемблерных файлов стандартными способами работы Windows.

После редактирования готовый ассемблерный файл может быть откомпилирован при помощи меню Компилятор/Компиляция. Результаты работы компилятора выводятся в виде трех файлов:

1) файла отчета о компиляции - отражает информацию о трансляции и грубые ошибки, которые возникли в ее ходе;

2) листинга, то есть текста программы в форме компилятора с указанием ошибок;

3) файла карты памяти - файла результатов компоновки программы с отражением информации о распределении памяти под данные и программу.

Если компиляция прошла без ошибок, то формируется файл с кодом в формате HEX, который можно загрузить в память микроконтроллера, используя опцию  Компилятор/Загрузка HEX файла;

б) окно регистров SFR отображает значения регистров SFR, а также регистров PC, SP и PSW.

Программа монитор хранит значения этих регистров в своем внутреннем буфере. Когда дается команда на выполнение программы пользователя, значения из буфера загружаются в регистры SFR. После окончания работы программы пользователя значения регистров SFR опять сохраняются в буфере.

Чтобы изменить значение регистров необходимо вызвать контекстное меню нажатием правой кнопки мыши на окне регистров SFR. Контекстное меню имеет три пункта:

-  новое значение SFR регистра;

-  новое значение PSW;

-  новое значение специальных регистров (PC, SP).

Новое значение, вводимое в один из регистров SFR, должно лежать в диапазоне от 0 до 0FFh.

Значение PSW изменяется установкой  флагов в окне «PSW».

Диапазон вводимых значений в специальные регистры составляет от 0 до 0FFFh;

в) окно регистрового файла ( RF) отображает значения регистров общего назначения с адресами от 1Ah до 1FFh. Данные регистры находятся во внутренней памяти микроконтроллера.

Информация о регистрах отображается в виде шестнадцатеричного кода и в виде ASCII текста. Данные упорядочены в строки по 16 байт в каждой. Слева указан адрес начала строки в шестнадцатеричном представлении.

Чтобы изменить значение регистров необходимо вызвать контекстное меню нажатием правой кнопки мыши на окне регистров общего назначения. Контекстное меню имеет один пункт – новое значение регистров. При нажатии на него вызывается диалоговое окно изменения регистров.

В окне «Адрес регистра» вводится адрес от 20h до 1FFh. В окне «Значение регистра» вводится значение регистра от 0h до 0FFh;

г) окно памяти - это ячейки памяти с адресами от 0h до 0FFFFh.

Информация о ячейках отображается в виде шестнадцатеричного кода и в виде ASCII текста. Данные упорядочены в строки по 16 байт в каждой. Слева указан адрес начала строки в шестнадцатеричном представлении.

В окне одновременно отображается 512 байт памяти (32 строки).

При открытии окна по умолчанию отображается память, начиная с адреса 8000h.

Для просмотра других ячеек памяти можно использовать кнопки Up,Down, PgUp, PgDn или прокрутку при помощи мыши.

По нажатию правой кнопки мыши на окне памяти открывается контекстное меню, которое содержит два пункта:

-  новый адрес;

-  изменить значение.

В окне «Новое адрес» вводится новое значение от 0 до FE00h. После нажатия кнопки «ОК» производится отображения памяти, начиная с введенного адреса. Если ввести значение FE00h, отобразится блок памяти с адресами от FE00h до FFFFh.

В окне «Изменить данные» вводится адрес ячейки памяти от 0 до FFFFh и новое значение ячейки памяти от 0 до FFh. После нажатия кнопки «OK» значение заносится в память микроконтроллера и отражается в окне памяти;

д) окно дисассемблера - предназначено для отображения памяти в виде дисассемблированного кода и используется в процессе отладки программ. Пользователь может получить отображение кода с адресами от 0h до FFFFh.

При открытии производится отображение и дисассемблирование, начиная с адреса старта. По умолчанию адрес старта 8100h. В случае загрузки HEX файла в память устанавливается минимальный адрес загруженного блока данных.

Адрес старта программы помечается красным кружком в левой части окна.

Для отладки программного обеспечения пользователю предоставлен широкий спектр программно-аппаратных решений:

-  выполнение программы на отладочной плате;

-  выполнение программы в режиме отладки на отладочной плате;

- выполнение программы на отладочной плате в пошаговом режиме.

Для выполнения программы на отладочной плате необходимо загрузить программу в виде HEX файла в память отладочной платы и  использовать пункт меню Платформа/Старт для запуска программы.

Программа пользователя прекращает свою работу в случаях:

-  если в конце программы стоит команда возврата из прерывания RET;

-  при использования пункта меню Платформа/Стоп.

После окончания работы программы окно дисассемблера позиционируется на адрес текущей инструкции.

Для выполнения программы в режиме отладки отладочной платы можно установить несколько контрольных точек – точек останова, в которых выполнение программы будет автоматически приостановлено, что позволяет посмотреть состояние регистров и памяти.

Для работы в этом режиме необходимо загрузить программу в виде HEX файла в память отладочной платы и установить точки останова. Это можно сделать тремя способами:

- подвести указатель мыши к команде и произвести сдвоенное нажатие на левую кнопку манипулятора. Повторное двойное нажатие удалит точку останова;

- подвести указатель мыши к команде и вызвать контекстное меню, нажав на правую кнопку. Выбрать в меню опцию Установить/Отменить точку останова. Повторное использование этой опции на той же команде удалит точку останова;

- использовать диалоговое окно из основного меню Платформа/Точки останова, описанное выше.

Установленные точки останова отражаются в виде зеленых кружков в левой части окна дисассемблера адреса напротив команды.

Для запуска программы в режиме отладки используется пункт меню Платформа/Старт отладки или кнопка на панели инструментов.

Программа будет выполняться аналогично предыдущему режиму, пока не дойдет до команды, на которой установлена точка останова. После этого, управление будет передано программе-монитору. По срабатыванию точки останова точка отображения программы (красная) в окне дисассемблера будет смещена к точке останова (зеленая).

Для прерывания программы пользователя в режиме отладки можно использовать пункт меню Платформа/Стоп.

При выполнении программы на отладочной плате в пошаговом режиме интегрированная среда сама ставит точки останова на каждую очередную выполняемую инструкцию. Отличие от предыдущего режима отладки состоит в том, что эти точки не отражаются в окне дисассемблера. Пользователь воспринимает работу в этом режиме, как последовательную остановку программы после выполнения каждой инструкции.

Чтобы выполнить очередную инструкцию, надо использовать опцию меню Платформа/Выполнить инструкцию или кнопку на панели.

При некорректном использовании механизма работы отладчика, приводящее к «зависанию» платы, надо использовать опцию меню Платформа/Сброс или кнопку на панели, которые сбрасывают и перезапускают отладочную плату.

Для удобства отладки окно дисассемблера имеет контекстное меню, вызываемое правой кнопкой мыши. Оно имеет три пункта:

-  новый адрес;

-  установить/отменить точку останова;

-  установить стартовый адрес.

 


Дисассемблер воспринимает любой блок данных и интерпретирует его как код, когда логически это может быть не код, а данные!

е) окно осциллографа является дополнительным отладочным средством и предоставляет возможность отражать результаты работы программы пользователя в графической форме.

В окне осциллографа отражена следующая информация:

- оси координат. По горизонтали номера отсчетов, по вертикали значения отсчетов от 0 до 255. Значения, принимаемые по последовательному интерфейсу отладочной платы, интерпретируются как беззнаковые байты;

- значения отсчетов, отложенные в основном поле осциллографа;

- информация о режимах и параметрах работы осциллографа располагается в его правой части.

Для выбора режима и настройки параметров работы осциллографа надо вызвать контекстное меню, нажав правую кнопку мыши  и выбрав  пункт Режим осциллографа. Появляется диалоговое окно, которое позволяет настроить два режима отображения графических отсчетов:

- гистограмма – значения отсчетов представлены в виде прямоугольных столбцов;

- линейная интерполяция – значения отсчетов интерполируются по линейному закону.

Выбор одного из двух режимов производится в поле Вид отображения отсчетов.

В поле Режим обновления данных можно выбрать один или два режима обновления:

- через заданные периоды времени (через интервалы времени от 150мс до 5000мс);

- по мере приема данных в буфер (от 1 до 1024 отсчетов).

Чтобы выбрать режим необходимо установить поле Включить режим и ввести значение из заданного диапазона. Если не выбрать ни одного режима, то перерисовки данных происходить не будет.

Параметр, который можно настраивать - это размер внутреннего буфера осциллографа. Он изменяется в диапазоне от 2 до 1024 отсчетов и устанавливается в поле Размер внутреннего буфера (2..1024).

Установка флага Очистка буфера при перерисовке производит очистку изображения после каждого наполнения буфера.

Все параметры настройки осциллографа сохраняются системой и восстанавливаются после перезапуска программы.

Постоянное запоминающее устройство (ПЗУ) предназначено для хранения программ и данных. Предусмотрена  возможность использования микросхем ПЗУ разного типа объемом до 32 Кбайт.

Оперативное запоминающее устройство (ОЗУ) также можно применять емкостью до 32 Кбайт.

Интерфейс последовательного канала работает с сигналами уровней стандарта RS-232. Микроконтроллер выдает и принимает сигналы последовательного канала в уровнях TTL. Далее стоит драйвер, преобразующий эти сигналы в стандартные уровни RS-232. Схема обеспечивает все скорости обмена RS-232.

Блок индикации служит для отладки работы программы и отображения текущего состояния микроконтроллера. Для этих целей используется информация на восьми выходах порта 1 микропроцессора , которая выводится на соответствующие светодиоды.

Питание на плату подается через разъем на 9 контактов.

Связь с компьютером осуществляется по последовательному каналу также через разъем на 9 контактов.

Для организации связи микроконтроллера с ПЭВМ в ПЗУ прошита программа Монитор, которая позволяет читать и записывать информацию из(в) контроллера, запускать программу пользователя и выполнять ее в пошаговом режиме и с точками останова.

Микроконтроллер 8XC196KC имеет регистровый файл объёмом 488 байт, размещенный по адресам 1Ah-1FFh.

Монитор использует для своей работы 6 байт файлового регистра с младшими адресами (1Ah-1Fh). Использование их программой пользователя может привести к непредсказуемым последствиям.

Монитор инициализирует стек с адреса 200h и помещает в него адрес возврата из программы пользователя (2222h). При выполнении программы пользователя в пошаговом режиме либо с точками останова Монитор использует текущее состояние стека, поэтому, чтобы избежать потери информации, необходимо резервировать под стек на 4 байта больше требуемого.

Для загрузки и выполнения программ пользователя микроконтроллер должен иметь внешнее ОЗУ ( адреса: 8000h-FFFFh).

 Область памяти внешнего ОЗУ с адресами 8060h-809Fh зарезервирована под Монитор для сохранения состояния регистров специального назначения и программы пользователя.

Для того, чтобы пользователь мог использовать систему прерываний, все ее вектора (за исключением TRAP-прерывания, адрес вектора 2010h) вынесены в область внешнего ОЗУ. Вектора прерываний размещаются с такими же смещениями относительно базового адреса (8000h), как и в ПЗУ (базовый адрес 2000h).

Для размещения программ и данных доступно все адресное пространство ОЗУ, за исключением адресов 8000h-809Fh.

Для обращения к операндам внутри адресного пространства микроконтроллер использует шесть основных способов адресации:

- регистровая прямая адресация;

- косвенная адресация;

- косвенная адресация с автоинкрементом;

- непосредственная адресация;

- короткая индексная адресация;

- длинная индексная адресация.

Регистровая прямая адресация непосредственно обращается к регистру из 256-байтового нижнего регистрового файла. Адресуемый регистр определяется 8-битным полем внутри команды. В зависимости от команды при вычислении могут участвовать до трех регистров.

Косвенный способ адресации обращается к операнду, извлекая его адрес из переменной типа СЛОВО в регистровом файле (RF). Обратите внимание, что косвенный адрес может определять операнд в любом месте адресного пространства, включая RF. 8-битное поле внутри команды определяет регистр, который содержит косвенный адрес.

Косвенная адресация с автоинкрементом такой же, как и косвенный способ адресации, за исключением того, что переменная типа СЛОВО, которая содержит косвенный адрес, увеличивается после того, как она используется для адресации операнда. Если команда функционирует с БАЙТОМ или КОРОТКИМ ЦЕЛЫМ ЧИСЛОМ, косвенная переменная адреса увеличивается на 1. Если команда функционирует со СЛОВОМ или ЦЕЛЫМ ЧИСЛОМ, косвенная переменная адреса увеличивается на 2 .

Непосредственный способ адресации использует 8 или 16-битный операнд непосредственно из поля в команде. Команда может содержать только одну непосредственную ссылку; любые дополнительные операнды должны быть указаны через прямую регистровую ссылку.

В короткой индексной адресации адрес одного из операндов вычисляется из двух 8-битных полей. Одно 8-битное поле в команде определяет переменную типа СЛОВА в регистровом файле, которая содержит “базовый” адрес. Второе 8-битное поле в команде определяет “смещение”, которое суммируется с “базовым” адресом для формирования исполнительного адреса операнда. Исполнительный адрес может быть в пределах от -128 и до 127 байтов относительно “базового” адреса.

Длинная индексная адресация похожа на режим Короткой индексной адресации, за исключением того, что поле “смещение” 16-битное.

Адресация через регистр нуля: первые два байта в RF составляют регистр нуля. Эти байты устанавливаются в нуль аппаратными средствами. Кроме обеспечения фиксированного источника постоянной нуля для вычислений и сравнений, может использоваться как “базовая” переменная СЛОВ0 в длинно-индексируемой ссылке. Такая комбинация выбора регистра нуля и способа адресации позволяет непосредственно адресовать любую ячейку в памяти.

Адресация через регистр указателя вершины стека: байты 18H и 19H нижнего RF образуют систему указателя вершины стека SP, который адресуется как 18H. Кроме обеспечения удобного манипулирования указателем вершины стека, SP может также использоваться как переменная СЛОВО в косвенной ссылке для обращения к вершине стека или в коротко-индексируемой ссылке для доступа к данным внутри стека.

 

1.2 Порядок выполнения работы

1.2.1 Открыть новый файл, например, с именем L1.mca и скопировать в него пример программы Lab1.mca.

 1.2.2 После сохранения полученного файла оттранслировать полученную программу и просмотреть созданный листинг.

1.2.3 При отсутствии ошибок создать исполняемый файл.

1.2.4 Активизировать отладчик, выбрав для загрузки в микроконтроллер имя вашего файла с расширением .HEX.

1.2.5  Выполнить несколько команд в пошаговом режиме и с точками останова, обратив внимание на то, как изменяется содержимое дампа памяти, регистров специального назначения и стека, а также регистра флагов.

1.2.6 Попытайтесь изменить некоторые ячейки памяти.

1.2.7 Завершите работу вашей программы, выполнив ее до конца.

1.2.8 Откройте окно отладчика и еще раз выполните вашу программу без использования отладчика. При правильно проделанных вами действиях на микроконтроллере произойдет зажигание светодиодов в определенном порядке, а на экран пользователя будет выводиться определенная последовательность байт.

1.2.9 Открыть новый файл, например, с именем L2.mca.

1.2.10 Скопировать указанные преподавателем фрагменты программы, определяющие начальные условия и действие различных способов адресации, в L2.mca.

1.2.11 Дополнить фрагменты программ командами для ввода исходных данных и составить из этих фрагментов программу.

1.2.12 Сохранить полученный файл.

1.2.13 Оттранслировать  программу и просмотреть созданный листинг.

          1.2.14  При отсутствии ошибок создать исполняемый файл.

          1.2.15 Активизировать отладчик, выбрав для загрузки в микроконтроллер имя вашего файла с расширением .HEX.

1.2.16 Проставить точки останова около каждого фрагмента программы и задать ее выполнение в непрерывном режиме. Проанализировать и проверить действие команд, использующих разные способы адресации. Обратить внимание на то, как изменяется содержимое дампа памяти, регистров специального назначения и стека, а также регистра флагов.

1.2.17 Завершите работу программы, выполнив ее до конца.

1.2.18 Завершите работу интегрированной среды.

       

1.3 Фрагменты программ

.include '8096.inc'     ;Описание идентификаторов специальных регистров

;*********************************************************

;Определить начальные условия :

rseg at (30h)          ;сегмент регистров

Reg_A:        .dsw 1;зарезервировать слово по адресу 30H

Reg_B:        .dsw 1;зарезервировать слово по адресу 32H

Reg_C:        .dsw 1;зарезервировать слово по адресу 34H

ALPHA:      .dsb 1          ;зарезервировать байт по адресу 36H

BETA:         .dsb 1          ;зарезервировать байт по адресу 37H

CL:              .dsb 1 ;зарезервировать байт по адресу 38H

; Проанализировать и проверить действие команд, использующих  регистровую прямую адресацию:

; a) Reg_A=100   Reg_B=200   Reg_C=300  CL=5

ADD Reg_A,Reg_B,Reg_C ; Reg_A <- Reg_B+Reg_C

; b) Reg_A=500

MUL Reg_A,Reg_B   ; Reg_A <- Reg_A * Reg_B

; c) Reg_A=20000

INCB CL     ; CL <- CL + 1 --- CL=6

;Проанализировать и проверить действие команд, использующих косвенную адресацию:

; a) Reg_A=100(100)=20

LD Reg_A,[Reg_A]  ;     Reg_A <- MEM_WORD (Reg_A)

;Reg_A=20 (100)=20

; b) ALPHA=20  BETA=40 Reg_C=60 (60)=100

ADDB ALPHA,BETA,[Reg_C]

;ALPHA <-BETA+MEM_BYTE (Reg_C)

;ALPHA=140 BETA=40 Reg_C=60 (60)=100

; c) SP=190H  [SP]=5 [SP+2]=7 Reg_A=50 (50)=25

POP [Reg_A ] ; MEM_WORD (Reg_A) <- MEM_WORD (SP)

; SP < - SP + 2

;SP=192H  [SP]=7  Reg_A=50 (50)=5

;Проанализировать и проверить действие команд, использующих косвенную адресацию с автоинкрементом:

; a) Reg_A=1 Reg_B=100 (100)=4

LD Reg_A,[Reg_B]+

; Reg_A < - MEM_WORD(Reg_B)

; Reg_B < - Reg_B + 2

; Reg_A=4 Reg_B=102 

; b) ALPHA=1 BETA=2 Reg_C=120 (120)=5

ADDB ALPHA,BETA,[Reg_C]+

;ALPHA< -BETA+MEM_BYTE (Reg_C);      Reg_C <- Reg_C + 1

;ALPHA=7 BETA=2 Reg_C=121 (120)=5

; c) SP=190H [SP]=5 [SP-2]=7 Reg_A=50 (50)=25

PUSH [Reg_A]+

; SP < - SP - 2

;MEM_WORD(SP)<-MEM_WORD(Reg_A)

; Reg_A < - Reg_A + 2

;SP=18EH  [SP]=25  Reg_A=52

;Проанализировать и проверить действие команд, использующих непосредственную адресацию:

; a) Reg_A=100

ADD Reg_A,#340 ;Reg_A<-Reg_A+340( ADD_2op )

;Reg_A=440

; b) SP=200H  [SP]=4444H

PUSH #1234H ; SP <- SP - 2

; MEM_WORD (SP) < - 1234H

;SP=19EH  [SP]=1234H

; c) Reg_A=105

DIVB   Reg_A, 10 ; “LowByte(Reg_A)”<-Reg_A/10

; “HighByte(Reg_A)”<-Reg_A MOD 10

; если адрес Reg_A-30H, то (30H)=10  (31H)=5

;Проанализировать и проверить действие команд, использующих короткую индексную адресацию:

; a) Reg_A=10  Reg_B=100  (112)=23

LD  Reg_A,12[Reg_B] ; Reg_A < - MEM_WORD(Reg_B+12)

;Reg_A=23

; b) Reg_C=50   (53)=40   BETA=2

MULB  Reg_A,BETA,3[Reg_C]

;Reg_A<-BETA*MEM_BYTE(Reg_C+3);        Reg_A=80

;Проанализировать и проверить действие команд, использующих длинную индексную адресацию:

; a) Reg_C=100 TABLE=300 (400)=0AAH         Reg_B=55H     ;Reg_A=0FFH

AND Reg_A,Reg_B,TABLE[Reg_C]; Reg_A < - Reg_B AND           ;MЕM_WORD(TABLE+Reg_C)                          Reg_A=00H

; b) Reg_A=30 Reg_B=9000H  TABLE=50H  (9050H)=77

ST  Reg_A, TABLE[Reg_B]

          ;MEM_WORD(TABLE+Reg_B)<- Reg_A           (9050H)=30

; c) BETA=2 LOOKUP=5  Reg_C=100  (105)=21

ADDB ALPHA,BETA,LOOKUP[Reg_C]

;ALPHA <-BETA+MEM_BYTE(LOOKUP+Reg_C) ALPHA=23

;Проанализировать и проверить действие команд, использующих адресацию через регистр нуля:

; a) Reg_A=10  (1234)=20

ADD  Reg_A,1234[ZER0_Reg]

          ; Reg_A<-Reg_A+MEM_WORD(1234)               Reg_A=30

; b) SP=192  [SP]=23  (5678)=45 

POP  5678[ZERO_Reg]

;MEM_WORD(5678)< - MEM_WORD (SP) SP < - SP + 2

;(5678)=23 SP=194

;Проанализировать и проверить действие команд, использующих адресацию через указатель вершины стека:

; a) SP=190   (18EH)=20H

PUSH  [SP]    ; Дубликат TOP_OF_STACK

          ;SP=18EH  (18EH)=18EH

; b) Reg_A=0  SP=190 (192)=34

LD   Reg_A, 2[SP ] ; Reg_A < - NEXT_TO_TOP    Reg_A=34

 

1.4 Содержание отчета

1.4.1 Краткое описание интегрированной среды.

1.4.2 Состояния регистров контроллера после выполнения заданного числа шагов в программе L1.mca.

1.4.3 Хорошо комментированные фрагменты программы, выданные преподавателем, для описания разных способов адресации.

 

2 Лабораторная работа № 2

 

Изучение приемов программирования на языке макроассемблера MCS-96

 

Цель работы:

- изучение команд макроассемблера микроконтроллера I8XC196KC;

-  приобретение навыков программирования на языке ассемблера микроконтроллера.

 

2.1 Общие сведения

Программа Ассемблера транслирует мнемокоды операций непосредственно в машинные команды, которые инструктируют процессор относительно выполнения определенной операции.

Любая программа ассемблера состоит из трех частей:

- машинные команды;

- директивы ассемблера;

- средства управления ассемблером.

Машинная команда – машинный код, который может выполняться машиной.

Директивы Ассемблера используются для того, чтобы определить структуру программы, символы и генерировать невыполняемый код, например, данные или сообщения.

Средства управления Ассемблером устанавливают режим работы ассемблера и управляют процессом трансляции.

Подобно любому языку, ассемблер состоит из словаря (совокупность элементов) и грамматики (набор правил, которые определяют, каким образом элементы языка должны быть записаны, чтобы сгенерировать какое-либо действие).

ASM96 использует набор символов ASCII. Все символы ASCII допустимы, но некоторые из них имеют определенные специальные семантические значения для ассемблера.

        Таблица 2.1

Число

Состоит из   цифр

      Пример

Двоичное

<0-1> B (b)

10101010B, 111b

Восьмеричное

<0-7> O (o)

377O, 456Q, 23o, 34q

Десятичное

<0-9> D (d)

100D, 234d, 678

Шестнадцатеричное

<0-9>,

<A-F> H(h)

0AAH, 125h, 4FEh

 

Длинные константы (32 битные числа без знака) могут определяться директивой DCL.

Разделители служат для того, чтобы отделять элементы операторов ASM96.

Таблица 2.2

Символ

Определение

Пробел

Может быть введен один или несколько пробелов. Пробелы служат как разделители полей или разделители символов

,

Запятые отделяют операнды

Апостроф – служит для ограничения символьных строк

( )

Круглые скобки разграничивают выражения

[ ]

В квадратные скобки заключены базовые регистры в операндах команды. Признак косвенной адресации; в скобках содержится адрес регистра слова, содержащего исполняемый адрес.

< >

Угловые скобки включают макропараметры

%

Знак процента указывает, что следующий макропараметр должен оцениваться как выражение перед заменой формального параметра.

!

Знак восклицания используется как заменитель литеры в макрообработке

&

Символ & используется, чтобы отделить формальные параметры из смежного текста

LF

Перевод строки (ASCII 0AH) – признак конца строки

CR

Возврат каретки (ASCII 0DH)

HT

Горизонтальная табуляция – обрабатывается как пробел

;

Точка с запятой разграничивает начало комментария

#

Знак фунта определяет непосредственное значение при непосредственном способе адресации.

:

Двоеточие отделяет имя от оставшегося оператора

 

Идентификаторы - определяемые пользователем имена, которые могут использоваться, чтобы представить адреса памяти, константы и т.д. Идентификатор может содержать до 31 символа. Первый символ должен быть буквой или специальным символом ( ? или _ ). Регистр символов (прописные или строчные) внутри идентификатора игнорируется ассемблером.

Зарезервированные слова – имена, которые имеют специфическое значение в ассемблере и таким образом не доступны для определения пользователем. (Мнемоники команд, директивы ассемблера и макродирективы, предопределенный идентификатор STACK).

Текущая ячейка внутри активного сегмента программы (указатель программного счетчика) указывается в операторе знаком доллара ($). Знак является адресом младшего байта (начала) команды, в которой он указан.

Строки – последовательность символов ASCII. Строка ограничивается начальным и конечным апострофами.

Примеры

1 'STACK' – символьная строка S T A C K , а не зарезервированное слово STACK.

          2 ‘FFH’ – символьная строка FFH, а не шестнадцатеричное число FF.

          3  ‘$’ – литерный знак доллара, а не счетчик команд.

Строки могут использоваться как операнды для директивы DCB и как операнды в выражениях. Когда строка используется как операнд в директиве DCB, длина строки может быть от 0 до 255. Когда строка используется как операнд в выражении, строка может содержать только один или два символа.

Базовые операнды – числа, идентификаторы, предопределенный символ ($) для счетчика команд, предопределенная переменная (STACK) для вершины стека и строки из одного или двух символов.

Выражение состоит из чисел, идентификаторов, специальных знаков и соединяющих их знаков операций, например, 23, Data1, $;  – 25;  166/32.

Выражения используются для определения 16-битных констант.

Оператор исходной программы состоит из четырех полей. Каждое поле не обязательно ([  ]).

        Таблица 2.3

Поле   метки

Поле операции

Поле операнда

Поле комментария

[Label:]

|Name][Operation]

[Operand,... ]

[;Comment] <CR,LF>

LOAD­ _Reg_A:

LD

Reg_A,#23

;Reg_A=23

 

Поле метки содержит или метку (Label:), или имя (Name). Метка может предшествовать машинным командам, макровызовам, директивам резервирования памяти, директивам определения кода и пустым операторам. Значение метки, предваряющей команду, соответствует значению программного счётчика этой команды. Имя используется для присвоения ряду атрибутов имени (макроопределения, директива EQU)

Поле директивы содержит мнемонику машинной команды, операции или имя пользовательского макро. Содержимое поля операции определяет выполняемую команду (JUMP,ADD,LD...).

Поле операнда: содержимое и синтаксис - зависят от операции в операторе. Операндами могут быть идентификаторы, выражения, числа, выражения, определяющие способ адресации. В одной команде допускается до 3 операндов.

Поле комментария позволяет описывать действие каждого оператора. Поле начинается с “;”. Текст, помещенный после “;” не ассемблируется.

Сегмент - фрагмент памяти, определенный внутри модуля или раздела памяти для использования программами пользователя. Каждый сегмент имеет определенную функцию.

Макроассемблер имеет 5 типов сегментов:

- переместимый сегмент регистров (REGS);

- перекрывающийся сегмент регистров (OSEG);

- сегмент данных (DATA);

- сегмент стека (STACK);

- сегмент кода (CODE).

Директивы выбора сегмента позволяют вам завершить один сегмент (деактивировать сегмент) и проинициализировать новый  сегмент (code, data, regs), как указано в директиве.

Программа продолжается в указанном сегменте до следующей директивы  выбора сегмента или конца программы.

Синтаксис директив определения сегмента:

          .rseg <Имя сегмента>, mem    ; перекрывающийся регистр

          .org $+<базовый адрес>

          .aseg <Имя сегмента>, mem    ; неперекрывающийся регистр

          .org $+<базовый адрес>

Любой сегмент может быть задан как перекрывающийся (.ASEG) или неперекрывающийся (.RSEG) .

Сегмент регистров – часть памяти, распределяемой в разделе Register RAM микроконтроллера (30h-1FF). Переменные, принадлежащие сегменту регистров, могут использоваться в программе как регистры. Внутри этого сегмента может быть определено только резервирование памяти. Если сегмент регистров объявлен как перекрывающийся (директивой OSEG), перемещающая программа RL96 и компоновщик могут разрешить перекрывать этот сегмент другим, если они одновременно не активны. Неперекрывающиеся сегменты не могут быть перекрыты.

Сегмент данных – часть памяти, распределяемой в разделе оперативной памяти (RAM). Переменные, принадлежащие этому сегменту, могут использоваться как операнды (используя прямой, косвенный, индексный способы адресации). Внутри этого сегмента может быть определено только резервирование памяти.

Сегмент стека – часть памяти, распределяемой в разделе оперативной памяти (RAM). Переменные, принадлежащие этому сегменту, могут вызываться, используя адресацию через указатель вершины стека или любой другой регистр, используемый как указатель. Программа может содержать только один сегмент стека.

Сегмент кода – часть памяти, распределяемой в разделе ROM. Этот сегмент используется для сохранения констант программы и кода. Переменные, принадлежащие сегменту кода, могут использоваться как операнды (используя прямой, непосредственный, косвенный или индексный режимы адресации) или как адресаты команд вызова подпрограмм и перехода.

Неперекрывающиеся и перекрывающиеся сегменты. Вы можете определить сегмент или как неперекрывающийся или как перекрывающийся.

.aseg указывает, что сегмент неперекрывающийся и начинается с указанного базового адреса.

.rseg указывает, что сегмент является перекрывающимся и начинается с указанного базового адреса.

Когда определяется сегмент как неперекрывающийся, создается новый сегмент. Когда определяется сегмент как перекрывающийся, продолжается предыдущий перекрывающийся сегмент такого же типа  (если такой уже существует). Таким образом, объектный модуль содержит не более одного перекрывающегося сегмента каждого типа и неограниченное количество неперекрывающихся сегментов.

При выполнении арифметических и логических операций, кроме результата операции, формируются значения признаков результата. В микроконтроллере I80C196KC используются 6 признаков результата:

- нулевой результат (Z);

- отрицательный результат (N);

- переполнение разрядной сетки (V);

- сохраняемый признак переполнения разрядной сетки (VT);

- перенос (С);

- сохраняемый перенос при сдвиге кода вправо (ST).

Значение признаков результата представляется состоянием разрядов регистра слова состояния программы PSW (Program Status Word), как показано в таблице 2.4.

Таблица 2.4

7

6

5

4

3

2

1

0

Z

N

V

VT

C

PSE

I

ST

            

Признак сохраняемого переноса при сдвиге кода вправо ST (Sticky Bit Flag) имеет единичное значение, если при выполнении операции сдвига кода вправо за пределы разрядной сетки вышла хотя бы одна единица. После выполнения команды умножения этот бит содержит неопределенное значение.

Бит I (Interrupt Disable) глобально разрешает (I=1) или запрещает (I=0) обслуживание всех маскируемых прерываний. Команда EI устанавливает этот бит, а команда DI сбрасывает его.

Бит PSE (PTS Enable) глобально разрешает (PSE=1, команда EPTS) или запрещает (PSE=0, команда DPTS) работу PTS.

Значение флага переноса С (Carry):

- совпадает со значением переноса из старшего разряда при выполнении операции сложения;

- противоположно значению переноса из старшего разряда при выполнении операции вычитания;

- совпадает со значением бита кода, выходящего за пределы разрядной сетки, при выполнении операций сдвига влево или вправо.

Флаг сохраняемого признака переполнения разрядной сетки VT (Overflow-Trap Flag) устанавливается, когда устанавливается флаг V. Единичное состояние флага сохраняется до выполнения команд условного перехода JVT, JNVT или до выполнения команды операции управления CLRVT, по которой этот признак принимает нулевое значение.

Флаг переполнения разрядной сетки V (Overflow Flag) устанавливается, если при выполнении операции возникает комбинация значений старших битов операндов и результата, соответствующая переполнению разрядной сетки.

Для операции сдвига флаг V устанавливается при изменении старшего бита операнда во время сдвига, как показано в таблице 2.5.

Таблица 2.5

Старший бит

Операция

 

Сложение

Вычитание

Операнд1

0

1

0

1

Операнд2

0

1

1

0

Результат

1

0

1

0

 

Для операций деления флаг V устанавливается согласно таблице 2.6.

        Таблица 2.6

Команда

Результат

DIVU

>255

DIVUB

>65535

DIV

< -127 или > +127

DIVB

< - 32767 или > +32767

 

Флаг отрицательного результата (N) совпадает со значением старшего бита результата.

Флаг нулевого результата устанавливается при получении нулевого результата.

Система команд MCS-96 содержит полный набор арифметических и логических операций для 8- и 16-битных типов данных (БАЙТ, КОРОТКОЕ ЦЕЛОЕ ЧИСЛО, СЛОВО, ЦЕЛОЕ ЧИСЛО). Она поддерживает типы данных с 32 битами (ДВОЙНОЕ СЛОВО, ДЛИННОЕ ЦЕЛОЕ) только как операнды в операциях сдвига, как делимые в операциях деления 32-на-16 и как результат операций умножения 16-на-16. Оставшиеся операции на переменных с 32 битами могут выполняться через комбинацию операций с 16 битами.
       Например, следующие последовательности операций с 16 битами выполняют сложение с 32 битами и вычитание с 32 битами соответственно: 
          ADD AX,CX; сложить два младших слова,

ADDC BX,DX;  сложить два старших слова с учётом переноса,

SUB AX,CX; вычесть два младших слова,

SUBC BX,DX; вычесть два старших слова с учётом заёма.

Система команд также поддерживает преобразования между типами данных.

         Команды сложения, вычитания и сравнения не различают слова без знака и целые числа со знаком. Однако команды условного перехода позволяют обрабатывать результаты этих операций как знаковые или беззнаковые. Например, команда CMPB (сравнение байтов) используется для сравнения знаковых и беззнаковых 8-битных величин. После операции сравнения можно использовать команду JH (переход, если выше) для операндов без знака или команду JGT (переход, если больше больше  чем) для операндов со знаком.

 

2.2 Порядок выполнения работы

2.2.1 Открыть новый файл, например, с именем L3-1.mca.

2.2.2 По заданию преподавателя написать с этим именем программу, состоящую из  фрагментов, приведенных ниже и определяющих особенности системы команд микроконтроллера.

2.2.3 Сохранить и оттранслировать полученную программу.

2.2.4 Просмотреть созданный листинг программы и при отсутствии ошибок создать исполняемый файл.

2.2.5 Активизировать отладчик, выбрав для загрузки в микроконтроллер имя вашего файла с расширением .HEX.

2.2.6 Выполнить команды с точками останова.  Проанализировать действие команд, обратив внимание на то, как изменяется содержимое дампа памяти, регистров специального назначения и стека, а также регистра флагов.

2.2.7 Завершить работу программы, выполнив ее до конца.

  2.2.8 Используя пример программы умножения двух 8 - разрядных чисел, приведенный ниже, написать программу умножения двух беззнаковых 16 -разрядных чисел с формированием 32 - разрядного произведения. Произведение должно быть побайтно выведено на экран через последовательный порт. Пример вывода приведен в лабораторной работе 1.

2.2.9 Отладить программу и загрузить в контроллер по вышеприведенной методике.

2.2.10 Выполнить программу в пошаговом и непрерывном режимах, обратив внимание на то, как изменяется содержимое дампа памяти, регистров специального назначения и регистра флагов.

2.2.11 Завершите работу интегрированной среды.

 

2.3 Примеры программ

2.3.1 Анализ особенностей системы команд микроконтроллера

Ниже приводятся фрагменты программ, позволяющие оценить

основные отличительные особенности системы команд.

 


 


.include ‘8096.inc

;***********************************************

REGSET 30h    ; Сегмент регистров

 

ptrs     .dsl   1                ;Директивы резервирования места

count            .dsw 1                ;в оперативной памяти для переменных:

r1        .dsl   1                ;dsl – резервирование места под переменную

r2        .dsl   1                ;типа двойное слово

cntset .dsw 1                ;dsw - резервирование места под переменную

word1          .dsw  1      ;типа слово

cntset1         .dsb   1      ;dsb -  резервирование места под переменную

byte1 .dsb   1                ;типа байт

dst      .dsb  14*2          ;ptrs – регистр текущих значений указателей

                                      ;на источник (младшее слово) и приемник

                                      ; (старшее слово)

;*******************************

 

CODESET 8100h ; Сегмент кода программы

 

; команда BMOV - пересылка блока

           ld      ptrs,#src      ;Поместить базовые адреса массивов источника

           ld      ptrs+2,#dst  ;Поместить базовые адреса массивов приемника

           ld      count,#12    ;Счётчик пересылаемых байтов

           ldb    cntset1,#2    ;Счетчик повторений команды BMOV

move: bmov ptrs,count    ; Пересылка блока

           djnz cntset1,move ; cntset – 1 и, если байт ¹ 0,то идти на move

                                       ;Команда EXT - расширение слова до двойного                                                ;слова

           ld  r1,#8000h        ; число со знаком

           ext  r1

           ld  r2,#7000h        ; число без знака

           ext  r2

; команда JBC/JBS - проверка состояния бита

           ld  count,#5

           ld  r2,#4

           jbs  r2,2,m1          ;переход на m1,если второй бит установлен

           ld  count,#1

m1:     ldb  IOPORT1,#0FFH

           ld  cntset,#0FFFFh

           djnzw cntset,$      ;cntset – 1 и,если слово ¹ 0, то идти по текущему               

                                         ; адресу ($),т.е.снова уменьшать cntset на 1

           ldb  IOPORT1,#0H

           ld   cntset,#0FFFFh

           djnzw cntset,$

           djnzw count,m1

; команды NOTB и NEGB -

           ldb  r1,#55H

           notb  r1                ;команда логического отрицания

           ldb  r2,#55H

           negb  r2                ;команда инвертирования знака

; команды SHR и SHRA

           ldb  r1,#80h

           shrb  r1,#5 `        ;5 раз логически сдвинуть вправо байт в r1

           ldb  r2,#80h

           shrab r2,#5                    ;5 раз арифметически сдвинуть вправо байт в r2

; команды ST и LD

           ld   r1,#7               ;загрузить слово

           st   r1,r2                ;значение слова в r1 записывается в r2

; команда LDBSE - загрузить байт в слово с расширением знака

          ldb  byte1,#80h

          ldbse word1,byte1;значение 1byte типа короткое целое расширяется

          ; с учетом знака до целого числа и загружается в word1

          ldb  byte1,#10h

          ldbse word1,byte1

; команда NORML - нормализация двойного слова      

           ld   r1,#0

           ld   r1+2,#1h

           norml r1,byte1   ;число в r1 типа длинное целое сдвигается влево ;до тех пор, пока старший бит не станет = 1 или будет 31 сдвиг,число

; сдвигов, запоминается в byte1

           ret

 

 

;*********************************************

src:     .dcb  'ABCDEFGHIKLMNO'

           .dcb  '12345678123456'

;*********************************************

 

           .end

 

2.3.2 Пример оформления программы на языке ассемблера MCS-96


Ниже приводится пример оформления программы на языке ассемблера MCS-96. В качестве примера приведена программа умножения двух 8-битных чисел.

 

 


.include ‘8096.inc’ ;Определения регистров

;******************************************************

  REGSET 30h

 

RezL    .dsb   1  ; RezH&RezL - cлово под

RezH    .dsb   1 ; Результат

M2       .dsb   1  ; Второй множитель

Count   .dsb   1  ; Счетчик сдвигов разрядов

;*****************************************************

CODESET 8100h  ; Сегмент кода программы

 ;Умножение 34*3, должно получиться 102

                    ; RezH          RezL

      ld   RezL,#34       ;Загрузить слово,т.е. HL         34

      ldb   RezH,#0       ;Загрузить байт,т.е. H          0 (обнуление H) 

      ldb   M2,#3          ;Загрузить в М2 число 3

      ldb   Count,#9      ;Загрузить в счетчик (Count) число 9

L1: shr   RezL,#1       ;Логический сдвиг слова вправо на 1 разряд

      jnc   L2               ;Переход на метку L2, если С = 0    

      addb  RezH,M2    ;Сложение байт,т.е. Н          Н + М2

L2: djnz  Count,L1    ;Уменьшить на 1 значение счетчика и

                                   ;перейти на метку L1, если Count ¹ 0

      ret                        ;Выход из программы

      .END

 

2.4 Содержание отчета

2.4.1 Техническое задание.

2.4.2 Хорошо комментированный текст фрагментов программы, выданных преподавателем по изучению команд.

2.4.3 Разобрать механизм алгоритма умножения и составить блок-схему с подробным комментарием .

 

3 Лабораторная работа № 3

 

Изучение таймеров микроконтроллера

 

Цель работы:

 

- изучение структуры и функциональных возможностей таймеров;

- изучение порядка программирования таймеров;

- подготовка программ с использованием интегрированной среды.

 

3.1 Общие сведения

3.1.1 Краткая характеристика таймеров 1 и 2.

Микроконтроллер 8XC196KC содержит два  16 - битных таймера, Таймер 1 и Таймер 2, которые входят в состав быстродействующего модуля ввода/вывода (High-Speed Input-Output; HSIO).

Таймер 1 – стандартный, 16-битный таймер свободного доступа, который увеличивается один раз каждые восемь тактов. Напомним, что при частоте тактового генератора 8 МГц один такт составляет 250 наносекунд. Таймер 1 – всегда датчик времени для HSI (High-Speed Input)  модуля. Он может также выбираться как датчик времени для HSO (High-Speed Output) модуля. Два байта регистра TIMER1 предназначены для содержания счета Таймера1. Запись производится через окно HWindow 15 по адресам 0ВН (старший байт) и 0АН (младший байт), а чтение -  через Hwindow 0 по тем же адресам.  

Таймер 2 – программируемый 16-битный счетчик, который может использоваться как датчик времени для HSO модуля, как суммирующий/вычитающий счетчик или как дополнительный счетчик. Он может также фиксировать внешние события.

Таймер 2 можно синхронизировать внутренне или внешне. При внешней синхронизации в качестве источника синхронизации можно выбрать контакт

T 2CLK (P2.3) или HIS.1.

Максимальная скорость счета Таймера  2 – каждое время состояния (быстрый режим приращения) или каждые восемь времен состояния (нормальный режим).

Два байта регистра TIMER2 содержат значение Таймера 2. Запись и чтение производятся через окно Hwindow 0 по адресам 0DH (старший байт) и 0СН (младший байт). При использовании Таймера 2 как датчика времени  для HSO изменение значения TIMER2 после инициализации HSO модуля может  заставить HSO  пропускать команды.

3.1.2 Программирование Таймера 2

При программировании Таймера 2 нужно учитывать следующее:

а) воздействие на работу и функции Таймера 2 управляющих регистров:

1) регистр 0 управления вводом/выводом (IOC0). Запись производится через окно HWindow 0, а чтение - через Hwindow 15  по адресу 15Н. На рисунке 3.1 показаны четыре разряда регистра, влияющие на работу таймера;

 

IOC0

7

6

5

4

3

2

1

0

 T2CLK SCR

 

T2RSTSRC

 

T2RST_ENA

 

SW_T2RST

 

Рисунок 3.1

2) регистр 2 управления вводом/выводом (IOC2). Запись производится через окно HWindow 0, а чтение - через Hwindow 15  по адресу 0ВН. На рисунке 3.2 показаны два разряда регистра , влияющие на работу таймера;

 

IOC2

7

6

5

4

3

2

1

0

 

 

 

 

 

 

T2UD_ENA

FAST_T2_ENA

Рисунок 3.2

3) регистр 3 управления вводом/выводом (IOC3). Запись производится через окно HWindow 1, а чтение - через Hwindow 15  по адресу 0СН. На рисунке 3.3 показан один разряд регистра , влияющий на работу таймера.

 

IOC3

7

6

5

4

3

2

1

0

R

R

R

R

 

 

 

T2_ENA

Рисунок 3.3

В таблице 3.1 дано назначение служебных  и управляющих регистров:  INT_MASK1, IOC0, IOC1, IOC2 и IOC3.

Таблица 3.1

TIMER2

Содержит значение Таймера 2

INT_MASK1

Маска прерывания INT_MASK1 разрешает или запрещает прерывания Таймера 2.

IOC0

Регистр управления 0. Выбирает внешние источники синхронизации и сброса для Таймера 2.

IOC1

Регистр управления 1. Выбирает источник прерывания для прерывания “Переполнение Таймера” (Timer Overflow interrupt (INT07))

IOC2

Регистр  управления 2. Разрешает или запрещает режим быстрого инкремента (приращения), суммирующую/вычитающую функцию счётчика и границу переполнения для вызова прерывания Timer 2 Overflow  interrupt (INT12).

IOC3

Регистр управления 3. Выбирает внутренний или внешний источник синхронизации для Таймера 2.

 

В таблице 3.2 приведены индивидуальные биты и контакты порта, которые управляют опциями Таймера 2. Столбец два приводит результат установки бита или контакта порта. Столбец три приводит результат очистки бита или контакта порта;

Таблица 3.2

Контакты Порта/ Биты регистра

 

Бит = 1

 

Бит = 0

IOC0.1

Сброс Таймера 2 при каждой установке этого бита

Нет действия.

IOC0.3

Допускает внешний сброс

Отключает внешний сброс

IOC0.5

HSI.0-внешний источник сброса

T2RST (P2.4) - внешний источник сброса

IOCO.7

HSI.1-внешний источник часов

T2CLK (P2.3) - внешний источник часов

 

Допускает

Отключает

IOC1.3

Таймер 2 как источник прерывания “Переполнение Таймера” (INT00)

IOC2.0

Допускает режим быстрого приращения

Отключает режим быстрого приращения

IOC2.1

Допускает вычитающий счет

Только суммирующий счёт

IOC2.5

Прерывание на границе 7FFFH/8000H

Прерывание на границе 0FFFFH/0000H

T2UP-DN (P2.6)

Вычитающий счет,

если IOC2.1 = 1

Суммирующий счет,

если IOC2.1 = 1

б) выбор источника синхронизации

Таймер 2 считает и отрицательные, и положительные переходы. Он может синхронизироваться как внутренне, так и внешне в зависимости от состояния бита T2_ENA в регистре IOC3 (IOC3.0). Установка IOC3.0 выбирает внутренний источник тактов, а очистка – внешний.

Когда Таймер 2 синхронизируется внутренне, бит FAST_T2_ENA (IOC2.0) выбирает входную частоту синхронизации. Когда бит FAST_T2_ENA установлен (быстрый режим приращения), частота синхронизации равна Fosc/4 и Таймер 2 увеличивается один раз за каждое время состояния. Когда бит FAST_T2_ENA очищен (нормальный режим), частота синхронизации равна Fosc/32 и Таймер 2 увеличивается один раз каждые восемь времен состояния.

Если Таймер 2 – датчик времени для HSO модуля, используют нормальный режим. HSO требует, чтобы каждые восемь времен состояния производилась выборка (сканирование) всех записей, содержащихся в файле CAM (Content-Addressable Memory – ассоциативной памяти). Если Таймер 2 использует быстрый режим приращения, HSO события могут быть пропущены;

в) установка направления счета

Бит T2UD_ENA в регистре IOC2 (IOC2.1) управляет, будет ли Таймер 2 считать:

-  вверх (суммирующий);

-  вверх (суммирующий) или вниз (вычитающий);

Если IOC2.1 очищен, Таймер 2 всегда считает вверх. Если IOC2.1 установлен и T2UP-DN = 0, Таймер 2 считает вверх. Если IOC2.1 установлен и T2UP-DN = 1, Таймер 2 считает вниз;

г) выбор сброса Таймера 2

Программное обеспечение может сбрасывать этот таймер установкой бита SW_T2RST (IOC0.1).

HSO может сбрасывать этот таймер, выполняя команду сброса Таймера 2 (CMD_TAG = 0EH). Эта опция сброса особенно полезна при использовании HSO модуля для генерации широтно-импульсных модулируемых выходов (pulse width modulated (PWM) outputs).

3.1.3 Прерывания по таймеру

С Таймером 1 и Таймером 2 связаны три вектора прерывания:

-  прерывание переполнения таймера – Timer Overflow Interrupt (INT00, 2000H);

-  прерывание переполнения Таймера 2 – Timer 2 Overflow Interrupt (INT12, 2038H);

-  прерывание фиксатора Таймера 2 – Timer 2 Capture Interrupt (INT11,2036H).

Регистр IOS1 содержит флажки, которые указывают, какое событие вызвало прерывание. Обращение к битам регистра IOS1 по командам JBC или JBS  обнуляет биты  0-5. Рекомендуется копировать содержимое регистра IOS1 в промежуточный регистр, а затем  выполнять на нем команды проверки разрядов  типа JBC или JBS.

И Таймер 1, и Таймер 2 могут вызвать прерывание переполнения Таймера (INT00). Установите INT_MASK.0 ,чтобы разрешить это прерывание. Чтобы выбрать источник прерывания, установите IOC1.2 (Таймер 1) или IOC1.3 (Таймер 2), как показано на рисунке 3.4.

IOC1

7

6

5

4

3

2

1

0

 

 

 

 

T2OVF_INT

T1OVF_INT

 

 

Рисунок 3.4

Когда происходит переполнение, устанавливается флажок состояния в регистре IOS1. Переполнение Таймера 1 устанавливает IOS1.5, а переполнение Таймера 2 устанавливает IOS1.4, как показано на рисунке 3.5. Запись в регистры управления  IOC1 и  IOS1 производится через окно HWindow 0, а считывание через окно HWindow 15 по адресу 16Н.

IOS1

7

6

5

4

3

2

1

0

 

 

T1_OVF

T2_OVF

 

 

 

 

Рисунок 3.5

При работе с Таймерами необходимо соблюдать следующие предосторожности:

а) изменение значения TIMER1 после инициализации HSI модуля может разрушить относительные ссылки между HSI событиями. Также изменение значения соответствующего таймера (TIMER1 или TIMER2) после инициализации HSO модуля может заставить HSO пропускать запрограммированные события или выполнять их в неправильном порядке;

б) конфигурируйте Таймер 2 для функционирования в нормальном режиме, для чего необходимо очистить  бит FAST_T2_ENA(IOC2.0);

в) конфигурируйте Таймер 2 для счета только в одном направлении, для чего очистите бит T2UD_ENA(IOC2.1), чтобы сконфигурировать Таймер 2 как суммирующий счетчик;

г) не сбрасывайте Таймер 2 до того, как его значение достигнет самого наибольшего времени, запрограммированного в CAM.

 

3.2 Пример программирования таймера

;*************************************************************

;Исследование пpoгpаммных задеpжек с использованием Timer1

 

ldb     WSR,#15                     ; Пеpеключиться в HWindow 15

ld      TIMER1,#0c000h         ; Загpузить значение счетчика

                                    ; Timer1

ldb     WSR,#0                       ; Пеpеключиться в HWindow 0

jbc     IOS1, 5, $                    ; Ожидание пеpеполнения Timer1

;***********************************************************

 

3.3 Порядок выполнения работы

3.3.1 Изучить устройство и порядок программирования таймеров.

3.3.2 Написать программу последовательного циклического включения светодиодов «бегущий огонь». Использовать первый таймер в качестве формирователя времени свечения светодиодов, вторым таймером задавать задержку переключения светодиодов.

3.3.3 Отладить программу и загрузить в контроллер. Запустить программу на выполнение. Наблюдать результаты на светодиодах.    

3.3.4 Написать программу реализации фрагмента музыкального произведения, используя пример 3.4 и прилагаемую таблицу нот.

3.3.5 Отладить программу и загрузить в контроллер. Запустить программу на выполнение. Прослушать результат на динамике контроллера.

3.3.5 Реализовать на контроллере световое сопровождение к музыкальному фрагменту, поставив в соответствие каждому светодиоду определенную ноту звукового ряда.

3.3.6 Все варианты программ продемонстрировать преподавателю.

3.4 Пример выполнения программы

.include '8096.inc'

;*****************************************************************

REGSET  30h                ; Сегмент регистров

 

ADDR_FREQ        .dsw     1; Указатель на таблицу индексов частот

ADDR_TIME        .dsw     1; Указатель на таблицу задержек                

Freq             .dsw     1        ; Частота звучания в Гц

Time             .dsw     1        ; Длительность звучания

tmp              .dsw     1

nLoop            .dsb     1        ; Количество повторений

;*****************************************************************

CODESET  8100h                     ; Сегмент кода программы

LDB nLoop, #3                      ; Количество повторений

N0:

    LD   ADDR_FREQ, #TOWN_FREQ     ; Загрузить адрес на таблицу  ;нот

    LD   ADDR_TIME, #TOWN_TIME     ; Загрузить адрес на таблицу длительностей

N1:

    LDBZE   Freq, [ADDR_FREQ]+      ; Выбираем следующую ноту 

    CMPB    Freq, #-1               ; Это последняя нота?

    JE      Once_more               ; Да : переходим на повтор

    SHL     Freq, #1                ; Вычисляем смещение по номеру ;ноты

    PUSH    FREQS[Freq]             ; Записываем в стек частоту ;ноты

    LDBZE   Time, [ADDR_TIME]+      ; Выбираем длительность ноты

    MULUB   Time, #15               ; Увеличиваем в 100 раз

    PUSH    Time                    ; Записываем в стек ;длительность ноты

    SCALL   SOUND                   ; Вызов процедуры SOUND

    ADD     SP, #4                  ; Очищаем стек от параметров

    SJMP    N1                      ; К следующей ноте

Once_more:

    DJNZ    nLoop, N0               ; Повторяем мелодию

    RET

;*****************************************************************

SOUND:          ; Формат вызова : SOUND( Freq_Note, Time_Note)

;*****************************************************************

CounterT1       .equ     20H        ; Счетчик Timer1

Time_Note       .equ     22H        ; Длительность звука (mc)

    PUSHA

;------ Подготовка SFR-регистров и переменных -------------

    LDB     WSR,#1                  ; Пеpеключиться в HWindow 1

    ORB     IOC3,#1                 ; IOC3.0=1 - внутpенний ;источник счета Timer2

    LDB     WSR,#0                  ; Пеpеключиться в HWindow 0

    LDB     IOC2,#0h                ; IOC2.0=0 - ноpмальный pежим

;инкpементиpования Timer2, IOC2.1=0 - Timer2 - только инкpемент

    LDB     IOC1,#29H               ; IOC1.3=1 - Разрешаем INT00 ;от Timer2

    LD      CounterT1,#T2OVF_ROUTINE; Формируем вектор прерывания

    LD      tmp,#8000h

    ST      CounterT1,[tmp]         ; INT00

    LD      CounterT1, #0D090H      ; CounterT1 = 8 МГц / 32

    LD      CounterT1+2, #3         ; 

    DIVU    CounterT1, 8[SP]        ; Вычисляем значение счетчика

    NEG     CounterT1               ; для Timer1 = -CounterT1 / ;Freq_Note

    LD      Time_Note, 6[SP]        ; Получаем время звучания в мс

    LD      TIMER2,#-2500           ; Загpузить значение счетчика ;Timer2

    LD      TIMER2,#-5000           ; Загpузить значение счетчика ;Timer2, 2500 clk = 10mc

    ORB     INT_MASK, #1            ; Разрешаем INT00

    EI                             

;------ Генерация звука -----------------------------------

GO_GO:

    ORB     IOPORT2,#40H            ; P2.6=1

    LDB     WSR, #15                ; Пеpеключиться в HWindow 15

    LD      TIMER1, CounterT1       ; Инициализируем значение ;счетчика Timer1

    LDB     WSR, #0                 ; Пеpеключиться в HWindow 0

    JBC     IOS1, 5, $              ; Ожидание пеpеполнения Timer1

    ANDB    IOPORT2,#0BFH           ; P2.6=0

    LDB     WSR, #15                ; Пеpеключиться в HWindow 15

    LD      TIMER1, CounterT1       ; Инициализируем значение ;счетчика Timer1

    LDB     WSR, #0                 ; Пеpеключиться в HWindow 0

    JBC     IOS1, 5, $              ; Ожидание пеpеполнения Timer1

    SJMP    GO_GO

NO_SOUND:

    DI

    POPA

    RET

;*****************************************************************

T2OVF_ROUTINE:

    DEC     Time_Note

    JE      S1

    LD      TIMER2,#-2500           ; Загpузить значение счетчика ;Timer2

    LD      TIMER2,#-5000           ; Загpузить значение счетчика ;Timer2, 2500 clk = 10mc

    RET

S1:

    ADD     SP, #2

    PUSH    #NO_SOUND

    RET

;*****************************************************************

MARY_FREQ:

        .dcb     16,14,12,14,16,16,16,14,14,14,16,19,19,16,14,12,14,16,16,16,16,14,14,16,14,12,-1

MARY_TIME:

        .dcb      2, 2, 2, 2, 2, 2, 4, 2, 2, 4, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8

;**********************************************************************

MARSH_FREQ:

        .dcb     17,17,17,16,17,19,21,19,17,12,21,21,21,19,21,22,19,-1

MARSH_TIME:

        .dcb      4, 4, 2, 2, 2, 2, 6, 2, 4, 4, 4, 4, 2, 2, 2, 2,16

;*****************************************************************

TUSH_FREQ:

        .dcb     0,4,7,12,12,12,12,12,12,12,12,14,14,14,14,14,14,14,14,16,14,12,7,12,-1

TUSH_TIME:

        .dcb     8,4,4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, 4,4, 8

;*****************************************************************

TOWN_FREQ:

        .dcb     4,12,11,9,8, 9,4,16,14,12,11,12,9,17,16,14,12,11,12,14,17,16,14,12,11, 9,-1

TOWN_TIME:

        .dcb     4, 4, 4,4,4,12,4, 4, 4, 4, 4,12,4, 6, 2, 4, 4, 2, 2, 8, 4, 4, 4, 4, 4,12

;*****************************************************************

GIRL_FREQ:     

        .dcb     16,16,16,14,12,16,14,16,17,19,14,14,14,12,11,19,21,19,17,16,14,16,16,16,14,12,16,14,16,17,19,19,24,19,19,16,16,14,14,12,24,24,-1

GIRL_TIME:

        .dcb      4, 4, 3, 1, 4, 3, 1, 2, 2, 8, 4, 4, 3, 1, 4, 6, 2, 2, 2, 2, 2, 4, 4, 3, 1, 4, 3, 1, 2, 2, 4, 4, 4, 2, 2, 2, 2, 2, 2, 4, 4, 8  

;*****************************************************************

KAN_KAN_FREQ:     

        .dcb     12,14,17,16,14,19,19,19,21,16,17,14,14,14,17,16,14,12,24,23,21,19,17,16,14,-1

KAN_KAN_TIME:

        .dcb      8, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2  

;*****************************************************************

;     Таблица частот для 1-ой и 2-ой актавы (Гц)

;*****************************************************************

FREQS:  .dcw     131     ; До

        .dcw     139     ; До-диез, Ре-бемоль            1-я

        .dcw     147     ; Ре

        .dcw     156     ; Ре-диез, Ми-бемоль             о

        .dcw     165     ; Ми                             к

        .dcw     175     ; Фа                             т

        .dcw     185     ; Фа-диез, Соль-бемоль           а

        .dcw     196     ; Соль                           в

        .dcw     208     ; Соль-диез, Ля-бемоль           а

        .dcw     220     ; Ля

        .dcw     233     ; Ля-диез, Си-бемоль

        .dcw     247     ; Си

        .dcw     262     ; Среднее До            --------------------

        .dcw     277     ; До-диез, Ре-бемоль

        .dcw     294     ; Ре                            2-я

        .dcw     311     ; Ре-диез, Ми-бемоль

        .dcw     330     ; Ми                             о

        .dcw     349     ; Фа                             к

        .dcw     370     ; Фа-диез, Соль-бимоль           т

        .dcw     392     ; Соль                           а

        .dcw     415     ; Соль-диез, Ля-бимоль           в

        .dcw     440     ; Ля                             а

        .dcw     466     ; Ля-диез, Си-бемоль

        .dcw     494     ; Си

        .dcw     523     ; До

;*****************************************************************

.end

3.5 Содержание отчета

3.5.1 Программирование таймеров.

   3.5.2 Алгоритм управления динамиком.

   3.5.3 Хорошо комментированный текст программы.

 

 

 

4 Лабораторная работа №4

 

Изучение работы широтно-импульсного модулятора микроконтроллера

 

Цель работы:

 

- изучение функциональных возможностей широтно-импульсного модулятора микроконтроллера;

- изучение порядка программирования и применения широтно-импульсного модулятора микроконтроллера.

 

4.1 Общие сведения

Широтно-импульсный модулятор (PWM-Pulse Windth Modulation) микроконтроллеров  типа i8XC196KC/KD имеет три модуля PWM. Каждый выход обеспечивает выдачу импульса переменной длительности (скважности) с фиксированной частотой. Эти выходы могут использоваться для управления двигателями, оптимально работающими с РWM импульсами без фильтрации Эти же импульсы могут быть отфильтрованы для получения гладких аналоговых сигналов.

На рисунке 4.1 представлена блок-схема PWM – модуля, который состоит из следующих основных компонентов:

-  восьмибитовый счетчик (8 Bit Counter);

-  делитель частоты (синхронизации);

-  три компаратора (Comparator);

-  три регистра управления (PWMx Control Register);

-  три буферных регистра (Holding Register);

-  три RS триггера.

Бит SLOW_PWM (IOC2.2) управляет периодом выхода PWM, подключая или отключая делитель частоты. Подключение делителя частоты заставляет восьмибитовый счетчик увеличиваться один раз каждые два времени состояния; его отключение заставляет счетчик увеличиваться один раз каждое время состояния. При тактовой частоте 8 МГц одно время состояния составляет 250 нс.

Каждый регистр управления (PWM Control Register) содержит 8-битное значение, которое загружается в буферный регистр при переполнении 8-битного счетчика. Когда значение счетчика становится равным нулю, выход PWMx становится равным “1” (сигнал переполнения счётчика поступает на вход “S” RS-триггера). Компараторы сравнивают содержимое буферных регистров с текущим значением счетчика. Выход PWMx остается равным “1”, пока значение счетчика не равно значению в буферном регистре. Когда значение счётчика станет равным значению буферного регистра, выход PWM станет равным нулю. Когда произойдёт очередное переполнение счетчика, выход снова станет равным “1” (загрузка 00H в PWMx_CONTROL фиксирует выход PWM равным “0”).

 

 

Рисунок 4.1 - Блок-схема PWM модуля

 

На рисунке 4.2 приведены примеры форм волн на выходе PWM.

Рисунок 4.2 - Формы волн выхода PWM

 

Регистр PWMx_CONTROL, вместе с битом SLOW_PWM (IOC2.2) определяет, как долго выход PWMx в течение импульса задерживается в состоянии равным “1”, то есть позволяет управлять скважностью. Значение, записанное в регистр PWMx_CONTROL, может быть от 0 до 255 времен состояния (от 0 % до 99.6 % скважности).

На рисунке 4.3 представлены форматы управляющих слов, предназначенные для их  программирования.

PWMx Control Register

Регистр управления PWM 0

 

 

PWMO_CONTROL

17H

Hwindow 0 (Write), Hwindow 15 (Read)

Регистр управления PWM 1

 

 

PWM1_CONTROL

16H

Hwindow 1 (Read /Write)

Регистр управления PWM 2

 

 

PWM2_CONTROL

17H

Hwindow 1 (Read /Write)

PWMx_CONTROL

7

6

5

4

3

2

1

0

 

 

 

 

 

 

 

 

 

Рисунок 4.3

 

Установка бита SLOW_PWM (IOC2.2) подключает делитель частоты тактовых импульсов PWM. Общая длина выходного импульса в этом случае составит 512 времен состояния, и значение PWMx_CONTROL умножается на 4. Очистка IOC2.2 отключает делитель частоты. Общая длина выходного импульса в этом случае составит 256 времен состояния, и значение PWMx_CONTROL умножается на 2.

В таблице 4.1 приведены выходные частоты PWM при определенных частотах тактового генератора.

Таблица 4.1

IOC2.2

8 MГц

10 MГц

16 MГц

20 MГц

 

Частота на XTAL1 (FOSC)

0

15.6 KГц

19.6 KГц

31.25 KГц

39.1 KГц

1

7.8 KГц

9.8 KГц

15.63 KГц

19.5 KГц

 

В таблице 4.2 представлены формулы для вычисления периода PWM и времени, в течение которого выход PWM =  “1”.

           Таблица 4.2

Делитель частоты отключен (IOC2.2=0)

Делитель частоты подключен (IOC2.2=1)

Период PWM (в микросекундах)

=512 / Fosc

=1024 / Fosc

PWMx =“1” (в микросекундах)

=PWMx_CONTROL x 2 / Fosc

=PWMx_CONTROL x 4 / Fosc

 

Например, если Fosc = 16 MГц и IOC2.2=0 , тогда период сигнала на выходе PWM – 32 микросекунды. Если в PWM0_CONTROL записано 8AH (десятичное число 138) и IOC2.2 =0 , PWM0 находится в состоянии “1” 17.25 микросекунд (и в состоянии “0” 14.8 микросекунд) из всех 32 микросекунд периода, скважность при этом приблизительно 54 %. Когда IOC2.2 в единичном состоянии, те же самые значения будут генерировать период 64 микросекунды и PWM0 будет находится в состоянии “1” – 34.5 микросекунд (и находится в состоянии равным “0” 29.5 микросекунд), скважность та же самая,  приблизительно 54 %.

 


PWMx_CONTROL – 8-битное значение и Fosc – тактовая частота резонатора в MГц.

На рисунке 4.4 представлена временная диаграмма работы ШИМ-генератора.

 

Выход

PWMx

 

PWMx=“1”

 

 

 

 

     Период

PWM

 

 

 

 

переполнение

счетчика

 

 

 

 

 

Рисунок 4.4

 

Каждый выход PWM мультиплексируется с контактом порта. В таблице 4.3 приведены контакты портов ввода/вывода, альтернативная функция которых – соответствующий выход широтно-импульсного модулятора. Также приводится управляющий регистр, установка одного из битов которого, вместо функции порта, выбирает альтернативную функцию порта – выход PWM. При выборе PWM1 или PWM2 функция вывода отключает квази-двунаправленную функцию Порта 1.

Таблица 4.3

PWM  Выход

Альтернативная функция порта “Выход PWM” допускается когда:

PWM0  P2.5

IOC1.0 = 1 (PWM_SEL)

PWM1  P1.3

IOC3.2 = 1 (PWM1_SEL)

PWM2  P1.4

IOC3.3 = 1 (PWM2_SEL)

 

 

На рисунках 4.5 – 4.7 представлена информация, предназначенная для программирования регистров управления PWM и обеспечения доступа к ним через окна.

Input/Output Control Register

Регистр 1 управления вводом/выводом

 

 

Input/Output Control Register 1

IOC1

16H

   Hwindow 0 (Write), Hwindow 15 (Read)

 

IOC1

7

6

5

4

3

2

1

0

 

 

 

 

 

 

 

PWM_SEL

 

Рисунок 4.5

 

Регистр 2 управления вводом/выводом

 

 

Input/Output Control Register 2

IOC2

0BH

Hwindow 0 (Write), Hwindow 15 (Read)

 

IOC2

7

6

5

4

3

2

1

0

 

 

 

 

 

SLOW_PWM

 

 

 

Рисунок 4.6

 

 

Регистр 3 управления вводом/выводом

 

 

Input/Output Control Register 3

IOC3

0CH

Hwindow 1 (Read/Write)

 

IOC3

7

6

5

4

3

2

1

0

R

R

R

R

PWM2_SEL

PWM1_SEL

 

SEL

 

Рисунок 4.7

 

Как PWM модули, так и быстродействующий модуль вывода (HSO) могут генерировать цепочку прямоугольных импульсов, различных по скважности и по периоду. Фильтрация этих импульсов будет создавать гладкий аналоговый сигнал.

Чтобы сделать колебания выходного сигнала в допустимом аналоговом диапазоне, сначала надо буферизовать сигнал и затем отфильтровать его.

На рисунке 4.8 приведена структура схемы, необходимой для того, чтобы создать гладкий аналоговый сигнал. В качестве фильтра используется или простая RC-цепь, или активный фильтр.

Рисунок 4.8

 

4.2 Порядок выполнения работы

4.2.1 Изучить построение блока PWM микроконтроллера. Особое внимание уделить программированию регистров управления PWM и доступа к ним через окна.

4.2.2 Написать программу формирования аналогового сигнала средствами ШИМ микроконтроллера. Используется канал PWM1 (обусловлено схемной реализацией лабораторного макета). Сформировать изменение аналогового сигнала по форме заданной преподавателем из форм, приведенных ниже.

4.2.2      Отладить программу и загрузить в контроллер. Запустить программу на выполнение. Наблюдать результаты на светодиодах и на виртуальных панелях. Для этого необходимо вставить в текст написанной Вами программы специальный модуль, находящийся в файле ad.mca, который обеспечивает визуализацию процесса на экране в виде виртуальных приборов, оттранслировать и загрузить программу в контроллер. Затем следует выйти из интегрированной оболочки и запустить программу виртуальных приборов, т.е. открыть подсистему «Осциллограф».

4.2.3 Изменить режимы работы ШИМ и параметры формирования аналогового сигнала.

4.2.4      Зафиксировать полученные результаты работы, обратив внимание на используемые регистры управления.

4.2.5      Продемонстрировать работу преподавателю.

4.3 Формы аналоговых сигналов

На рисунке 4.9 представлены формы сигналов, соответствующих одному периоду (Т). В работе периоды должны повторятся бесконечно. Номера рисунков соответствуют вариантам заданий. По оси Х указаны номера отсчетов сигнала в периоде, по оси Y – амплитуды отсчетов. В ряде вариантов задания приведены в виде формул зависимости, по которым изменяется сигнал в периоде.

 

 

Рисунок 4.9

 

 


 4.4 Содержание отчета

4.4.1 Алгоритм программирования блока ШИМ. Нахождение управляющих регистров в окнах 8XC196KC.

4.4.2          Формат управляющего слова PWM1_COMMAND.

4.4.3          Схемы алгоритмов и реализующие их программы.

 

Список литературы

 

1.        Бойко В.И. и др. Микропроцессоры и микроконтроллеры. – СПб.: БХВ – Петербург, 2004. – 464 с.

2.        Козаченко В.Ф. Микроконтроллеры: руководство по применению 16-разрядных микроконтроллеров Intel MCS – 196/296 во встроенных системах управления. – М.: ЭКОМ, 1997. – 688 с.

 

Содержание

 

1 Лабораторная работа 1 ………………………………………………………….. 3

1.1 Общие сведения ………………………………………………………… 3

1.2 Порядок выполнения работы …………………………………………. 10

1.3 Фрагменты программ …………………………………………………...11

1.4 Содержание отчета ……………………………………………………...14

2 Лабораторная работа 2 …………………………………………………………. 15

2.1 Общие сведения ………………………………………………………... 15

2.2 Порядок выполнения работы …………………………………………..20

2.3 Примеры программ ……………………………………………………..21

2.3.1 Анализ особенностей системы команд микроконтроллера ………..21

2.3.2 Пример оформления программы на языке ассемблера MCS-96 …...23

2.4 Содержание отчета ……………………………………………………...24

3 Лабораторная работа 3 ………………………………………………….. ……...25

3.1 Общие сведения ……………………………………………………….. .25

3.1.1 Краткая характеристика таймеров 1 и 2 ……………………………. 25

3.1.2 Программирование таймера 2 …………………………………......... 25

3.1.3 Прерывания по таймеру ……………………………………………... 28

3.2 Пример программирования таймера …………………………………. 29

3.3 Порядок выполнения работы ……………………………………......... 29

3.4 Пример выполнения программы ……………………………………… 30

3.5 Содержание отчета …………………………………………………….. 33

4 Лабораторная работа 4 …………………………………………………............. 34

4.1 Общие сведения ………………………………………………………... 34

4.2 Порядок выполнения работы …………………………………………. 39

4.3 Формы аналоговых сигналов …………………………………………. 40

4.4 Содержание отчета …………………………………………………….. 41

Список литературы ………………………………………………………………. 41

                                                                   

 

 

Святослав Николаевич Петрищенко

Гульзада Даулетбековна Мусапирова