亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rtcc.c

?? PIc24 Real time clock with alarm and 10sec interruptions
?? C
字號:
/**********************************************************************
* DESCRIPTION:
* Microchip's PIC24F microcontrollers feature a useful Real Time Clock
* for users to get an on chip clock in their applications. 
* This code example demonstrates how to grab and set the RTC, set alarm
* and RTCC clock output / alarm output. 
**********************************************************************/
#include <p24fxxxx.h>

// Setup configuration bits
// JTAG/Code Protect/Write Protect/Clip-on Emulation mode
// Watchdog Timer/ICD pins select
_CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & COE_OFF & FWDTEN_OFF & ICS_PGx2)

// Disable CLK switch and CLK monitor, OSCO or Fosc/2, HS oscillator,
// Primary oscillator
_CONFIG2(FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMOD_HS & FNOSC_PRIPLL)

unsigned char term[90];
unsigned int set;

// Union to access rtcc registers
typedef union tagRTCC {
	struct {
		unsigned char sec;
		unsigned char min;
		unsigned char hr;
		unsigned char wkd;
		unsigned char day;
		unsigned char mth;
		unsigned char yr;
	};
	struct {
		unsigned int prt00;
		unsigned int prt01;
		unsigned int prt10;
		unsigned int prt11;
	};
} RTCC;

RTCC _time;
RTCC _time_chk;
RTCC _alarm;

// macro
#define mRTCCDec2Bin(Dec) (10*(Dec>>4)+(Dec&0x0f))
#define mRTCCBin2Dec(Bin) (((Bin/10)<<4)|(Bin%10))


void RTCCgrab(void);
void RTCCInit(void);
void RTCCSet(void);
void RTCCALMSet(void);
void RTCCUnlock(void);
void RTCCSetBinSec(unsigned char );
void RTCCSetBinMin(unsigned char );
void RTCCSetBinHour(unsigned char );
void RTCCCalculateWeekDay(void);
void RTCCSetBinDay(unsigned char );
void RTCCSetBinMonth(unsigned char );
void RTCCSetBinYear(unsigned char );

void initAll(void)
{
	RTCCInit();
	initU1();				// UART1
	initU2();				// UART2
	initLCD();				// LCD

	TRISA = 0;
}

// main
int main(void)
{
	initAll();
	
	// I/O initialization
    ODCAbits.ODA6 		= 0;
	TRISAbits.TRISA6 	= 0;

    RTCCInit();		// initialization includes set the time and date
	
	RTCCgrab();		// grab once
	
	while (1)
	{
		while(!set)
		RTCCgrab();		// grab once

		sprintf(term,"\n year %d month %d week_day %d day %d hour %d min %d sec %d",_time.yr,_time.mth,_time.wkd,_time.day,_time.hr,_time.min,_time.sec);
		putsU2(term);
		set = 0;
	}
	return (0);
}

/*********************************************************************
 * Function: RTCCProcessEvents
 *
 * Preconditions: RTCCInit must be called before.
 *
 * Overview: The function grabs the current time from the RTCC and
 * translate it into strings.
 *
 * Input: None.
 *
 * Output: It update time and date strings  _time_str, _date_str,
 * and _time, _time_chk structures.
 *
 ********************************************************************/
void RTCCgrab(void)
{
	// Process time object only if time is not being set

		// Grab the time
		RCFGCALbits.RTCPTR = 3;			
		_time.prt11 = RTCVAL;
		_time.prt10 = RTCVAL;
		_time.prt01 = RTCVAL;
		_time.prt00 = RTCVAL;

		// Grab the time again 
		RCFGCALbits.RTCPTR = 3;			
		_time_chk.prt11 = RTCVAL;
		_time_chk.prt10 = RTCVAL;
		_time_chk.prt01 = RTCVAL;
		_time_chk.prt00 = RTCVAL;

		// Verify there is no roll-over
		if ((_time.prt00 == _time_chk.prt00) &&
			(_time.prt01 == _time_chk.prt01) &&
			(_time.prt10 == _time_chk.prt10) &&
			(_time.prt11 == _time_chk.prt11))
		{
			// Here, you can watch structure _time, 
			//	which has the data from RTCC registers.
 
			// TO DO: do something as you like here. 
		}
	
}

/*********************************************************************
 * Function: RTCCInit
 *
 * Preconditions: RTCCInit must be called before.
 *
 * Overview: Enable the oscillator for the RTCC
 *
 * Input: None.
 *
 * Output: None.
 ********************************************************************/
