Режим работы Таймер
В данной статье мы будем рассматривать данный режим для таймера 3. Для всех таймеров данный режим работает одинаково.
В этом режиме таймер тактируется внутренним источником синхроимпульсов. Эти импульсы сперва поступают на предделитель. Если таймер включён, то значение его регистра увеличивается на 1 при каждом переднем фронте входного импульса. Когда значение в регистре таймера TMR3 достигает значения в регистре периода таймера PR3.
Для настройки режима таймера необходимо:
1. Сбросить бит TCS в 0, что будет указывать, что тактироваться таймер будет с внутреннего источника (T3CONbits.TCS=0;)
1. Отключаем режим работы GATE, для этого сбрасываем бит TGATE (T3CONbits.TGATE=0;)
Вот в принципе и всё что можно было сказать про этот режим.
Мы готовы, чтобы написать маленькую программку используя таймер 3.
Попытаемся в примере упрощённо сымитировать работу железнодорожного переезда. За некоторое расстояние до железнодорожного переезда поезд проезжает через датчик (будем считать, что это кнопка), который подаёт команду, что нужно включить сигнал и попеременно мигающие фонари на переезде. Когда поезд проехал переезд, то он замыкает датчик с другой стороны от переезда – это будет означать, что нужно открыть движение транспорта через переезд.
Составляем схему в PROTEUS
Принцип работы схемы вкратце следующий: При нажатии на какую-нибудь кнопку, происходит внешнее прерывания INT для микроконтроллера. Где устанавливается, так сказать, направление движения поезда. Если поезд находится между двумя кнопками, то включается таймер TMR3. Он нужен для создания попеременного мерцания фонарей с определённой частотой (допустим включён левый фонарь, после отсчёта времени происходит прерывание по переполнению таймера, и в обработке прерывания левый фонарь гасим, а правый зажигаем; снова отсчитываем определённый промежуток времени, происходит прерывание и снова меняем состояние фонарей на противоположное, и так до тех пор, пока включен таймер)
Программа для работы данной схемы приведена ниже:
#include "p33Fxxxx.h"
char state; // переменная хранит направление движения поезда
// "1" - "сверху вниз", "2" - снизу вверх, "0"-выключен звонок
void init (void); //объявляем подпрограмму инициализации
// ********** подпрограмма инициализация **********
void init (void)
{ _CN19PUE=1; //включаем подтягивающий резистор на вход CN28
_CN20PUE=1; //включаем подтягивающий резистор на вход CN25
AD1PCFGL=0xffff; // все выводы как цифровые I/O
T3CONbits.TON=0; //Таймер 3 выключен,
T3CONbits.TCS=0; //тактовый сигнал внутренний,
T3CONbits.TGATE=0; // отключаем режим GATE
T3CONbits.TCKPS=0b11; // предделитель устанавливаем 1:256
PR3=0x1900; // Заносим значение периода, с которым будет мерцать светофор
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.