Регистр OPTION_REG (адрес 81 h или 181 h)

R/W–1 R/W–1 R/W–1 R/W–1 R/W–1 R/W–1 R/W–1 R/W–1
–RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
Бит 7 Бит 6 Бит 5 Бит 4 Бит З Бит 2 Бит 1 Бит 0

Рисунок3.20

Выбор коэффициент деления определяется значением битов OPTION_REG<2>, OPTION_REG<1>, OPTION_REG<0>(таблица 3.12).

Таблица 3.12

PS2: PS1: PS0: Коэф. делен.
Значение
1:2
1:4
1:8
1:16
1:32
1:64
1:128
1:256

Когда бит T0CS установлен в '1' (OPTION_REG<5>), TMR0 работает от внешнего источника тактового сигнала с входа RA4/T0CKI. Активный фронт внешнего тактового сигнала выбирается битом T0SE в регистре OPTION_REG<4> (T0SE = 0 – активным является передний фронт сигнала).

Более подробное описание работы таймера-0 приведено в разделе 1.10.

Рассмотрим формирование временной задержки в 20ms, оформив её в виде подпрограммы DELAY_SCAN, как в Лабораторной работе № 6.

DELAY_SCAN:

bcf STATUS,RP0 ; Банк 0

bcf STATUS,RP1 ;

bcf INTCON,T0IF ; снять флаг прерывания

movlw 64h ; загрузить TMR0 = 64h(100)

movf TMR0 ;

bsf STATUS,RP0 ; Банк 1

bcf STATUS,RP1 ;

movlw b’00000110’ ; TMR0 от внутреннего сигнала

movf OPTION_REG ; предделитель 1:128

bcf STATUS,RP0 ; Банк 0

bcf STATUS,RP1 ;

bsf INTCON,T0IE ; запуск TMR0

btfsz INTCON,T0IF ; ожидание флага переполнения

goto $-1 ;

return

При Fтакт = 4 МГц частота машинного цикла равна 1 МГц, что составляет Tтакт = 1 μs.

Общее время задержки, составляет:

Команда Назначение Время выполнения
call DELAY_SCAN Вызов собственно п/п 2 μs
bcf STATUS,RP0 .. ! … bsf INTCON,T0IE Первые 12 команд 12*(1 μs)
btfsz INTCON,T0IF Проверка условия (1 μs) Здесь считает таймер
goto $-1 Переход если ложно (2 μs)
nop Когда истинно то goto пропускается 1 μs
return Собственно выход из п/п 2 μs

Итого: 20ms (20000μs - 17 μs) = Tтакт *128*N. Время цикла таймера после предделителя составляет 128 μs.

N = 156, что возможно при загрузке в TMR0 значения: 256-100(64h).

Содержание лабораторной работы

1. Реализовать программу бегущих огней с задержкой между переключениями Тзад = 1сек. При формировании подпрограммы задержки использовать опыт создания п/пDELAY_SCAN.

Как один из вариантов получения задержки в 1 сек, можно использовать 100-кратный вызов рассмотренной в п 3.7.2 п/пDELAY_SCAN.

5. Используя краткие сведения из раздела 3.7.2 реализовать программу подсчёта числа импульсов, приходящих на вывод RA4/T0CKI.

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

1. Создайте новый проект и, пользуясь рассмотренными выше примерами, напишите и введите программу.

2. Откомпилируйте проект и перейдите к режиму симуляции.

3. Откройте окна регистров специальных функций и ОЗУ данных.

4. Выполняя в пошаговом режиме (F7) проанализируйте содержимое регистров STATUS, OPTION_REG, INTCON, FSR и содержимое TMR0.

Примечание:

1. При переходе, в пошаговом режиме, к команде вызова подпрограммы нажмите клавишу (F8), которая позволит выполнить подпрограмму за один шаг.

2. В теле подпрограммы DELAY_SCAN задайте значения TMR0 например как 02h, что позволит пронаблюдать работу подпрограммы задержки за много меньшее число тактов.

3. Имитацию внешних воздействий на входе RA4/T0CKIпроизведите с помощью асинхронных стимулов, рассмотренных в разделе 3.6.4, Лабораторной работы № 6.

3.7.5 Контрольные вопросы:

1. Что произойдёт с содержимым предделителя при записи нового значения в TMR0?

2. Каков максимальный коэффициент деления можно осуществить с помощью TMR0 при наличии предделителя?

3. Какие факторы определяют время выполнения группы команд микроконтроллера?

4. Чем ограничена частота внешнего входного сигнала для TMR0?

3.8 Лабораторная работа № 8
«ИЗУЧЕНИЕ СПОСОБОВ ОБРАБОТКИ ПРЕРЫВАНИЙ»

Цель работы

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

3.8.2 Краткие сведения

PIC16F87X имеют 14 источников прерываний. Регистр INTCON содержит флаги отдельных прерываний, биты разрешения этих прерываний и бит глобального разрешения прерываний.

Наши рекомендации