Файл rtc.c
//------------------------------------------------------------------------
//ПО обслуживания модуля часов-календаря реального времени RTC
//------------------------------------------------------------------------
#include "hardware.h" // подключение специальных заголовков и определений
#include "rtc.h" // подключение специальных заголовков и определений
// переменные текущего времени и даты
U8 sec=0; // секунды
U8 min=0; // минуты
U8 hour=0; // часы
U8 dow=0; // дни недели
U8 dom=0; // дни месяца
U8 month=0; // месяцы
U16 уеаг=0; // годы
U8 г1000=0; //-----------------------------------
U8 г100=0; // разряды десятичного числа U8 г10=0; //
U8 rl=0; //-----------------------------------
//маски для чтения регистров консолидированного времени RTC
#define MASKSEC 0x3F // 0Ы1.1111
tdefine MASKMIN 0x3F00 // 0Ы1.1111. 0000 .0000
idefine MASKHOUR OxlFOOOO // 0M.1111.0000.0000.0000.0000
tdefine MASKDOW 0x7000000 // Oblll.0000.0000.0000.0000.0000.0000
tdefine MASKDOM OxlF // Obi.1111
#define MASKMONTH OxFOO // Obllll.0000.0000
#define MASKYEAR OxFFFOOOO // Obllll.1111.1111.0000.0000.0000.0000 tdefine MASKDOY OxFFF // Obllll.1111.1111
//Функция инициализации модуля RTC void RTCinit() {
CCR = 0x2; //сброс счетчика тактовой частоты RTC и запрет тактирования CCR = 0x0; //запрет тактирования для инициализации счетчиков времени ILR = 0x3; //сброс всех прерываний RTC
CIIR = 0x0; //запрет прерываний от инкрементирования счетчиков времени AMR = OxFF; //все прерывания от тревоги RTC замаскированы (запрещены)
//инициализация целой и дробной частей предделителя
PREINT = (int)(14745600/32768)-!;
PREFRAC = 14745600-((PREINT+1)*32768); //При pclk = 14745600 PREINT = int(14745600/32768)-1 = int(450)-1 = 449
//PREFRAC = 14745600 - ((449 + 1) х 32768) = 0
HOUR=0; //--------------------------------------------------
МШ=0; // начальная инициализация счетчиков времени и даты
SEC=1; // корректными значениями:
DOW=6; //00:00:01 ВС
DOM=l; II 01.01.2006 (1 день года)
MONTH=1; //
YEAR=2006; //
DOY=l; //--------------------------------------------------
CCR = 0x1; //разрежение тактирования (старт RTC)
}
//Функция запуска счета модуля RTC void RTCstart() {
CCR = 0x1; //старт счета RTC
}
//Функция останова счета модуля RTC void RTCstopO {
CCR = 0x0; //останов счета RTC
}
//Функция чтения и индикации текущего времени и даты модуля RTC
void RTCread_ind_date_time()
{
//получение текущего времени и даты с помощью масок чтения
//регистров консолидированного времени
sec=CTIME0 & MASKSEC;
min= (CTIMEO & MASKMIN)»8;
hour= (CTIMEO & MASKHOUR)»16;
dow= (CTIMEO & MASKDOW)»24;
dom=CTIMEl & MASKDOM;
month=(CTIME1 & MASKMONTH)»8;
year=(CTIMEl & MASKYEAR)»16;
НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |