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 содержит флаги отдельных прерываний, биты разрешения этих прерываний и бит глобального разрешения прерываний.