- 打卡等级:以坛为家II
- 打卡总天数:441
- 最近打卡:2025-07-31 07:53:41
金牌会员
- 积分
- 1439
|
请教大家:RTC时钟的程序是在试验箱9.6的第45例程《45-内部RTC时钟程序》上修改的,暂时使用内部32K时钟源,我期望每1秒产生中断,用P01反转观测,每一分钟产生中断,用P00反转观测。结果波形如下:好像是到1秒后,P00、P01都翻转了,而且瞬间又翻转了一次。程序如下,请各位看看问题出在哪里?谢谢。
void RTC_config(void)
{
INIYEAR = 21; //Y:2021
INIMONTH = 12; //M:12
INIDAY = 31; //D:31
INIHOUR = 23; //H:23
INIMIN = 59; //M:59
INISEC = 50; //S:50
INISSEC = 0; //S/128:0
ALAHOUR = 0; //闹钟小时
ALAMIN = 0; //闹钟分钟
ALASEC = 0; //闹钟秒
ALASSEC = 0; //闹钟1/128秒
IRC32KCR = 0x80; //启动内部32K晶振.
while (!(IRC32KCR & 1)); //等待时钟稳定
RTCCFG = 0x03; //选择内部32K时钟源,触发RTC寄存器初始化
RTCIF = 0x00; //清中断标志
RTCIEN = 0x18; //中断使能, 0x10:分钟中断, 0x08:秒中断
RTCCR = 0x01; //RTC使能
while(RTCCFG & 0x01); //等待初始化完成,需要在 "RTC使能" 之后判断
}
/******************** RTC 中断函数 *********************/
void RTC_Isr() interrupt 13
{
if(RTCIF & 0x08) //秒中断
{
RTCIF &= ~0x08;
P01=!P01;
}
if(RTCIF & 0x10) //分钟中断
{ RTCIF &= ~0x10;
P00=!P00;
}
}
EA在主程序中打开。
|
|