Предыдущая Следующая

Файл 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 ? | ПРОГРАММАТОР | ПРОЕКТЫ | СТАТЬИ | ССЫЛКИ | КАРТА САЙТА
Hosted by uCoz