五、实时时钟(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
RTCCIF 0 //中断位置寄存器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); //清除中断标志
}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』