Таймер на pic16f628a

Средний рейтинг
Еще нет оценок

Использование встроенного таймера в PIC16F628A

Регистры таймера:

* TMR0H (адрес 0x01): Старший байт 8-битного регистра счетчика таймера
* TMR0L (адрес 0x00): Младший байт 8-битного регистра счетчика таймера
* INTCONbits.TMR0IF (адрес 0x0B, бит 5): Флаг прерывания таймера

Прерывания таймера:

* Прерывание Timer0 (TMR0) срабатывает при переполнении регистра таймера (TMR0L:TMR0H = 0xFFFF). По умолчанию прерывание отключено.

Настройка таймера:

1. Включите тактовый модуль при записи 1 в бит SCS1 регистра OSCCON (адрес 0x02).
2. Выберите источник тактового сигнала таймера, записав соответствующее значение в биты T0CS регистра OPTION_REG (адрес 0x81):
* 00 = Внутренний тактовый сигнал (от генератора часов)
* 01 = Внешний тактовый сигнал (от вывода T0CKI)
* 10 = Запущен с вывода T0CKI
* 11 = Остановить
3. Установите прескалер таймера, записав соответствующее значение в биты PSA и PS регистра OPTION_REG :
* PSA = 0, PS = 000 = 1:1
* PSA = 0, PS = 001 = 1:2
* PSA = 0, PS = 010 = 1:4
* PSA = 0, PS = 100 = 1:16
* PSA = 0, PS = 101 = 1:32
* PSA = 0, PS = 110 = 1:64
* PSA = 0, PS = 111 = 1:128
* PSA = 1 — Режим 8-ми разрядного таймера

Использование таймера:

1. Сбросьте регистр счетчика таймера, записав 0 в TMR0L и TMR0H .
2. Запустите таймер, записав 1 в бит TMR0ON регистра OPTION_REG .
3. Для прерывания по переполнению включите бит TMR0IE в регистре INTCON (адрес 0x0B).

Пример кода:

«`c
include

void main() {
// Настройка таймера0
TRISB = 0x00; // Выводы порта B как выходы
OSCCON = 0x60; // Внутренний генератор (8 МГц)
OPTION_REG = 0x07; // Таймер0, внутренний тактовый сигнал, прескалер 1:128
INTCON = 0x90; // Включение прерываний таймера0 (по переполнению)

// Сброс таймера0
TMR0L = 0;
TMR0H = 0;

// Запуск таймера0
TMR0ON = 1;

while (1) {
// Ваш код здесь
}
}
«`

Обработчик прерывания:

«`c
void interrupt timer0_isr() {
// Ваш код обработки прерывания здесь

// Сброс флага прерывания таймера
TMR0IF = 0;
}
«`

Оцените статью