void RTCCInit(void)
{
    // Enables the LP OSC for RTCC operation
	asm("mov #OSCCON,W1");	// move address of OSCCON to W1
	asm("mov.b #0x02, W0");	// move 8-bit literal to W0, 16-bit.
	asm("mov.b #0x46, W2");	// unlock byte 1 for OSCCONL(low byte)
	asm("mov.b #0x57, W3");	// unlock byte 2 for OSCCONL(low byte)
							// move 8-bit of Wn to OSCCON register
	asm("mov.b W2, [W1]");	// write unlock byte 1
	asm("mov.b W3, [W1]");	// write unlock byte 2
	asm("mov.b W0, [W1]");	// enable SOSCEN

    // Unlock sequence must take place for RTCEN to be written
	RCFGCAL	= 0x0000;			
    RTCCUnlock();
    RCFGCALbits.RTCEN = 1;	// bit15
    
    //RTCC pin pad conected to RTCC second clock
	PADCFG1bits.RTSECSEL = 1;	
	RCFGCALbits.RTCOE = 1;		//RTCC Output Enable bit

	/* Enable the RTCC interrupt*/
	IFS3bits.RTCIF = 0;		//clear the RTCC interrupt flag
	IEC3bits.RTCIE = 1;		//enable the RTCC interrupt

    // TO DO: Write the time and date to RTCC as follow. 
	_time_chk.sec = 0x00;
	_time_chk.min = 0x05;
	_time_chk.hr = 0x7;
	_time_chk.wkd = 0x2; 
	_time_chk.day = 0x24;
	_time_chk.mth = 0x07;
	_time_chk.yr = 0x07;
	RTCCCalculateWeekDay();	// To calculate and confirm the weekday

	// Set it after you change the time and date. 
	RTCCSet();
	
	// Set alarm
	_alarm.sec	= 0x01;
	_alarm.min	= 0x01;
	_alarm.hr	= 0x01;
	_alarm.wkd	= 0x01;
	_alarm.day	= 0x01;
	_alarm.mth	= 0x01;
	RTCCALMSet();
}

/*********************************************************************
 * Function: RTCCSet
 *
 * Preconditions: None.
 *
 * Overview: 
 * The function upload time and date from _time_chk into clock.
 *
 * Input: _time_chk - structure containing time and date.
 *
 * Output: None.
 *
 ********************************************************************/
void RTCCSet(void)
{
	RTCCUnlock();				// Unlock the RTCC
	
	RCFGCALbits.RTCPTR = 3;		// Set the time
	RTCVAL = _time_chk.prt11;	// set year
	RTCVAL = _time_chk.prt10;	// set month:day
	RTCVAL = _time_chk.prt01;	// set week:hour
	RTCVAL = _time_chk.prt00;	// set min:sec

	RCFGCALbits.RTCWREN = 0;	// Lock the RTCC
	
	// Here, you can watch the RTCC register, 
	// 	the new time and date has been updated. 
}

/*********************************************************************
 * Function: RTCCALMSet
 *
 * Preconditions: None.
 *
 * Overview: 
 * The function upload time and date from _alarm into RTCC alarm.
 *
 * Input: _alarm - structure containing time and date.
 *
 * Output: None.
 *
 ********************************************************************/
void RTCCALMSet(void)
{
	RTCCUnlock();				// Unlock the RTCC
	while(RCFGCALbits.RTCSYNC==1);		//wait for RTCSYNC bit to become 0
	
	ALCFGRPTbits.ALRMEN		= 0;		//disable alarm to update it
	ALCFGRPTbits.ALRMPTR	= 2;  	 	//Point to Month/Day register		
	ALRMVAL = _alarm.prt10;				//load month & day	
	ALRMVAL = _alarm.prt01;				//load weekday & hour	
	ALRMVAL = _alarm.prt00;				//load minute & seconds

	ALCFGRPTbits.AMASK		= 2;		//alarm every 10 seconds
	ALCFGRPTbits.ARPT		= 0xff;		//alarm 255 times
	ALCFGRPTbits.CHIME		= 1;		//enable chime
    ALCFGRPTbits.ALRMEN		= 1;  	 	//enable the alarm

	RCFGCALbits.RTCWREN = 0;	// Lock the RTCC
}

/*********************************************************************
 * Function: RTCCUnlock
 *
 * Preconditions: None.
 *
 * Overview: The function allows a writing into the clock registers.
 *
 * Input: None.
 *
 * Output: None.
 *
 ********************************************************************/
