yao 发表于 2024-6-26 15:24:21

stc8h8k64u用RTC是否会影响其他中断(如T1和INT0)的使用,我写程序似乎会这样

stc8h8k64u用RTC显示时分秒是否会影响其他中断(如T1 T0和INT0)的使用,我写程序似乎会这样,T0中断好像会运行一会,然后就用不了了

soma 发表于 2024-6-26 15:34:32

这个是独立的,应该不会影响T0

_奶咖君_ 发表于 2024-6-26 15:39:11

应该不是片子的问题,,正确使用中断,你所说的中断我都一块用过,没有问题的。。可能是中断服务函数里干的事情多了吧。中断里的东西尽量少,在主函数循环中处理

yao 发表于 2024-6-26 15:41:44

我把这个函数注释掉之后中断能正常用,是因为这个里面有什么影响吗?

void RTC_config(void)
{
/*
    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秒

    //STC8H8K64U B版本芯片使用内部32K时钟,休眠无法唤醒
   // IRC32KCR = 0x80;   //启动内部32K晶振.
    //while (!(IRC32KCR & 1));//等待时钟稳定
    //RTCCFG = 0x03;    //选择内部32K时钟源,触发RTC寄存器初始化

    X32KCR = 0x80 + 0x40;   //启动外部32K晶振, 低增益+0x00, 高增益+0x40.
    while (!(X32KCR & 1));//等待时钟稳定
    RTCCFG = 0x01;    //选择外部32K时钟源,触发RTC寄存器初始化

    RTCIF = 0x00;   //清中断标志
    RTCIEN = 0x88;    //中断使能, 0x80:闹钟中断, 0x40:日中断, 0x20:小时中断, 0x10:分钟中断, 0x08:秒中断, 0x04:1/2秒中断, 0x02:1/8秒中断, 0x01:1/32秒中断
    RTCCR = 0x01;   //RTC使能

    while(RTCCFG & 0x01);        //等待初始化完成,需要在 "RTC使能" 之后判断.
    //设置RTC时间需要32768Hz的1个周期时间,大约30.5us. 由于同步, 所以实际等待时间是0~30.5us.
    //如果不等待设置完成就睡眠, 则RTC会由于设置没完成, 停止计数, 唤醒后才继续完成设置并继续计数.*/
}

yao 发表于 2024-6-26 15:43:29

_奶咖君_ 发表于 2024-6-26 15:39
应该不是片子的问题,,正确使用中断,你所说的中断我都一块用过,没有问题的。。可能是中断服务函数里干的 ...

我把这个函数注释掉之后中断能正常用,是因为这个里面有什么影响吗?

void RTC_config(void)
{
/*
    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秒

    //STC8H8K64U B版本芯片使用内部32K时钟,休眠无法唤醒
   // IRC32KCR = 0x80;   //启动内部32K晶振.
    //while (!(IRC32KCR & 1));//等待时钟稳定
    //RTCCFG = 0x03;    //选择内部32K时钟源,触发RTC寄存器初始化

    X32KCR = 0x80 + 0x40;   //启动外部32K晶振, 低增益+0x00, 高增益+0x40.
    while (!(X32KCR & 1));//等待时钟稳定
    RTCCFG = 0x01;    //选择外部32K时钟源,触发RTC寄存器初始化

    RTCIF = 0x00;   //清中断标志
    RTCIEN = 0x88;    //中断使能, 0x80:闹钟中断, 0x40:日中断, 0x20:小时中断, 0x10:分钟中断, 0x08:秒中断, 0x04:1/2秒中断, 0x02:1/8秒中断, 0x01:1/32秒中断
    RTCCR = 0x01;   //RTC使能

    while(RTCCFG & 0x01);      //等待初始化完成,需要在 "RTC使能" 之后判断.
    //设置RTC时间需要32768Hz的1个周期时间,大约30.5us. 由于同步, 所以实际等待时间是0~30.5us.
    //如果不等待设置完成就睡眠, 则RTC会由于设置没完成, 停止计数, 唤醒后才继续完成设置并继续计数.*/
}

_奶咖君_ 发表于 2024-6-26 15:50:05

RTC中断服务函数呢?
如果这个是测试程序 就把整个工程发上来,,竹筒倒豆子看着太累了。。

如果是你产品的代码,就把代码精简到出现你上述状况的最简能编译通过的代码。

dzh 发表于 2024-6-28 16:36:51

_奶咖君_ 发表于 2024-6-26 15:50
RTC中断服务函数呢?
如果这个是测试程序 就把整个工程发上来,,竹筒倒豆子看着太累了。。


我也是这个问题,初始化中有RTC_config(),然后其他中断不能使用,串口中断也进入不了。

dzh 发表于 2024-6-28 16:38:31

_奶咖君_ 发表于 2024-6-26 15:50
RTC中断服务函数呢?
如果这个是测试程序 就把整个工程发上来,,竹筒倒豆子看着太累了。。



为了方便,我直接将RTC_config()和void RTC_Isr() interrupt 13放到了main函数中

_奶咖君_ 发表于 2024-6-28 17:03:04

dzh 发表于 2024-6-28 16:38
为了方便,我直接将RTC_config()和void RTC_Isr() interrupt 13放到了main函数中
你这个用了中断13 但是没有加irq.asm 文件,,你光是在中断13上写了代码
但是没有程序支持从RTC中断跳转到13号中断的,,相当于没有写中断服务函数




_奶咖君_ 发表于 2024-6-28 17:04:13

dzh 发表于 2024-6-28 16:36
我也是这个问题,初始化中有RTC_config(),然后其他中断不能使用,串口中断也进入不了。 ...



关注一下如何借用13号中断进行中转



手册的附录里面有介绍,,论坛里搜一搜也能知道,
页: [1] 2
查看完整版本: stc8h8k64u用RTC是否会影响其他中断(如T1和INT0)的使用,我写程序似乎会这样