В начало

Вычисление параметров импульсного сигнала (Лаба)

 

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

 

Теоретическая часть

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

 

Микроконтроллеры серии PIC16FXX имеют 4 прерывания: прерывание по переполнению таймера TMR0, прерывание по изменению значения на выводах RB4-RB7, прерывание по окончанию записи в перепрограммируемое постоянное запоминающееся устройство EEPROM, внешнее прерывание по сигналу на выводе INT(RB0).  

Для всех прерываний в микроконтроллере зарезервирован 1 вектор прерывания, расположенный по адресу 0x04. Т.е. при срабатывании любого из прерываний программа автоматически перейдет на адрес 0x04 и очистит бит GIE в регистре INTCON, тем самым, запретив все прерывания. Для выхода из прерывания используется команда RETIE, которая возвращает программу на тот адрес, на котором она была в момент возникновения прерывания, и выставляет бит GIE, разрешая прерывания.

За работу прерываний отвечает регистр INTCON. Назначение битов регистра INTCON приведено в табл. 2.1. Все биты регистра INTCON доступны и для чтения, и для записи. По умолчанию все биты регистра INTCON, кроме RBIF, равны 0. Значение бита RBIF по умолчанию неопределенно. Для того, чтобы обеспечить переход программы на адрес 0x04 при срабатывании того или иного прерывания, следует записать 1 в бит GIE и биты, отвечающие за разрешение конкретных прерываний.

Для того чтобы узнать, какое из прерываний сработало, надо проверить значение флагов прерываний T0IF, INTF, RBIF.

 

Таблица 1. Назначение битов регистра INTCON

Номер
бита

Название

Назначение

7

GIE

Глобальное разрешение или запрещение прерываний; 0 – все прерывания запрещены; 1 - все разрешенные битами EEIE, T0IE, INTE, RBIE прерывания разрешены.

6

EEIE

Разрешение/запрещение прерывания по окончанию записи в EEPROM; 0(1) - прерывание запрещено (разрешено).

5

T0IE

Разрешение/запрещение прерывания по переполнению таймера TMR0; 0(1) - прерывание запрещено (разрешено)

4

INTE

Разрешение/запрещение прерывания по сигналу на выводе INT(RB0); 0(1) - прерывание запрещено (разрешено).

3

RBIE

Разрешение/запрещение прерывания по изменению значений на выводах RB4-RB7; 0(1) - прерывание запрещено (разрешено).

2

T0IF

Флаг прерывания по переполнению таймера TMR0; 0 - переполнение таймера не произошло; 1 - таймер переполнен.

1

INTF

Флаг прерывания по сигналу на выводе INT(RB0); 0 - прерывание не произошло; 1 - прерывание произошло.

0

RBIF

Флаг прерывания по изменению значений на выводах RB4-RB7; 0(1) - состояние ни одного из выводов RB4-RB7 не изменилось (состояние RB4-RB7 изменилось).

 

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

 

2. Настройка параметров таймера TMR0 и прерывания по внешнему сигналу на выводе INT

 За настройку параметров таймера TMR0 и прерывания по внешнему сигналу на выводе INT отвечает регистр OPTION. Назначение битов регистра OPTION приведено в табл.2.2.

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

 

Таблица 2. Назначение битов регистра OPTION


бита

Название

Назначение

7

RBPU

Не используется в данной работе.

6

INTEDG

Выбор фронта срабатывания прерывания по внешнему сигналу на выводе INT(RB0);

0(1) - прерывание срабатывает по заднему (переднему) фронту сигнала.

5

T0CS

Выбор источника тактовых импульсов для таймера TMR0;

0(1) - источником тактовый импульсов служит внутренний тактовый генератор процессора (внешний сигнал на выводе T0CKI).

4

T0SE

Выбор фронта срабатывания таймера TMR0 при работе с внешним источником тактовых импульсов; 0(1) - срабатывание счетчика по переднему (заднему) фронту тактового импульса

3

PSA

Выбор таймера, которому будет присвоено значение делителя частоты; 0(1) - значение делителя частоты будет присвоено таймеру TMR0 (сторожевому таймеру WDT).