void RTCCUnlock()
{
	asm volatile("disi	#5");
	asm volatile("mov #0x55, w7");		// write 0x55 and 0xAA to
	asm volatile("mov w7, _NVMKEY"); 	//  NVMKEY to disable
	asm volatile("mov #0xAA, w8");		// 	write protection
	asm volatile("mov w8, _NVMKEY");
    asm volatile("bset _RCFGCAL, #13");	// set the RTCWREN bit
	asm volatile("nop");
	asm volatile("nop");
}

/*********************************************************************
 * Function: RTCCSetBinSec
 *
 * Preconditions: None.
 *
 * Overview: The function verifies setting seconds range, translates
 * it into BCD format and writes into _time_chk structure. To write
 * the structure into clock RTCCSet must be called.
 *
 * Input: Seconds binary value.
 *
 * Output: Checked BCD value in _time_chk structure.
 *
 ********************************************************************/
void RTCCSetBinSec(unsigned char Sec)
{
    if(Sec >= 60)  Sec = 0;
    _time_chk.sec = mRTCCBin2Dec(Sec);
}

/*********************************************************************
 * Function: RTCCSetBinMin
 *
 * Preconditions: None.
 *
 * Overview: The function verifies a setting minutes range, translates
 * it into BCD format and writes into _time_chk structure. To write
 * the structure into clock RTCCSet must be called.
 *
 * Input: Minutes binary value.
 *
 * Output: Checked BCD value in _time_chk structure.
 *
 ********************************************************************/
void RTCCSetBinMin(unsigned char Min)
{
    if(Min >= 60)  Min = 0;
    _time_chk.min = mRTCCBin2Dec(Min);
}

/*********************************************************************
 * Function: RTCCSetBinHour
 *
 * Preconditions: None.
 *
 * Overview: The function verifies a setting hours range, translates
 * it into BCD format and writes into _time_chk structure. To write
 * the structure into clock RTCCSet must be called.
 *
 * Input: Hours binary value.
 *
 * Output: Checked BCD value in _time_chk structure.
 *
 ********************************************************************/
void RTCCSetBinHour(unsigned char Hour)
{
    if(Hour >= 24) Hour = 0;
    _time_chk.hr = mRTCCBin2Dec(Hour);
}

/*********************************************************************
 * Function: RTCCCalculateWeekDay
 *
 * Preconditions: 
 * Valid values of day, month and year must be presented in 
 * _time_chk structure.
 *
 * Overview: The function reads day, month and year from _time_chk and 
 * calculates week day. Than It writes result into _time_chk. To write
 * the structure into clock RTCCSet must be called.
 *
 * Input: _time_chk with valid values of day, month and year.
 *
 * Output: Zero based week day in _time_chk structure.
 *
 ********************************************************************/
void RTCCCalculateWeekDay()
{
	const char MonthOffset[] =
	//jan feb mar apr may jun jul aug sep oct nov dec
	{   0,  3,  3,  6,  1,  4,  6,  2,  5,  0,  3,  5 };
	unsigned Year;
	unsigned Month;
	unsigned Day;
	unsigned Offset;
    // calculate week day 
    Year  = mRTCCDec2Bin(_time_chk.yr);
    Month = mRTCCDec2Bin(_time_chk.mth);
    Day  = mRTCCDec2Bin(_time_chk.day);
    
    // 2000s century offset = 6 +
    // every year 365%7 = 1 day shift +
    // every leap year adds 1 day
    Offset = 6 + Year + Year/4;
    // Add month offset from table
    Offset += MonthOffset[Month-1];
    // Add day
    Offset += Day;

    // If it's a leap year and before March there's no additional day yet
    if((Year%4) == 0)
        if(Month < 3)
            Offset -= 1;
    
    // Week day is
    Offset %= 7;

    _time_chk.wkd = Offset;
}

/*********************************************************************
 * Function: RTCCSetBinDay
 *
 * Preconditions: None.
 *
 * Overview: The function verifies a setting day range, translates it
 * into BCD format and writes into _time_chk structure. To write the
 * structure into clock RTCCSet must be called.
 *
 * Input: Day binary value.
 *
 * Output: Checked BCD value in _time_chk structure.
 *
 ********************************************************************/
