link123 发表于 2024-6-25 11:58:17

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

我开启了ADC中断后,发现定时器计时变大了,比之前快了1.4倍,用的是芯片内部的晶振,我查回ADC和定时器初始化的代码,也没有什么能够影响晶振频率的

晓飛飛 发表于 2024-6-25 13:39:22

使用了定时器的手动重载方式吗?

xxxevery 发表于 2024-6-25 14:17:12

你是怎么用定时器的,中断还是查询,我想可能是ADC中断程序影响了定时器值

link123 发表于 2024-6-25 14:43:04

晓飛飛 发表于 2024-6-25 13:39
使用了定时器的手动重载方式吗?

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

link123 发表于 2024-6-25 14:43:34

xxxevery 发表于 2024-6-25 14:17
你是怎么用定时器的,中断还是查询,我想可能是ADC中断程序影响了定时器值 ...

我定时器中断优先级比ADC中断优先级高,应该不会

link123 发表于 2024-6-25 14:44:33

我猜测有可能是ADC配置时,要配置系统分频,有可能是那一步影响,正在查手册第六章内容

晓飛飛 发表于 2024-6-25 15:23:11

link123 发表于 2024-6-25 14:43
对的,我关闭了ADC相关的函数后,定时正常

建议使用定时器自动重装方式,这样其它中断就不太会影响定时器的周期了,另外定时器中断和ADC中断中的代码不要占用太长的周期才能互不影响。

_奶咖君_ 发表于 2024-6-25 15:49:04

你这个什么代码都没有提供,,,坛友们也就只能说说方法论的东西了。。有点感觉像是你的中断优先级没有配置正确

soma 发表于 2024-6-25 16:40:57

会不会是中断挂中断定时器中断被影响了。

link123 发表于 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的数值

}
不好意思,没上传代码
这是我的代码,都是按照默认的优先级
页: [1] 2
查看完整版本: STC8H,我设置ADC之后,发现原来的定时器计时变大了