Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Пособие HCS12 & Elvis II v.7.01

.pdf
Скачиваний:
223
Добавлен:
03.05.2015
Размер:
4.14 Mб
Скачать

TRFR

LDAA B,X

;Загрузка в аккумулятор A значения ячейки памяти с

 

INCB

;адресом (B) + (X).

 

;Увеличить значение B на единицу.

 

STAA $014F,Y

;Сохранение данных аккумулятора A в ячейку с

 

DBNE Y,TRFR

;адресом $014F + (Y).

 

;Переход по метке TRFR, если (Y) ≠ 0.

 

JMP *

 

ORG StartVector

DC.W EX_2_3_2

Задачи для самостоятельной работы

Задачи должны быть выполнены с применением расширенных режимов индексной адресации.

1.Исходный массив 32-разрядных элементов находится по адресам $0100..$011F. Эти числа должны быть перемещены по адресам $0130..$014F в обратном порядке.

2.Дан массив 32-разрядных чисел со знаком, располагающийся по адресам $0020..$003F. Эту информацию необходимо перенести в область памяти $0050..$06F, причем отрицательные должны быть заменены на ноль.

3.Дан массив 32-разрядных чисел без знака, располагающийся по адресам $0040..$005F. Начиная с адреса $0070 переписать только чётные числа, последним элементом записать количество таких чисел.

4.Написать программу, заполняющую ячейки памяти по адресам $0100..$011F следующими значениями: 5000, 6000, 7000 и т.д. Реализация решения должна происходить в цикле.

5.Исходный массив 8-разрядных элементов находится по адресам $0100..$011F. Перенести эти значения в область памяти $0130..$014F, сделав у чисел, больших 127, старший ниббл равным нулю.

6.Дан массив 16-разрядных чисел со знаком, располагающийся по адресам $0020..$002F. Начиная с адреса $0080 переписать только отрицательные числа, последним элементом записать количество таких чисел.

151

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

Расширение системы команд «классического» Ассемблера

Содержание

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

HCS12.

Подготовка к работе

При подготовке к лабораторной работе №10 рекомендуется рассмотреть ранее не использовавшиеся команды пересылки данных (п. 1.4.1).

Практическая часть

Пример 10.1. Исходные данные находятся в ОЗУ по адресам $80..$88. Произвольные значения чисел должны быть занесены в эти ячейки под управлением программы. Необходимо найти наименьший элемент массива и записать его в какую-либо ячейку ОЗУ.

RamStart

EQU

$0000

RomStart

EQU

$E000

StartVector

EQU

$FFFE

INITRG

EQU

$0011

RES

EQU

$0070

ORG

RomStart

 

EX_10_1 MOVB

#$08,INITRG

LDX

#$80

;Загрузка в индексный регистр X начального адреса

 

 

 

;исходного массива.

 

MOVW #$40AE,2,X+

;Помещение чисел $40 и $AE в ячейки памяти с

 

 

 

 

;адресами $80 и $81. После выполнения

 

MOVW #$7A9F,2,X+

;команды адрес увеличивается на 2.

 

 

 

MOVW #$2109,2,X+

 

 

MOVW #$37C1,2,X+

 

 

MOVB #127,X

 

 

 

LDX

#$80

;Загрузка в аккумулятор A первого элемента массива.

 

LDAA

,X

 

LDY

#$09

;Загрузка в регистр Y количества элементов массива.

MIN

MINA

1,X+

;Сравнение значений аккумулятора A и ячейки памяти

 

STAA RES

;с адресом (X). Минимальное из них помещается в A.

 

;Сохранение в ячейку результата.

 

DBNE Y,MIN

 

 

 

JMP

*

 

 

 

ORG

StartVector

 

152

DC.W EX_10_1

Задачи для самостоятельной работы

Задачи должны быть выполнены с применением дополнительных команд (MOVB, TFR, MIN/MAX и другие не применявшиеся ранее).

1.Даны два массива 8-разрядных чисел без знака. Первый хранится области памяти $70..$79, а второй – $80..$89. Необходимо создать третий массив по следующему алгоритму: сначала сравнить первые элементы исходных массивов и записать максимальный, затем то же самое проделать для вторых и т.д.

