打印
[技术问答]

N76E003 ADC中断影响了定时器中断

[复制链接]
1138|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenhuimin12345|  楼主 | 2019-5-9 10:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
配置两个定时器,定时器0定时0.2ms  ,定时器1定时20ms,在没有写入ADC及中断之前两个定时器正常工作,但是加了ADC以后,就不能进入定时器1的中断。不懂是什么问题?求各路神仙解救~

void Timer0_Init()
{
         TIMER0_MODE1_ENABLE;
         clr_T0M;           //设置定时器0为系统时钟的12分频
         u8TH0_Tmp = (65536-TH0_INIT)/256;
   u8TL0_Tmp = (65536-TL0_INIT)%256;       
         TH0 = u8TH0_Tmp;
   TL0 = u8TL0_Tmp;
         set_ET0;                                    //开启 Timer0 中断
         set_EA;                                     //开启 总中断
   set_TR0;  
}

void Timer1_Init(void)
{
          TIMER1_MODE1_ENABLE;
          clr_T1M;
          u8TH1_Tmp = (65536-TH1_INIT)/256;
          u8TL1_Tmp = (65536-TL1_INIT)%256;
                TH1 = u8TH1_Tmp;
                TL1 = u8TL1_Tmp;
                set_ET1;               //enable Timer1 interrupt
                set_EA;  
                set_TR1;                    //Timer1 run
}


/************************************************************************************************************
*    TIMER 0 interrupt subroutine
************************************************************************************************************/
void Timer0_ISR (void) interrupt 1  //interrupt address is 0x000B  
{
   clr_TF0;//清除中断标志位
         TH0 = u8TH0_Tmp;//重装初值
   TL0 = u8TL0_Tmp;
//         Start_PWM();
         ZT_PreChCount();         
         ADCProcess();
}

void Timer1_ISR (void) interrupt 3  //interrupt address is 0x001B
{
    clr_TF1;
                TH1 = u8TH1_Tmp;
                TL1 = u8TL1_Tmp;
    PowerCnt++;
          LedCnt++;
        if(LedCnt>0x20)
        {
         LedCnt=0;
         LED_Spark_Process();
        }
          KeyCatch();
}


void ADCInit(void)
{
Enable_ADC_AIN2;
clr_ADCF; // ADCF  = 0  AD转换未完成
set_EADC;//使能ADC中断
EA = 1;
set_ADCS;        //启动AD转换
iCheckCH0=0;
LostCnt=0;
        // while(ADCF == 0);
// set_EADC;       
}

void ADC_ISR (void) interrupt 11
{
        if(ADCF)
        {
                clr_ADCF;//清除ADC转化完成标志,进行下一次转换
                set_ADCS;//当单次转换完成后,ADCS会硬件置0,需要重新使能
    ADCResult=(UINT16)(ADCRH & 3);
                ADCResult = (ADCResult << 8) | ADCRL;       
        }
}
附上自己的代码,现在调试进入不了定时器1的中断

使用特权

评论回复
沙发
座机呀| | 2019-5-9 11:34 | 只看该作者
检查一下你使能中断的时候有没有误修改别的外设的中断,追踪一下寄存器设置

使用特权

评论回复
板凳
chenhuimin12345|  楼主 | 2019-5-9 21:50 | 只看该作者
座机呀 发表于 2019-5-9 11:34
检查一下你使能中断的时候有没有误修改别的外设的中断,追踪一下寄存器设置 ...

能不能私聊一下大神帮我看一下,刚学单片机不太懂

使用特权

评论回复
地板
座机呀| | 2019-5-9 22:31 | 只看该作者
chenhuimin12345 发表于 2019-5-9 21:50
能不能私聊一下大神帮我看一下,刚学单片机不太懂

像你说的没加入ADC之前是正常的,那就仿真的时候代码放断点,单步执行看和定时器0,1相关的寄存器有没有误操作

使用特权

评论回复
5
小灵通2018| | 2019-5-9 23:25 | 只看该作者
定时器1里面是不是搞按键弄的

使用特权

评论回复
6
huangcunxiake| | 2019-5-9 23:59 | 只看该作者
中断里不要嵌套太多内容。

使用特权

评论回复
7
huangcunxiake| | 2019-5-9 23:59 | 只看该作者
只在中断里进行标志位设置就行了,在主函数执行。

使用特权

评论回复
8
QQ1099811789| | 2019-5-10 13:57 | 只看该作者
原来真香是这样滴!

使用特权

评论回复
9
643757107| | 2019-5-11 00:04 | 只看该作者
看看是卡哪儿了

使用特权

评论回复
10
643757107| | 2019-5-11 00:04 | 只看该作者
ADC能否正常执行?

使用特权

评论回复
11
zhuotuzi| | 2019-5-11 00:09 | 只看该作者
定时器中断放了个按键程序?是不是因为这个

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

0

粉丝