⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 基于2410的RTC程序
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzhou ZHIYUAN electronics Co.,LTD.
**                                     
**                                 http://www.zyinside.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name: main.c
** Last modified Date: 2006-01-11
** Last Version: v1.0
** Description:  MagicARM2410实验箱的基础实验---RTC实验。
**               初始化S3C2410A内部的RTC,然后每隔1秒钟读取一次RTC的时间,并通过串口发送到PC机显示。
**------------------------------------------------------------------------------------------------------
** Created By: 黄绍斌
** Created date: 2006-01-10
** Version: v1.0
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
********************************************************************************************************/
#include  "config.h"


// 定义显示缓冲区
char  disp_buf[50];


// 定义当前时间变量
uint8  g_year = 0;
uint8  g_month = 0;
uint8  g_date = 0;
uint8  g_day = 0;
uint8  g_hour = 0;
uint8  g_min = 0;
uint8  g_sec = 0;


// 定义星期字符串
char *str_day[8] = {" ","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};



/*********************************************************************************************************
** Function name: DelayNS
** Descriptions: 长软件延时。
**              延时时间与系统时钟有关。
** Input: dly	延时参数,值越大,延时越久
** Output: 无
** Created by: 黄绍斌
** Created Date: 2005-12-31 
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  DelayNS(uint32  dly)
{  
	uint32  i;

   	for(; dly>0; dly--) 
       for(i=0; i<50000; i++);
}


// 定义初始化时钟值
#define	 INIT_YEAR		0x06		/* 2006年 */
#define	 INIT_MONTH		0x01		/* 1月   */
#define	 INIT_DATE		0x10		/* 10日   */
#define	 INIT_DAY		0x02		/* 星期二 */
#define	 INIT_HOUR		0x20		/* 20时   */
#define	 INIT_MIN		0x30		/* 30分   */
#define	 INIT_SEC		0x00		/* 0秒    */

/*********************************************************************************************************
** Function name: RTC_Init
** Descriptions: RTC初始化。使用的初始化值为INIT_XXX(宏)来初始化。
**              若force为0,则先检查当前时钟是否正确(通过年月日、时分秒来判断),若正确则不再初始化。       
** Input: force		是否强行初始化(非0值时表示强行)
** Output: 无
** Created by: 黄绍斌
** Created Date: 2006-01-11
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  RTC_Init(int force)
{	
    int  err;
	uint32  bak;
	
	// 判断当前RTC是否正确运行	
	err = 0;
	if(force == 0)				// 若force为0,则判断当前时钟是否正确
	{		    
		rRTCCON = 0x00;			// 禁止RTC接口(只允许RTC计数和读数)	
		bak = rBCDYEAR & 0xFF;
		if(bak>0x99) err++;		// 年判断		
		bak = rBCDMON & 0x1F;
		if(bak>0x12) err++;		// 月判断		
		bak = rBCDDATE & 0x3F;
		if(bak>0x31) err++;		// 日判断		
		bak = rBCDHOUR & 0x3F;
		if(bak>0x24) err++;		// 时判断		
		bak = rBCDMIN & 0x7F;
		if(bak>0x59) err++;		// 分判断		
		bak = rBCDSEC & 0x7F;
		if(bak>0x59) err++;		// 秒判断
				
		if(err==0) return;		// 若时钟正确,则直接返回
	}	
	
	rRTCCON = 0x01;           	// 标准模式,RTC接口使能(允许写)
	
   	rBCDYEAR = INIT_YEAR & 0xFF;
    rBCDMON  = INIT_MONTH & 0x1F;
    rBCDDATE = INIT_DATE & 0x3F;         
    rBCDDAY  = INIT_DAY & 0x07;	// 星期,MON:1  TUE:2  WED:3  THU:4  FRI:5  SAT:6  SUN:7
    rBCDHOUR = INIT_HOUR & 0x3F;
    rBCDMIN  = INIT_MIN & 0x7F;
    rBCDSEC  = INIT_SEC & 0x7F;
    
    rRTCCON  = 0x00;            // 禁止RTC接口(只允许RTC计数和读数)	
}



/*********************************************************************************************************
** Function name: RTC_Read
** Descriptions: 读时间函数。可以指定时否读日期(年月日和星期)        
** Input: date		是否读日期(非0值时表示读)
** Output: 无
** Created by: 黄绍斌
** Created Date: 2006-01-11
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  RTC_Read(uint32 date)
{	
    if(date)
	{	
	    g_year = rBCDYEAR;
		g_month = rBCDMON;
		g_date = rBCDDATE;
		g_day = rBCDDAY;
	}

	g_hour = rBCDHOUR;
	g_min = rBCDMIN;
	g_sec = rBCDSEC;
}



/*********************************************************************************************************
** Function name: DispRTC
** Descriptions: 显示时间(从串口发送显示数据),即显示g_year、g_month、g_date等变量的值。        
** Input: 无
** Output: 无
** Created by: 黄绍斌
** Created Date: 2006-01-11
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  DispRTC(void)
{		
	sprintf(disp_buf, "%02x:%02x:%02x  %10s,  %2x/%2x/20%02x \n", 
	                  g_hour, g_min, g_sec, str_day[g_day], g_month, g_date, g_year);
	UART_SendStr(disp_buf);
}



/*********************************************************************************************************
** Function name: main
** Descriptions: 初始化RTC,然后不断地读取时间值,并输出串口。           
** Input: 无
** Output: 系统返回值0
** Created by: 黄绍斌
** Created Date: 2005-12-31 
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
int  main(void)
{	
    int  temp;
    
    UART_Select(0);         // 选择UART0
    UART_Init();            // 初始化UART0
    
	RTC_Init(0);		    // 初始化RTC(非强行方式)	
	RTC_Read(1);			// 读日期
	
	temp = 0;
	while(1)
	{	
	    while(temp == rBCDSEC); 
		temp = rBCDSEC;
		
		RTC_Read(0);        // 读时间
		DispRTC();		    // 输出时间显示
	}		
	
   	return(0);
}

/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -