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

📄 lpc_rtc.c

📁 Lpc2103的小程序
💻 C
字号:
/****************************************Copyright (c)**************************************************
**
**                                   北天星国际有限公司
**                                 http://www.po-star.com
**
*******************************************************************************************************
**文件名称:LPC_RTC.C
**功能:运行RTC进行计时,并将所时间值不断的通过串口向上位机发送。
        每2秒LED1和LED2闪烁一次
**说明:把JP2连接上。
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

#include    "..\inc\config.h"
#define     UART_BPS     9600
U8 Send_BUF[16];                   // UART0数据接收缓冲区


 /*************************串口0初始化******************************************/
void UART0_Init ()
{
  U16 Fdiv;
  U0LCR = 0x83;                   // DLAB = 1,可设置波特率
  Fdiv =(Fpclk/16)/UART_BPS;
  U0DLL = Fdiv%256;
  U0DLM = Fdiv/256;
  U0LCR = 0x03;
}

/*************************向串口0发送数据******************************************/
void UART0_PutChar ( U8 data)
{
  U0THR = data;		            // 发送数据
  while( (U0LSR&0x40)==0 );	    // 等待数据发送完毕
}

/***********************将缓冲区的数据发送回主机*********************************/
void  ISendBuf(U8 const *buf, U8 no)
{
  U8  i;
  for(i=0; i<no; i++) UART0_PutChar(buf[i]);
}

/****************************************************************************
**读取RTC的时间值,并将读出的时分秒值由串口发送到上位机显示。
****************************************************************************/
void  SendTimeRtc(void)
{
  U8  const  MESSAGE[]= "RTC Time is : ";
  U32  times;
  U8  bak;
  times = CTIME0;			// 读取完整时钟寄存器0

  bak = (times>>16)&0x1F;		// 取得时的值
  Send_BUF[0] = bak/10+'0';
  Send_BUF[1] = bak%10+'0';		
  Send_BUF[2] = ':';

  bak = (times>>8)&0x3F;		// 取得分的值
  Send_BUF[3] = bak/10+'0';
  Send_BUF[4] = bak%10+'0';		
  Send_BUF[5] = ':';

  bak = times&0x3F;			// 取得秒的值
  Send_BUF[6] = bak/10+'0';
  Send_BUF[7] = bak%10+'0';		
  Send_BUF[8] = '\n';

  ISendBuf(MESSAGE, 14);		// 发送数据
  ISendBuf(Send_BUF, 9);
}
/********************初始化实时时钟*******************************************/
void  RTCInit(void)
{
  YEAR = 2006;				    // 初化年
  MONTH = 03;				    // 初化月
  DOM = 2;				    // 初化日
  HOUR = 12;
  MIN = 00;
  SEC = 00;
	
  CIIR = 0x01;				    // 设置秒值的增量产生一次中断
  CCR = 0x11;				    // 使用独立振荡器,启动RTC
}
void PLL_Init(void)
{
  PLLCON = 1;
	#if ((Fcclk / 4) / Fpclk) == 1
		VPBDIV = 0;
	#endif
	#if ((Fcclk / 4) / Fpclk) == 2
		VPBDIV = 2;
	#endif
	#if ((Fcclk / 4) / Fpclk) == 4
		VPBDIV = 1;
	#endif
	#if (Fcco / Fcclk) == 2
		PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
	#endif
	#if (Fcco / Fcclk) == 4
		PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
	#endif
	#if (Fcco / Fcclk) == 8
		PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
	#endif
	#if (Fcco / Fcclk) == 16
		PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
	#endif
		PLLFEED = 0xaa;
		PLLFEED = 0x55;
		while((PLLSTAT & (1 << 10)) == 0);
		PLLCON = 3;
		PLLFEED = 0xaa;
		PLLFEED = 0x55;
	
}
/****************************************************************************
**主函数:读取实时时钟的值,并从串口发送出去。
****************************************************************************/
void  main(void)
{
  PINSEL0 |= 0x00050005;            // 设置I/O连接到UART0
  PINSEL1 = 0x00000000;
  IO0DIR = LED_MASK;                // 设置LED1控制口为输出,其它I/O为输入
  PLL_Init();
  UART0_Init();
  U1FCR = 0x01; 	            // 使能FIFO
  RTCInit();                        // 初始化RTC
			
  while (1 )	
  {
    IO0SET = LED_MASK;		    // 熄灭LED
    while( (ILR&0x01)==0 );         // 等待RTC增量中断标志
    ILR = 0x01;		            // 清除中断标志
    SendTimeRtc();                  // 读取时钟值,并向UART0发送

    IO0CLR = LED_MASK;		    // 点亮LED
    while( (ILR&0x01)==0 );
    ILR = 0x01;
    SendTimeRtc();
  }
}

⌨️ 快捷键说明

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