Tuier 发表于 2024-9-25 18:01:21

AI32G12K128的RTC功能如何处理任意秒钟中断?| 已解决

RTC计时中断有日中断、时中断和秒中断等中断功能,秒中断服务函数为:


void RTC_Isr() interrupt 13
{
      if(RTCIF&0x08)
      {      
                RTCIF &=~0x08;
                B1S_Flag=1;
      }      
}


但是我想利用RTC实现3秒中断(减少宝贵定时器的使用),以便为主程序中调用其它程序所用,但是始终不得其法,达不到想要的结果。我的中断程序如下:

bit   B3S_Flag;//3秒中断标志位,全局变量
void RTC_Isr() interrupt 13
{
unsigned char   Xs;
      if(RTCIF&0x08)
      {      
                Xs++;
                RTCIF &=~0x08;
                B1S_Flag=1;
               if(Xs==3)
            {
               Xs=0;
                B3S_Flag=1;
            }
      }      
}

请老师们诊断程序哪里有问题并请给出解决方案或程序,谢谢大佬们!

soma 发表于 2024-9-25 18:27:53

就是使用1s中断来实现的啊。xs要先赋值。

DebugLab 发表于 2024-9-25 18:46:16

3秒中断,就是秒中断然后在中断中计数,计3个数执行一次操作

DebugLab 发表于 2024-9-25 18:47:29

问题是缺少static,导致每次退出函数时内存被释放,变量作废

static unsigned char Xs;

就好了

llyymm 发表于 2024-9-25 19:48:11

DebugLab 发表于 2024-9-25 18:47
问题是缺少static,导致每次退出函数时内存被释放,变量作废

static unsigned char Xs;


不是应该static unsigned char Xs = 0;这样写吗

Tuier 发表于 2024-9-25 22:17:42

本帖最后由 Tuier 于 2024-9-25 22:24 编辑

DebugLab 发表于 2024-9-25 18:47
问题是缺少static,导致每次退出函数时内存被释放,变量作废

static unsigned char Xs;

非常感谢,加上static,问题解决!大佬就是不一样,一个关键字,新手想破脑袋也不一定想得到。{:4_250:}

jwd 发表于 2024-9-26 06:30:49

这种要么是全局,要么是静态

小飞侠 发表于 2024-9-26 07:43:26

楼主主要还是对C语言不熟练的原因

Tuier 发表于 2024-9-26 08:23:58

小飞侠 发表于 2024-9-26 07:43
楼主主要还是对C语言不熟练的原因

是的{:4_226:}

Tuier 发表于 2024-9-26 08:24:41

jwd 发表于 2024-9-26 06:30
这种要么是全局,要么是静态
{:4_196:}{:4_250:}
页: [1] 2
查看完整版本: AI32G12K128的RTC功能如何处理任意秒钟中断?| 已解决