2.Исходный массив 16-разрядных элементов находятся по адресам $0100..$010B. Эти числа должны быть перемещены по адресам $0120..$012B в обратном порядке. В ячейку с адресом $0130 нужно также поместить количество чисел, больших 4000.

3.Дан массив 16-разрядных чисел без знака, располагающийся по адресам $0020..$003F. Необходимо найти наибольший элемент и записать его в какуюлибо ячейку ОЗУ.

4.Дан массив произвольных 8-битных значений, располагающийся по адресам $0100..$010F. Второй массив располагается по адресам $0120..$012F, значения его элементов также произвольны, но лежат в диапазоне $00..$0F. В области памяти $0130..$013F необходимо создать третий массив по следующему правилу: элемент второго массива является младшим байтом адреса элемента первого массива, который необходимо считать и записать.

5.Даны два массива 8-разрядных чисел без знака. Первый хранится области памяти $40..$49, а второй – $50..$59. В первом массиве нужно найти наибольший элемент, а во втором – наименьший. Затем необходимо вычислить их среднее арифметическое и поместить его в какую-либо ячейку.

6.Дан массив 16-разрядных чисел без знака, располагающийся по адресам $0030..$003F. Его нужно переписать в область памяти $0050..$005F, но элементы, меньшие значения $3FFF, заменить на него.

153

7. Лабораторный практикум по изучению периферийных модулей МК MC9S12C128 с применением языка C

Введение. Содержание лабораторного практикума и методика проведения занятий

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

Часть 1. Лабораторный практикум «Шестнадцатиразрядные микроконтроллеры семейства HCS12» ориентирован на слушателей, которые впервые изучают микропроцессорную технику. Этот практикум позволяет познакомиться со структурой 16-разрядного процессорного ядра с CISC-архитектурой и получить устойчивые навыки программирования на языке ассемблер с применением способов адресации операндов, набора инструкций и мнемоник команд, которые характерны для большинства 8-и и 16-разрядных МК. Таким образом, этот практикум соответствует классическому односеместровому курсу по основам микропроцессорной техники.

Часть 2. Две лабораторные работы №9 и №10 рассчитаны на слушателей, которые ранее изучали какой-либо МК или микропроцессор и должны получить полное представление об архитектуре и особенностях процессорного ядра 16-разрядного МК HCS12. В них демонстрируются дополнительные способы адресации и дополнительные команды, которые характерны только для изучаемого семейства МК.

Часть 3. Лабораторный практикум по изучению периферийных модулей МК MC9S12C128 с применением языка C. Преследует цель изучения периферийных модулей 16-разрядного МК. Этот лабораторный практикум рассчитан на двухсеместровый курс микропроцессорной техники.

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

При двухсеместровом курсе преподаватель может не использовать работы, посвященные таймеру и АЦП, в первом семестре, а заменить их работами №9 и №10. Лабораторные работы части 3 предполагают достаточно глубокое изучение периферийных модулей МК семейства HCS12, а именно модуля процессора временных

интервалов, модуля аналого-цифрового преобразователя, модулей контроллеров последовательного обмена SCI, SPI. Для каждого из модулей изучению подлежит следующий круг вопросов:

Структура и типовые алгоритмы работы модуля;

Регистры специальных функций модуля;

Алгоритмы программного обслуживания модуля в реальном времени для решения типовых задач управления;

Запись алгоритма программного обслуживания на языке С в среде CodeWarrior;

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

154

Занятия проводятся на основе третьей и второй конфигурации лабораторного стенда. Третья конфигурация “Плата CSMB12C128 + плата PBMCUSLK + стенд Elvis II” – основная, для неё написан эталонный пример каждого лабораторного занятия. Эта конфигурации предполагает, что входные воздействия в виде импульсных последовательностей или аналоговых сигналов формируются виртуальными приборами стенда Elvis II. Микроконтроллер, используя свои периферийные модули, преобразует эти сигналы в цифровые коды или в импульсные сигналы с другими временными характеристиками. Отображение полученных результатов преобразования осуществляется на экране монитора средствами виртуальных приборов в составе программного обеспечения для стенда Elvis II.

