找回密码
 立即注册
查看: 819|回复: 15

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

[复制链接]

4

主题

3

回帖

25

积分

新手上路

积分
25
发表于 2024-6-26 15:24:21 | 显示全部楼层 |阅读模式
stc8h8k64u用RTC显示时分秒是否会影响其他中断(如T1 T0和INT0)的使用,我写程序似乎会这样,T0中断好像会运行一会,然后就用不了了

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-04 00:16:27
已绑定手机

19

主题

3191

回帖

4930

积分

论坛元老

积分
4930
发表于 2024-6-26 15:34:32 | 显示全部楼层
这个是独立的,应该不会影响T0
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-6-26 15:39:11 | 显示全部楼层
应该不是片子的问题,,正确使用中断,你所说的中断我都一块用过,没有问题的。。可能是中断服务函数里干的事情多了吧。中断里的东西尽量少,在主函数循环中处理
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

4

主题

3

回帖

25

积分

新手上路

积分
25
发表于 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会由于设置没完成, 停止计数, 唤醒后才继续完成设置并继续计数.*/
}
回复 支持 反对

使用道具 举报 送花

4

主题

3

回帖

25

积分

新手上路

积分
25
发表于 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会由于设置没完成, 停止计数, 唤醒后才继续完成设置并继续计数.*/
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-6-26 15:50:05 | 显示全部楼层
RTC中断服务函数呢?
如果这个是测试程序 就把整个工程发上来,,竹筒倒豆子看着太累了。。

如果是你产品的代码,就把代码精简到出现你上述状况的最简能编译通过的代码。
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-06-28 16:40:40

0

主题

7

回帖

42

积分

新手上路

积分
42
发表于 2024-6-28 16:36:51 | 显示全部楼层
_奶*** 发表于 2024-6-26 15:50
RTC中断服务函数呢?
如果这个是测试程序 就把整个工程发上来,,竹筒倒豆子看着太累了。。

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

ee.zip

391.13 KB, 下载次数: 92

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-06-28 16:40:40

0

主题

7

回帖

42

积分

新手上路

积分
42
发表于 2024-6-28 16:38:31 | 显示全部楼层
_奶*** 发表于 2024-6-26 15:50
RTC中断服务函数呢?
如果这个是测试程序 就把整个工程发上来,,竹筒倒豆子看着太累了。。

为了方便,我直接将RTC_config()和void RTC_Isr() interrupt 13放到了main函数中
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-6-28 17:03:04 | 显示全部楼层
dz*** 发表于 2024-6-28 16:38
为了方便,我直接将RTC_config()和void RTC_Isr() interrupt 13放到了main函数中

你这个用了中断13 但是没有加irq.asm 文件,,你光是在中断13上写了代码
但是没有程序支持从RTC中断跳转到13号中断的,,相当于没有写中断服务函数
截图202406281659463281.jpg



参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-6-28 17:04:13 | 显示全部楼层
dz*** 发表于 2024-6-28 16:36
我也是这个问题,初始化中有RTC_config(),然后其他中断不能使用,串口中断也进入不了。 ...



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



手册的附录里面有介绍,,论坛里搜一搜也能知道,
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-4 10:19 , Processed in 0.213418 second(s), 116 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表