Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уч. пос. МПТ (2.04.12).pdf
Скачиваний:
403
Добавлен:
22.03.2015
Размер:
10.95 Mб
Скачать

МГц. Записать команду загрузки рассчитанного значения в регистр T0MR0.

4.Настроить систему прерываний через регистры VICVectAddr0, VICVectCntl0, VICIntEnable (раздел 1.11.5).

5.Включить таймер-счетчик в режиме таймера (регистр T0TCR).

6.Закончить программу пустым вечным циклом

while (1) ;

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

T0IR=1;

В теле процедуры должна находиться единственная команда инверсии порта. Отладка программы осуществляется по «быстрому алгоритму», рас-

смотренному в разделе 2.4.1

3.3 Опрос дискретного датчика или кнопки

3.3.1 Задание

Разработать программу, инвертирующую логический уровень на линиях P0.7 при каждом спадающем фронте сигнала на линии P0.14. Имитация сигнала дискретного датчика производится кнопкой.

3.3.2 Общие рекомендации

Для решения задачи необходимо периодически считывать содержимое порта 0 и сохранять его в специально созданную переменную. Если текущее состояние линии P0.14 изменится по отношению к предыдущему состоянию, сохраненному в переменной с единицы на ноль, значит, кнопка нажата и следует инвертировать линию P0.7. Алгоритм программы показан на рисунке 3.3.1.

3.3.3 Алгоритм программы

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

int NewPort, OldPort;

1. Основная программа начинается с настройки линии P0.7 на вывод. Команды, следующие далее (блоки 2–5), помещаются внутри вечного

цикла while (1) { ... }.

2. Считать содержимое порта 0 в переменную NewPort с наложением маски, то есть с логическим умножением, обеспечивающим копирование только интересующего 14-го разряда.

NewPort=IO0PIN & 0x00004000;

165