2-0

PS2-PS0

Выбор значения делителя частоты.

 

В микроконтроллере PIC16F84A реализован 8-битный таймер/счетчик. Значение таймер/счетчика хранится в регистре TMR0.

            Приведем возможный порядок инициализации таймера:

 - установка разрешения прерывания таймера в регистре INTCON;

- установка начального значения таймера в регистр TMR0;

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

Выбор значения делителя частоты осуществляется при помощи установки соответствующего значения в младшую тетраду регистра OPTION (биты PSA-PS0). В таблице 2.3 приведены значения делителя частоты.

 

Таблица 3. Значения делителя частоты

Биты PSA-PS0

Значение делителя частоты

0000

1:2

0001

1:4

0010

1:8

0011

1:16

0100

1:32

0101

1:64

0110

1:128

0111

1:256

1000

1:1. В этом случае значение делителя частоты будет присвоено сторожевому WDT таймеру, а таймер TMR0 будет работать без делителя.

 

Для того чтобы остановить таймер достаточно просто установить в 1 бит T0CS в регистре OPTIONS, переведя таймер в работу от внешнего источника тактовых импульсов. При записи значения в регистр TMR0 значение делителя частоты в регистре OPTION сбрасывается, однако сами установки делителя частоты остаются неизменными.

 

3. Работа с внешними портами ввода/вывода

 

Микроконтроллер PIC16F84A имеет 2 двунаправленных порта ввода/вывода: PORTA (выводы RА0-RА4) и PORTB (RB0-RB7). Некоторые из выводов портов могут быть настроены для выполнения специальных функций (например вывод RB0 порта PORTB может быть настроен для генерации прерывания по внешнему сигналу), в этом случае вывод не будет работать как вывод порта ввода/вывода.

Для настройки режима работы каждого вывода портов PORTA и PORTB используются регистры TRISA (0x85) и TRISB (0x86) соответственно. Если в регистре TRISA (TRISB) бит n установлен в 1, то вывод RAn (RBn) будет работать в режиме ввода информации, если же в регистре TRISA (TRISB) бит n установлен в 0, то вывод RAn (RBn) будет работать в режиме вывода.

Для того, чтобы получить информацию с того или иного вывода, надо настроить его при помощи регистра TRISA (TRISB) в режим ввода информации и прочитать соответствующий бит в регистре PORTA (PORTB).

Пример 1. Для того, чтобы получить значение на выводе RA3, следует:

1. Установить 3-й бит регистра TRISA в 1.

2. Прочитать значение 3-го бита регистра PORTA.

Для того, чтобы вывести информацию на тот или иной вывод, надо настроить его при помощи регистра TRISA (TRISB) в режим вывода информации.

Пример 2. Для того, чтобы получить значение на выводе RB5, следует:

1. Установить 5-й бит регистра TRISB в 0.

2. Записать необходимое значение в 5-й бит регистра PORTB.

По умолчанию оба порта PORTA и PORTB находятся в режиме ввода информации (т.е. все биты регистров TRISA, TRISB равны 1).

 

4. Задание

 

Необходимо написать программу формирования заданной выходной импульсной последовательности на выводе RB7 микроконтроллера. Ширина первого импульса равна a тактов, количество импульсов - N, импульсы, следующие после первого, должны иметь ширину на b меньше предыдущего. Период импульсов остается постоянным и равным 256 тактам.

 

Таблица 4. Варианты задания

Вариант

N

a

b

1

4

200

30

2

5

100

10

3

3

120

30

4

4

110

25

5

5

90

5

6

3

70

20

7

4

220

30

8

5

150

20

9

4

140

25

 

5. Содержание отчёта

 

Отчёт должен содержать:

- тему и цель лабораторной работы;

- задание и номер варианта;

- блок-схему алгоритма;

- текст программы, соответствующей варианту задания, с комментариями;

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

 

Civilization VI
Civilization VI


iTunes Gift Card RU-регион. 1000 рублей
iTunes Gift Card RU-регион. 1000 рублей


14 VISA VIRTUAL (RUS BANK)
14 VISA VIRTUAL (RUS BANK)