Меню сайта
Администрация
579-010-666
Или воспользуйтесь формой обратной связи.
Разделы
Автолюбителям [13]
Таймер NE555 [11]
Конструктор схем [11]
Измерительная аппаратура [5]
Осциллографы [2]
На микрухах [10]
Роботы [0]
Световые эффекты [1]
Термостат [0]
Обучение PIC с нуля [17]
Чат
500
Наш опрос
Оцените мой сайт

Результат опроса Результаты Все опросы нашего сайта Архив опросов

Всего голосовало: 148
Статистика



Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » Статьи » Обучение PIC с нуля

8. Использование таймера TMR1
Задача: получить импульсы с частотой 1Гц.

Исходный материал: PIC16f628a и простенькая devboard + proteus.

Продолжаем разбираться с работой таймеров пиков, на этот раз исследуем работу с 16 битным таймером timer1. Сначала немного теории работы:

Таймер может работать как счетчик или таймер, для таймера выделено два 8 битных регистра TMR1H и TMR1L. Контролируется таймер регистром T1CON:

T1CKPS<1:0>: Timer1 выбор коэффициента деления частоты
11 = 1:8
10 = 1:4
01 = 1:2
00 = 1:1
T1OSCEN: включение внутреннего генератора
1 = включен
0 = выключен
T1SYNC: синхронизация внешнего генератора
TMR1CS = 1
1 = не синхронизировать
0 = синхронизировать внешний генератор
TMR1CS = 0
бит игнорируется
TMR1CS: выбор генератора
1 = внешний источник тактирования на пине RB6/T1OSO/T1CKI/PGC (по возрастающему импульсу)
0 = внутреннее тактирование (FOSC/4)
TMR1ON: бит включения
1 = включен
0 = выключен

Для получения импульсов с частотой 1 Гц будем использовать кварц 32.768 кГц.

Небольшой рассчет:

Fosc = 32.768 kHz

F0sc/4 = 8192 Hz

После предделителя F = 1024 Hz

один тик = 0.0009765625 секунды

0.5/0.0009765625 = 512

Таймер до переполнения делает 65536 тиков: 65536 — 512 = 65024

Значит конфигурация таймера будет

TMR1H = 0b11111110; TMR1L = 0x00;

Ну и собственно код программы:


#include <htc.h>
#define _XTAL_FREQ 32768

__CONFIG(WDTDIS & UNPROTECT & MCLREN & LVPDIS);

void main() {
__delay_ms(100); //небольшая задержка
TRISB = 0x00;
PORTB = 0x00;
T1CKPS1 = 1;
T1CKPS0 = 1; // предделитель = 8

T1OSCEN = 0; //выключаем внутренний генератор
TMR1CS = 0; // Fosc/4
GIE = 1; // глобальные прерывания
PEIE = 1; // прерывания перефирии
TMR1IE = 1; // прерывание по переполнению TMR1
TMR1ON = 1; // включаем таймер

TMR1H = 0b11111110; TMR1L = 0x00; //инициализация таймера со значения 65024

for (;;) {
//бесконечный цикл
}

}

interrupt isr() {

if (TMR1IF) {
TMR1H = 0b11111110; TMR1L = 0x00;
RB5 = !RB5;
TMR1IF = 0; //сброс флага
}

}


Результат моделирования в протеусе:




Источник: http://diymicro.ru/?p=79
Категория: Обучение PIC с нуля | Добавил: 4ydocactus (01.06.2012)
Просмотров: 3275 | Теги: pic16f628a, TMR1, PIC микроконтроллеры | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Профиль
Суббота
04.05.2024
18:21

Новости сайта
Добавленно новых материалов:
****************************************
1.06.2012
Просьба...
Уважаемые пользователи!
Выделите пожалуйста 1 минуту вашего времени и кликните пару ссылок от рекламы на Google. Тем самым вы потдержите проект.
Спасибо!
Реклама