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

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

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



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

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

Исходный материал: PIC16f628a

Таймер TMR0 применяется во многих программах и имеет следующие полезные опции:
8 битный таймер/счетчик
Программируемый выбор внешнее/внутреннее тактирование
По переполнению генерирует прерывание



В этом эксперименте пока что обойдемся функциями самого таймера без прерываний.

За опции таймера TMR0 отвечает регистр OPTION. Понять работу таймера помогает очень наглядная картинка из ресурса mikroe:

А вот собственно биты регистра OPTION:

RBPU — PORTB подтяжки


1 — выключены


0 — включены
INTEDG — Прерывание по спадающему/возрастающему импульсу тактирования


1 — По возрастающему импульсу


0 — По спадающему импульсу
T0CS — Режим таймер/счетчик


1 — Тактирование от внешнего источника через пин RA4.


0 — Таймер использует внутренний осциллятор (Fosc/4).


T0SE — TMR0 Срабатывание по спадающему/возрастающему импульсу тактирования


0 — Срабатывание по спадающему импульсу


1 — Срабатывание по возрастающему импульсу
PSA — Подключение предделителя


1 -Предделитель подключен к сторожевому таймеру


0 — Предделитель подключен к таймеру


PS2, PS1, PS0 — Биты, которые определяют на сколько мы будем делить нашу частоту тактирования

Теперь все что нужно знать у нас есть. Исходя из задачи нам нужно получить импульсы длиной 200 мс, от кварца мы получаем 4/4 = 1 МГц ~ 1 мкс. А значит за один прогон таймера мы можем получить максимум 256 мкс, маловато… Но ничего, введем переменную

#include <htc.h>
#define _XTAL_FREQ 4000000

__CONFIG(WDTDIS & UNPROTECT & MCLREN);

unsigned char cnt = 0;
unsigned char i = 0;
unsigned char srb = 0;
void main() {
TRISB = 0b01111111;
RB7 = 0;
for (;;) {
OPTION = 0b11010111; // считаем по 256 мкс
for (i=1;i<4;i++) { // 192 мс
TMR0 = 0;
while (TMR0 < 250) { cnt++; }
}
OPTION = 0b11010100; // считаем по 32 мкс
TMR0 = 0; cnt = 0;
while (TMR0 < 250) {cnt++;} // 8 мс
srb = !srb;
RB7 = srb;
}

}

В результате работы программы получаем такую симпатичную картинку:

25*8 = 200 мс



Источник: http://diymicro.ru/?p=56
Категория: Обучение PIC с нуля | Добавил: 4ydocactus (30.05.2012)
Просмотров: 3755 | Теги: pic16f628a, TMR0, работа с таймером, PIC микроконтроллеры | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Профиль
Суббота
18.05.2024
09:46

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