Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1 Mб
Скачать

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

1. Определите, на ячейку с каким адресом осуществится переход при выполнении команды goto $-12 и goto $-.12 если org 0x40.

2. Какие из рассмотренных команд передачи управления относятся к командам перехода по условию?

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

3.7 Лабораторная работа № 7 «модуль таймера tmr0»

3.7.1 Цель работы

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

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

Для формирования временных задержек чаще всего используется режим таймера, при котором счётчик увеличивает своё состояние с каждым машинным циклом команды (Fosc/4).

Если коэффициента пересчёта 8-разрядного счётчика таймера не хватает, то возможно использование предделителя.

Предделитель представляет собой такой же 8-разрядный счётчик, но включенный перед счётчиком таймера.

Выбор режима таймера, наличие предделителя и его коэффициент деления определяется регистром OPTION_REG (рисунок 3.20).

Когда бит T0CS сброшен в '0' (OPTION_REG<5>), TMR0 работает от внутреннего сигнала.

Предделитель может быть включен или выключен в зависимости от состояния бита PSA (OPTION_REG<3>).

Регистр 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:

Коэф. делен.

Значение

000

1:2

001

1:4

010

1:8

011

1:16

100

1:32

101

1:64

110

1:128

111

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).