找回密码
 立即注册
查看: 771|回复: 12

STC8H,我设置ADC之后,发现原来的定时器计时变大了

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-07-11 15:57:13

4

主题

16

回帖

84

积分

注册会员

积分
84
发表于 2024-6-25 11:58:17 | 显示全部楼层 |阅读模式
我开启了ADC中断后,发现定时器计时变大了,比之前快了1.4倍,用的是芯片内部的晶振,我查回ADC和定时器初始化的代码,也没有什么能够影响晶振频率的
回复

使用道具 举报 送花

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

34

主题

2096

回帖

2210

积分

荣誉版主

积分
2210
发表于 2024-6-25 13:39:22 | 显示全部楼层
使用了定时器的手动重载方式吗?
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-05-02 23:40:52

0

主题

336

回帖

1494

积分

金牌会员

积分
1494
发表于 2024-6-25 14:17:12 | 显示全部楼层
你是怎么用定时器的,中断还是查询,我想可能是ADC中断程序影响了定时器值
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-07-11 15:57:13

4

主题

16

回帖

84

积分

注册会员

积分
84
发表于 2024-6-25 14:43:04 | 显示全部楼层
晓*** 发表于 2024-6-25 13:39
使用了定时器的手动重载方式吗?

对的,我关闭了ADC相关的函数后,定时正常

点评

建议使用定时器自动重装方式,这样其它中断就不太会影响定时器的周期了,另外定时器中断和ADC中断中的代码不要占用太长的周期才能互不影响。  详情 回复 发表于 2024-6-25 15:23
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-07-11 15:57:13

4

主题

16

回帖

84

积分

注册会员

积分
84
发表于 2024-6-25 14:43:34 | 显示全部楼层
xxxe*** 发表于 2024-6-25 14:17
你是怎么用定时器的,中断还是查询,我想可能是ADC中断程序影响了定时器值 ...

我定时器中断优先级比ADC中断优先级高,应该不会
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-07-11 15:57:13

4

主题

16

回帖

84

积分

注册会员

积分
84
发表于 2024-6-25 14:44:33 | 显示全部楼层
我猜测有可能是ADC配置时,要配置系统分频,有可能是那一步影响,正在查手册第六章内容
回复 支持 反对

使用道具 举报 送花

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

34

主题

2096

回帖

2210

积分

荣誉版主

积分
2210
发表于 2024-6-25 15:23:11 | 显示全部楼层
link*** 发表于 2024-6-25 14:43
对的,我关闭了ADC相关的函数后,定时正常

建议使用定时器自动重装方式,这样其它中断就不太会影响定时器的周期了,另外定时器中断和ADC中断中的代码不要占用太长的周期才能互不影响。
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

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

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-6-25 15:49:04 | 显示全部楼层
你这个什么代码都没有提供,,,坛友们也就只能说说方法论的东西了。。有点感觉像是你的中断优先级没有配置正确
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

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

19

主题

3191

回帖

4930

积分

论坛元老

积分
4930
发表于 2024-6-25 16:40:57 来自手机 | 显示全部楼层
会不会是中断挂中断定时器中断被影响了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-07-11 15:57:13

4

主题

16

回帖

84

积分

注册会员

积分
84
发表于 2024-6-26 09:04:23 | 显示全部楼层
_奶*** 发表于 2024-6-25 15:49
你这个什么代码都没有提供,,,坛友们也就只能说说方法论的东西了。。有点感觉像是你的中断优先级没有配置 ...

void Timer0Init(void)        //50毫秒@12.000MHz
{
        AUXR &=0x7F;  //定时器时钟12T模式
        TMOD &= 0xF0;    //设置定时器模式
        TMOD |= 0x01;        //设置定时器模式
        TL0 = 0xB0;        //设置定时器初始值
        TH0 = 0x3C;        //设置定时器初始值
        TF0 = 0;        //清除TF0标志
        ET0 = 1;
        TR0=1;

}


void timer0_ISR(void)interrupt 1
{
        timerCnt++;
        if(timerCnt >= 20)//20次50ms中断,即1S时间到
        {
                timerCnt = 0;
                sec++;
                sign++;
        ADC_CONTR |= 0x40;           //继续AD转换

        }

        TL0 = 0xB0;        //设置定时器初始值
        TH0 = 0x3C;        //设置定时器初始值
}        

void ADC_Init(void)
{
        P1M0=0x00;                 //设置P10为高阻输入
        P1M1=0x01;

           ADCTIM = 0x3F;                  //设置ADC内部时序
        ADCCFG = 0x2F;                  //设置ADC时钟为系统时钟,数据右对齐
    ADC_CONTR = 0x80;    //使能ADC模块
        EADC = 1;                          //使能ADC中断
    ADC_CONTR |= 0x40;   //启动AD转换
}

void ADC_ISR() interrupt 5
{
    ADC_CONTR &= ~0x20;          //清中断标志
        adc_val = (ADC_RES << 8) + ADC_RESL;   //计算adc的数值

}
不好意思,没上传代码
这是我的代码,都是按照默认的优先级
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-4 04:09 , Processed in 0.162900 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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