ARM7单片机(学习ing)—(五)、实时时钟(RTC)—02
扫描二维码
随时随地手机看文章
五、实时时钟(RTC)
五—(02)、1s定时控制(通过查询法实现~~)
注意:后面的程序有操作步骤~~
~~
然后就是程序了:
MDK5_1.c
//------------------------------------------------------------------------------
//1s定时控制(查询方式~~)
//RTC我也不想有太多的介绍~~不管是查询方式,还是中断方式~~其实都是一样的~~
//现在我也是只想结束ARM7的学习~~
//注意:
//预分频寄存器的计数如下:
//PREINT=int(Fpclk/32768)-1;预分频整书寄存器
//PREFPAC=Fpclk-((PREINT+1)*32768);预分频小数寄存器
//RTC的基本操作方式:
//1)设置RTC预分频器(PREINT、PREFRAC);
//2)初始化RTC时钟源,如:YEAR、MONTH、DOM等~~
//3)报警终端设置,如CIIR、AMR等~~
//4)启动RTC,既CCR等的CLKEN位置位
//5)读取完整时间寄存器值或者等待中断
//------------------------------------------------------------------------------
//利用RTC的增量功能进行1s的定时,当定时时间到,取反LED控制~~
//------------------------------------------------------------------------------
#include"lpc210x.h"
#include"bit.h"
#include"macroandconst.h"
//------------------------------------------------------------------------------
#define RTCCIF0//中断位置寄存器ILR[0];为1时计数器增量中断模块产生中断。向该位写入1来清除计数器增量中断
#define LED 10//P0.10口为LED控制口,高电平点亮
#define Fpclk 15000000L//定义Fpclk的值,用于设置串口波特率
//------------------------------------------------------------------------------
//rtc_init()
//RTC初始化函数
void rtc_init()
{
PREINT=Fpclk/32768-1;//设置预分频器
PREFRAC=Fpclk-(PREINT+1)*32768;
YEAR=2012;//初始化年
MONTH=2;//初始化月
DOM=3;//初始化日
CIIR=0x01;//设置秒针的增量产生一次中断
CCR=0x01;//启动RTC
}
//------------------------------------------------------------------------------
//main
int main()
{
PINSEL0=0x00000000;//引脚连接设置
PINSEL1=0x00000000;
SET_BIT(IODIR,LED);//设置LED口为输出
rtc_init();
while(1)
{
SET_BIT(IOSET,LED);//点亮LED
while(GET_BIT(ILR,RTCCIF)==0);//等待RTC增量中断标志
SET_BIT(ILR,RTCCIF);//清除中断标志
SET_BIT(IOCLR,LED);//熄灭LED
while(GET_BIT(ILR,RTCCIF)==0);//等待RTC增量中断标志
SET_BIT(ILR,RTCCIF);//清除中断标志
}
}