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

Министерство образования и науки Украины Государственное высшее учебное заведение «Приазовский государственный технический университет» Кафедра автоматизации и компьютерных технологий

Сокол С.П.

ПРОГРАММИРОВАНИЕ ЦИФРОВЫХ ПОРТОВ ВВОДАВЫВОДА МИКРОКОНТРОЛЛЕРОВ MSP430

Методические указания к выполнению лабораторной работы

по курсу «Микропроцессорная техника» для студентов направления 6.050202 «Автоматизация и

компьютерно-интегрированные технологии» дневной и заочной форм обучения

Мариуполь 2014

УДК 658.5

Программирование цифровых портов ввода-вывода микроконтроллеров MSP430 : Методические указания к выполнению лабораторной работы по курсу «Микропроцессорная техника» для студентов направления подготовки 6.050202 «Автоматизация и компьютерноинтегрированные технологии» дневной и заочной форм обучения. / сост. С.П. Сокол. – Мариуполь: ГВУЗ «ПГТУ», 2014.- 14 с.

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

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

Составитель: С.П. Сокол ст. преподаватель

Рецензент: А.А. Койфман, ст. преподаватель

Утверждено на заседании кафедры АиКТ

Протокол № ___ от ____ 2014 г.

Утверждено методической комиссией факультета информационных технологий,

протокол № 3 от 05 февраля 2014 г.

©ГВУЗ «ПГТУ», 2014

2

 

СОДЕРЖАНИЕ

 

ВВЕДЕНИЕ....................................................................................

4

1

ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ ПОЛОЖЕНИЯ ....................

5

2

ЗАДАНИЕ НА ЛАБОРАТОРНУЮ РАБОТУ..........................

11

3

ТРЕБОВАНИЯ К ОФОРМЛЕНИЮ ОТЧЕТА.........................

14

4

ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ.......................................

14

5

СПИСОК РЕКОМЕНДОВАННЫХ ИСТОЧНИКОВ..............

14

3

ВВЕДЕНИЕ

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

Целью выполнения данной лабораторной работы является ознакомление студентов с основами программирования цифровых портов ввода-вывода микроконтроллеров MSP430.

Задачи лабораторной работы:

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

-получение навыков конфигурирования портов вводавывода;

-получение общих сведений о программировании портов ввода-вывода при помощи программной среды IAR Embedded Workbench.

Лабораторная работа является второй в курсе «Микропроцессорная техника» и содержит базовые знания по программированию микроконтроллеров MSP430 на языке С на примере портов ввода-вывода.

На выполнение данной работы отводится 4 академических

часа.

Для выполнения лабораторной работы студентам требуется наличие компьютера с установленной программой IAR Embedded Workbench for MSP430, которую можно найти в интернете на официальном сайте, либо на сервере кафедры.

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

Результатом выполнения лабораторной работы является оформленный по требованиям и сданный отчет.

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

4

1 ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ ПОЛОЖЕНИЯ

1.1. Введение

Микроконтроллеры семейства MSP430G2xx1 имеют два порта ввода/вывода P1и Р2. Каждый порт содержит до восьми выводов (линий). Каждый из выводов порта индивидуально конфигурируется в качестве входа или выхода. Запись и чтение линий ввода/вывода также может осуществляться в индивидуальном порядке.

Порты P1 и P2 поддерживают внешние прерывания. Для каждого из выводов портов P1 и P2 можно индивидуально разрешить прерывание и сконфигурировать его так, чтобы оно генерировалось по нарастающему или спадающему фронту входного сигнала. Все линии ввода/вывода порта P1 назначены одному вектору прерываний, а все линии порта P2 — другому вектору.

Цифровые порты ввода/вывода обладают следующими возможностями:

-независимые индивидуально программируемые линии ввода/вывода;

-любые комбинации входов или выходов;

-индивидуально конфигурируемые прерывания от выводов портов P1 и P2;

-раздельные регистры данных для входов и выходов;

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

1.2.Функционирование цифровых портов ввода/вывода

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

5

1.2.1. Регистр данных входа PxIN

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

Бит = 0: Входной сигнал имеет НИЗКИЙ уровень. Бит = 1: Входной сигнал имеет ВЫСОКИЙ уровень.

1.2.2. Регистр данных выхода PxOUT

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

Бит = 0: Выходной сигнал имеет НИЗКИЙ уровень. Бит = 1: Выходной сигнал имеет ВЫСОКИЙ уровень.

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

Бит = 0: Вывод подтягивается к общему проводу. Бит = 1: Вывод подтягивается к питанию.

1.2.3. Регистр направления PxDIR

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

Бит = 0: Вывод порта переключается на вход. Бит = 1: Вывод порта переключается на выход.

1.2.4. Регистр включения подтягивающих резисторов PxREN

Каждый бит регистра PxREN подключает или отключает внутренний подтягивающий резистор соответствующего вывода порта. Тип «подтяжки» определяется соответствующим битом регистра PxOUT.

6

Бит = 0: Подтягивающий резистор отключен. Бит = 1: Подтягивающий резистор подключен.

1.2.5. Регистры выбора функции PxSEL и PxSEL2

Большинство выводов портов используются различными периферийными модулями. Для выяснения альтернативных функций выводов необходимо обратиться к документации на конкретный микроконтроллер. Каждый из битов регистров PxSEL и PxSEL2 используется для выбора функции соответствующего вывода микроконтроллера: линия порта ввода/вывода или вывод периферийного модуля (таблица 1.1).

Таблица 1.1 – Функции портов ввода-вывода

PxSEL

PxSEL2

Функция вывода

0

0

Линия порта ввода/вывода

0

1

Вывод основного периферийного модуля

1

0

Зарезервировано. См. документацию на

 

 

конкретную модель

1

1

Вывод дополнительного периферийного

 

 

модуля

Установка PxSELx = 1 не задаёт автоматически направление передачи данных вывода. Для определённых периферийных модулей может потребоваться конфигурирование битов PxDIRx в соответствии с требованиями модуля.

Если вывод порта используется в качестве входа периферийного модуля, то входным сигналом для данного модуля является зафиксированное в регистре защёлке значение сигнала с вывода микроконтроллера. При PxSELx = 1 внутренний входной сигнал повторяет сигнал, присутствующий на выводе. Однако при PxSELx = 0 на входе периферийного модуля сохраняется значение сигнала, которое присутствовало на выводе микроконтроллера в момент сброса бита PxSELx.

7

1.3 Пример программирования портов ввода-вывода

Рассмотрим программу, реализующую следующую задачу. При подаче питания включается светодиод LED1, а LED2 погашен. При нажатии и удержании кнопки S2 светодиод LED1 гаснет, а LED2 включается. При отпускании кнопки S2 все возвращается в исходное состояние.

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

#include <msp430.h>

//1.Подключение заголовочного файла

микроконтроллеров MSP430

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

int main(void)

{

//3.

WDTCTL = WDTPW|WDTHOLD;

//4.Остановка сторожевого таймера

P1DIR = BIT0|BIT6;

//5.Перевод линий, на которых

находятся LED1 и LED2, на выход

P1REN = BIT3;

//6.Включение подтягивающего

резистора на линии кнопки S2

P1OUT = BIT3;

//7.Подключение подтягивающего

резистора к плюсу питания

//8.Бесконечный цикл

while (1)

{

//9.

if (P1IN&BIT3)

//10.Если кнопка S2 не нажата,

{

//11.

P1OUT |= BIT0;

//12.то включить светодиод LED1

P1OUT &=~BIT6;

//13.и выключить LED2

}

//14.

else

//15.Иначе

{

//16.

P1OUT |= BIT6;

//17.включить светодиод LED2

P1OUT &=~BIT0;

//18.и выключить LED1

}

//19.

}

//20.

}

//21.

Рассмотрим работу программы. Для удобства все строки в ней пронумерованы. При описании программы считается, что студент знаком с синтаксисом языка Си.

Строка 1. К файлу текста программы директивой компилятора include подключается файл «msp430.h». В этом файле содержатся ссылки на заголовочные файлы всех известных среде IAR микроконтроллеров семейства MSP430.

8

Имя нужного контроллера было указано ранее в меню «Options…». Теперь среда разработки загружает необходимый заголовочный файл автоматически. Данная строка должна присутствовать всегда.

Строка 2. Объявление главной функции программы main. Тип возвращаемого функцией значения может быть любым: int, void, char. Параметры в данную функцию не передаются.

Строки 3 и 21. Определяют границы функции main. Строка 4. С нее начинается собственно текст основной

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

Строка 5. Перевод выводов Р1.0 и Р1.6 на выход. В заголовочных файлах контроллеров MSP430 описаны макроопределения BIT0, BIT1, …, BIT7, которые равны соответственно 0х01, 0х02,… 0х80. Таким образом, в макроопределении BIT0 записана логическая «1» только в нулевом бите, а все остальные равны «0», в BIT1 логическая «1» только в первом бите и т.д. Исходя из вышесказанного, запись P1DIR = BIT0|BIT6 можно трактовать следующим образом: вначале выполняется операция побитового «ИЛИ» между BIT0 и BIT6, в результате которой получается байт с логическими единицами в нулевом и шестом бите, а затем полученное значение сохраняется в регистре P1DIR.

Почему мы используем как выходы именно выводы P1.0 и Р1.6? Если скачать с сайта компании Texas Instruments руководство пользователя отладочной платы MSP-EXP430G2 LaunchPad [1] и найти в ней принципиальную электрическую схему платы, то можно увидеть, что аноды светодиодов LED1 и LED2 подключены к выводам Р1.0 и Р1.6 соответственно, а катоды – к общему проводу.

9

Строка 6. Включение подтягивающего резистора на входе Р1.3. Именно к этому входу подключена кнопка S2 [1], а поскольку внешний подтягивающий резистор на плате отсутствует, то приходится использовать внутренний.

Строка 7. Подключение вывода Р1.3 к выводу питания через подтягивающий резистор. Теперь, если кнопка не нажата, то на выводе Р1.3 будет присутствовать высокий уровень напряжения, а при нажатии – низкий, поскольку кнопка замыкает вывод на общий провод.

Строка 8. Объявление бесконечного цикла. Строки 4-7, которые были описаны до начала этого цикла, выполнятся один раз после запуска программы. А строки 10-19, входящие в цикл, будут выполняться постоянно, пока контроллер находится в режиме работы.

Строки 9 и 20. Определяют границы бесконечного цикла. Строка 10. Проверка состояния кнопки S2. Для проверки

используется стандартный прием – побитовое логическое «И» регистра P1IN и макроопределения BIT3. Условие будет истинным только в том случае, если третий бит регистра P1IN будет равен 1, то есть, если кнопка не нажата, поскольку, как было написано выше, регистр P1IN содержит текущее состояние выводов порта.

Строки 11 и 14. Определяют границы действий, выполняемых при отпущенной кнопке.

Строка 12. В нулевой бит регистра P1OUT записывается логическая единица. Здесь снова используется стандартный прием – побитовое логическое «ИЛИ» регистра P1OUT и макроопределения BIT0 с сохранением результата в P1OUT. При этом в регистре P1OUT устанавливается в «1» только нулевой бит. После выполнения этой строки светодиод LED1 включится, поскольку на выходе P1.0 окажется высокий логический уровень.

Строка 13. В шестой бит регистра P1OUT записывается логический ноль. Тут применяется еще один стандартный прием

– побитовая инверсия значения BIT6 и побитовое логическое «И» полученного значения и регистра P1OUT с сохранением

10