Вторая конфигурация стенда “Плата CSMB12C128 + плата PBMCUSLK” – дополнительная. Для ее использования нет необходимости конструктивно разбирать стенд третьей конфигурации, т.е. снимать платформу PBMCUSLK с модулем МК CSMB12C128 со стенда Elvis II. Достаточно лишь подключить проводами кнопки и светодиоды платформы PBMCUSLK к желаемым выводам МК и написать соответствующую программу управления для МК. Подобные эксперименты могут даваться учащимся в качестве творческих заданий.

Занятия в рамках данного лабораторного практикума предполагают освоение учащимся достаточно большого объема “предварительных” знаний, а именно:

Основ написания программы на языке С;

Техники создания и отладки проекта для микроконтроллера в среде CodeWarrior;

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

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

Для самостоятельной работы рекомендуется использовать книгу авторов Баррет С.Ф., Пак Д.Дж. “Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С”. – М.: Издательский дом “ДМК-пресс”, 2007, 640 с. Книга прекрасно написана с методической точки зрения, на оригинальном языке она является базовым учебным пособием для студентов американских университетов.

Каждая лабораторная работа лабораторного практикума части 3 содержит эталонный пример по изучению выбранного режима работы конкретного периферийного модуля МК

инабор из индивидуальных заданий трех степеней сложности:

Задачи начального уровня для самостоятельной работы;

Задачи средней сложности для самостоятельной работы;

Сложные задачи для самостоятельной работы.

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

155

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

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

При достаточном числе учебных часов возможно совмещение этих двух стратегий, когда на первом занятии реализуется стратегия 1, а на втором – стратегия 2 для одной и той же лабораторной работы из предложенного цикла.

Набор виртуальных приборов стенда ELVIS II, используемых в практикуме

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

Стандартные инструменты:

1.Двухканальный осциллограф Scope. Для исследования сигналов можно использовать гнёзда типа BNC сбоку платформы Elvis II или линии аналогового ввода ACH на верхнем разъёме платы PBMCUSLK

2.Функциональный генератор FGEN. Создаваемый сигнал выводится либо на гнездо типа BNC сбоку платформы Elvis II или на верхний разъём платы

PBMCUSLK.

3.Индикатор состояния Digital Reader. Читает и отображает на мониторе компьютера двоичный код с восьми линий DI или DO.

Описание прочих стандартных приборов можно найти в п. 3.4.

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

1.Инструмент Two Channel Generator. Двухканальный генератор прямоугольных импульсов с логическими уровнями: напряжение низкого состояния – 0 В, высокого состояния – 5 В. Частота сигналов в обоих каналах всегда одинаковая, диапазон её изменения – от 4 до 40 кГц. Имеется возможность менять относительную длительность импульса в каждом из них (0..100 %), а также варьировать разность фаз между двумя сигналами (0..360°).

2.Инструмент Analog Level. Задаёт аналоговый уровень напряжения в двух каналах аналогового вывода. Диапазон изменения сигналов – U = 0..5 В, выходы находятся на верхнем разъёме платы PBMCUSLK (DAC0 и DAC1).

3.Инструмент Voltage out. Отображает значение напряжения, измеренного микроконтроллером. Принимает 8-разрядный двоичный код на линиях DI. Значение 0xFF соответствует V = 5 В.

4.Инструмент T out. Отображает значение периода сигнала, измеренного микроконтроллером. Принимает 8-разрядный двоичный код на линиях DI. Значение 0xFF соответствует T = 255 мкс.

5.Инструмент ti out. Отображает значение длительности импульса сигнала (прямоугольные импульсы), измеренного микроконтроллером. Принимает 8- разрядный двоичный код на линиях DI. Значение 0xFF соответствует ti = 255 мкс.

156

6.Инструмент f out. Отображает значение частоты сигнала, измеренного микроконтроллером. Принимает 8-разрядный двоичный код на линиях DI. Значение 0xFF соответствует f = 40 кГц.

7.Инструмент Duty cycle out. Отображает значение относительной длительности импульса сигнала (прямоугольные импульсы), измеренного микроконтроллером. Принимает 8-разрядный двоичный код на линиях DI. Значение 0x64 соответствует

γ = 100 %.

8.Инструмент Phase difference out. Отображает значение разности фаз двух сигналов, измеренной микроконтроллером. Принимает 8-разрядный двоичный код на линиях DI. Значение 0xFF соответствует Δφ = 360°.

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

157

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

Режим входного захвата модуля таймера