void RTCCSetBinDay(unsigned char Day)
{
	const char MonthDaymax[] =
	//jan feb mar apr may jun jul aug sep oct nov dec
	{  31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	unsigned Daymax;
	unsigned Month;
	unsigned Year;

    Month = mRTCCDec2Bin(_time_chk.mth);
    Year = mRTCCDec2Bin(_time_chk.yr);

    Daymax = MonthDaymax[Month-1];

    // February has one day more for a leap year
    if(Month == 2)
    if( (Year%4) == 0)
        Daymax++;

    if(Day == 0) Day = Daymax;
    if(Day > Daymax) Day = 1;
    _time_chk.day = mRTCCBin2Dec(Day);
}

/*********************************************************************
 * Function: RTCCSetBinMonth
 *
 * Preconditions: None.
 *
 * Overview: The function verifies a setting month range, translates
 * it into BCD format and writes into _time_chk structure. To write
 * the structure into clock RTCCSet must be called.
 *
 * Input: Month binary value.
 *
 * Output: Checked BCD value in _time_chk structure.
 *
 ********************************************************************/
void RTCCSetBinMonth(unsigned char Month)
{
    if(Month < 1) Month = 12;
    if(Month > 12) Month = 1;
    _time_chk.mth = mRTCCBin2Dec(Month);
}

/*********************************************************************
 * Function: RTCCSetBinYear
 *
 * Preconditions: None.
 *
 * Overview: The function verifies a setting year range, translates it
 * into BCD format and writes into _time_chk structure. To write the 
 * structure into clock RTCCSet must be called.
 *
 * Input: Year binary value.
 *
 * Output: Checked BCD value in _time_chk structure.
 *
 ********************************************************************/
void RTCCSetBinYear(unsigned char Year)
{
   if(Year >= 100)  Year = 0;
    _time_chk.yr = mRTCCBin2Dec(Year);
    // Recheck day. Leap year influences to Feb 28/29.
    RTCCSetBinDay(mRTCCDec2Bin(_time_chk.day));
}

/*********************************************************************
 * Interrupt for RTCC Alarm.
 *
 ********************************************************************/
void __attribute__((interrupt, no_auto_psv)) _RTCCInterrupt(void)
{
	IFS3bits.RTCIF = 0;	
	
	__builtin_btg((unsigned int *)&LATA, 6);	// Toggle RA6
	
	// TO DO:
	// User Implementation.
	
	set = 1;
	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区三区三四区视频在线观看 | 日本亚洲欧美天堂免费| 免费人成在线不卡| 99视频精品在线| 精品福利av导航| 一区二区三区日韩| 国产a区久久久| 51精品久久久久久久蜜臀| 亚洲欧洲av一区二区三区久久| 日本中文字幕一区二区有限公司| 99国产精品一区| 欧美激情一区在线观看| 精品一区二区三区久久久| 欧美日韩免费高清一区色橹橹| 欧美国产综合色视频| 理论电影国产精品| 亚洲国产精品传媒在线观看| 另类小说综合欧美亚洲| 欧美日韩国产电影| 亚洲国产精品久久久久秋霞影院| 岛国一区二区三区| 国产精品素人一区二区| 精品中文字幕一区二区小辣椒| 欧美日韩国产精品成人| 亚洲国产精品久久艾草纯爱| 在线免费观看日韩欧美| 亚洲欧美韩国综合色| 成人小视频在线| 中文字幕日韩一区二区| 懂色av中文一区二区三区| 2017欧美狠狠色| 国产99久久久国产精品潘金网站| 2023国产精品| 国产一区二区三区在线观看免费 | 欧美日韩精品是欧美日韩精品| 日韩一区日韩二区| 91丝袜高跟美女视频| 中文字幕乱码日本亚洲一区二区| 国产中文字幕精品| 国产日韩欧美激情| www.亚洲激情.com| 亚洲色图一区二区| 欧美日韩不卡一区二区| 性久久久久久久| 777久久久精品| 国产在线播放一区二区三区| 久久久久久99精品| 91在线你懂得| 日韩精品1区2区3区| 精品剧情v国产在线观看在线| 国产一区二区成人久久免费影院| 久久久久国产精品麻豆| 不卡视频在线观看| 亚洲一区二区中文在线| 日韩一二三区视频| 高清国产午夜精品久久久久久| 中文字幕一区二区三区乱码在线| 色吊一区二区三区| 免费看黄色91| 奇米亚洲午夜久久精品| 久久久久99精品国产片| 色视频成人在线观看免| 日韩电影网1区2区| 国产日韩在线不卡| 7777精品伊人久久久大香线蕉超级流畅| 国产精品美女久久久久久久久久久| 在线观看日韩精品| 国产综合久久久久久久久久久久 | 2024国产精品| 91香蕉视频在线| 久久国产尿小便嘘嘘尿| 亚洲免费在线看| 日韩欧美成人午夜| 91在线码无精品| 精品亚洲欧美一区| 亚洲国产综合91精品麻豆| 久久久综合九色合综国产精品| 99re在线视频这里只有精品| 日本aⅴ免费视频一区二区三区| 国产精品情趣视频| 欧美成人a视频| 在线观看视频91| 波多野结衣中文字幕一区| 日韩精品午夜视频| 亚洲乱码中文字幕综合| 国产亚洲精品超碰| 4438x成人网最大色成网站| 色综合网站在线| 国产夫妻精品视频| 久久99久久精品欧美| 一区二区三区国产豹纹内裤在线| 精品国精品国产| 欧美美女一区二区| 在线一区二区视频| 成人av资源在线观看| 国产真实乱子伦精品视频| 日本午夜一本久久久综合| 亚洲精品高清在线| 中文字幕一区二区三区不卡| 久久新电视剧免费观看| 日韩一区二区电影网| 欧美精品在欧美一区二区少妇| 色婷婷综合久久久中文一区二区| 国产精品99久久久久久有的能看| 麻豆freexxxx性91精品| 天天色天天操综合| 污片在线观看一区二区| 亚洲高清免费观看高清完整版在线观看 | 国产精品网站在线观看| 欧美www视频| 欧美一区二区三区免费观看视频 | 亚洲最色的网站| 亚洲最新在线观看| 亚洲电影视频在线| 亚洲成a天堂v人片| 三级久久三级久久久| 奇米色777欧美一区二区| 日本视频一区二区三区| 日本在线播放一区二区三区| 亚洲影视资源网| 亚洲国产精品精华液网站| 午夜av区久久| 老色鬼精品视频在线观看播放| 麻豆精品一二三| 狠狠色丁香婷综合久久| 国产一区二区在线电影| 国产精品一区二区免费不卡 | 日韩高清在线电影| 另类专区欧美蜜桃臀第一页| 黄色日韩网站视频| 丰满少妇久久久久久久| 色综合色综合色综合 | 99久久伊人网影院| 91高清视频免费看| 69堂国产成人免费视频| 欧美精品久久久久久久多人混战 | 91美女视频网站| 成人国产视频在线观看| 99国产精品一区| 欧美在线色视频| 日韩精品一区二区三区视频在线观看| 精品国产电影一区二区| 国产欧美一区二区精品性色| 国产欧美日韩激情| 黄色日韩三级电影| 99热99精品| 欧美日韩午夜影院| 久久色视频免费观看| 国产精品美日韩| 亚洲成a人片综合在线| 久久99久久99| 日本韩国欧美在线| 久久久久国产免费免费| 亚洲视频一区二区在线观看| 免播放器亚洲一区| 成人av午夜影院| 日韩欧美一区二区久久婷婷| 欧美系列在线观看| 国产欧美日韩不卡免费| 伊人色综合久久天天| 激情丁香综合五月| 日本丶国产丶欧美色综合| 日韩欧美成人一区| 一区二区三区欧美日| 国产精品亚洲а∨天堂免在线| 欧美亚洲自拍偷拍| 欧美高清在线视频| 久久99国产乱子伦精品免费| 99久久婷婷国产综合精品电影 | 日韩专区在线视频| 99这里只有久久精品视频| 日韩亚洲电影在线| 午夜欧美电影在线观看| 国产不卡视频一区二区三区| 91精品国产综合久久香蕉麻豆 | 视频一区二区国产| 91视频免费播放| 亚洲精品在线免费观看视频| 亚洲午夜精品久久久久久久久| 国产成人一区在线| 5月丁香婷婷综合| 亚洲综合色网站| 91免费小视频| 欧美激情中文不卡| 国产精品一区二区x88av| 日韩亚洲欧美综合| 三级成人在线视频| 91精品啪在线观看国产60岁| 一区二区三区四区蜜桃 | 国产精品影视在线| 日韩午夜激情免费电影| 亚洲成av人片| 欧美日韩一级二级| 亚洲一区在线视频观看| 一本一道久久a久久精品综合蜜臀| 国产精品天美传媒| 懂色av噜噜一区二区三区av| 久久一区二区视频| 激情小说欧美图片| 久久综合狠狠综合久久综合88|