Содержание

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

Подготовка к работе

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

В процессе подготовки к лабораторной работе №1 рекомендуется ознакомиться с режимом входного захвата модуля таймера микроконтроллера и примером, приведённым ниже.

Практическая часть

Пример 1.1. На ножку 0 порта T микроконтроллера поступает последовательность прямоугольных импульсов, создаваемая инструментом Two Channel Generator. Написать программу, с помощью которой измеряется период поступающего сигнала и выдаётся в микросекундах в параллельном коде на порт A. Код должен принять виртуальный инструмент T out.

#include

<hidef.h>

//Подключение заголовочного файла, содержащего

#include

"derivative.h"

//макроопределение EnableInterrupts.

//Подключение файла, содержащего определение

 

 

//служебных регистров.

unsigned int TCNT_NEW, TCNT_OLD; //Переменные, хранящие новое и старое

unsigned char T;

//значения счётчика таймера.

//Переменная, хранящая значение

 

//измеренного периода.

void main() {

//Главная функция программы.

PPST &= ~0x01;

//Подсоединение подтягивающего вверх резистора к

PERT |= 0x01;

//ножке 0 порта T, PPST0 = 0.

//Включение подтягивающего вверх резистора на

TCTL4 = 0x01;

// ножке 0 порта T, PERT0 = 1.

//Включение обнаружения нарастающих перепадов

TFLG1 = 0xFF;

//сигнала в канале 0, EDG0B = 0, EDG0A = 1.

//Сброс всех флагов входного захвата, CxF = 1.

TFLG2 |= 0x80;

//Сброс флага переполнения таймера, TOF = 1.

TIE = 1;

//Разрешение прерываний по событию в канале 0, C0I = 1.

TSCR2 = 0x01;

//Установка делителя частоты тактирования счётчика таймера

 

//равным ½. Таким образом, fCT = fBUS/2 = 1 МГц.

 

158

TSCR1 = 0x80; //Включение таймера, TEN = 1.

PUCR |= 0x01; //Включение подтягивающих вверх резисторов на порте A, //PUPAE = 1.

DDRA = 0xFF; //Инициализация всех линий порта A на выход.

EnableInterrupts; //Разрешение прерываний в МК.

for(;;) { }

//Бесконечный пустой цикл, ожидание прерываний.

}

 

 

interrupt 8 void IC0() {

//Подпрограмма прерывания по событию в

 

 

//канале 0 подсистемы таймера.

 

 

//После слова interrupt указывается номер

 

 

//вектора прерывания.

TFLG1 = 0x01;

 

//Сброс флага события в канале 0.

TCNT_NEW = TCNT;

 

//Получение нового значения счётчика таймера.

T = TCNT_NEW – TCNT_OLD;

//Вычисление периода.

TCNT_OLD = TCNT_NEW;

//Обновление старого значения счётчика

PORTA = T;

 

//таймера.

 

//Вывод полученных данных на порт A.

}

Новый проект в среде CodeWarrior создаётся следующим образом.

Вначале нужно перейти по пункту главного меню File New Project. Появится первое окно мастера создания проекта. В нём нужно выбрать тип микроконтроллера, который вы собираетесь программировать, а также способ связи с ним (рис. 7.1).

Рис. 7.1. Первое окно мастера создания нового проекта

Далее следует указать путь, по которому будут размещены файлы проекта (рис. 7.2). Удобнее это сделать при помощи кнопки “Set”. В качестве используемого языка программирования выберите C.

159

Рис. 7.2. Второе окно мастера создания нового проекта

В третьем окне мастера (рис. 7.3) к новому проекту можно добавить ранее разработанные файлы. Откажитесь от этой возможности и нажмите “Next >”.

Рис. 7.3. Третье окно мастера создания нового проекта

В следующем окне (рис. 7.4) предоставляется выбор инструмента для ускоренной разработки приложений. Сейчас мы не будем таковыми пользоваться, поэтому следует выбрать пункт “None”. В дальнейшем же Вы при наличии желания можете самостоятельно ознакомиться с надстройкой Device Initialization. При помощи неё процесс инициализации периферии микроконтроллера возможно выполнить намного легче и быстрее, нежели обычным способом, изучая многочисленные служебные регистры в справочных листах.

160