OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1795|回复: 3

AVR输入捕获冲突

[复制链接]

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2019-4-24
在线时间
16 小时
发表于 2019-8-29 10:13:20 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2019-4-24
在线时间
16 小时
 楼主| 发表于 2019-8-29 10:13:21 | 显示全部楼层
回复

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2019-4-24
在线时间
16 小时
 楼主| 发表于 2019-8-29 10:14:04 | 显示全部楼层
我用的mega16输入捕获开始捕获的时候其他中断和主程序停止不响应,只有捕获功能一直开着。
回复

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2019-4-24
在线时间
16 小时
 楼主| 发表于 2019-8-29 10:14:49 | 显示全部楼层
void Timer1_Init(void)
{
  TCCR1A |=(1<<COM1B1)|(1<<WGM11)|(1<<WGM10);     //0B00100011 OC1A作I/O用,OC1B输出PWM
  TCCR1B |=(1<<ICNC1)|(1<<ICES1)|(1<<WGM13)|(1<<WGM12)|(1<<CS10); //0B11011001 噪声抑制,上升沿输入捕捉,快速PWM,1分频
        //TIMSK |=(1<<TICIE1);
  OCR1A = 0xffff;      //TOP=TCNT1值,TM1从0计数到TOP
  OCR1B = Min_PWM_D;     //占空比=0
}

int main(void)
{
        Port_Init();    //端口初始化
        Timer0_Init();   //TMR0初始化
        Timer1_Init();   //TMR1初始化
//
        uSF.S_Flag = 0;              //清状态共用体标志
        uTSF.T_SET_Flag=0;       //清时间设置共用体标志
//
        Interrupt_Init();   //中断初始化

        while (1)
        {
//
                if(uSF.bit.TC1_End_f==1)
                {
                        uDISP.speed=Vx/T_Num;      //转速=转速系数/T_Num  (T_Num:脉冲数)
                        uSF.bit.TC1_End_f=0;       //清IC1捕捉完成标志
                        PORTB ^=(1<<LED_Fwd);
                }
                if(uSF.bit.T_500mS_f==1)           //500mS时间到
                {
                        TIMSK |=(1<<TICIE1);        //开IC1输入捕捉中断
                        uSF.bit.T_500mS_f=0;   //清500mS时间到标志
                }
}
}



/***********中断程序************************/
//外部中断0
/*ISR(INT0_vect)
{
eeprom_CiShu_data_write ();  //掉电时“次数”数据写入(上电时读出)
}*/

//timer0 溢出中断(设置20mS中断一次,能使LCD更新等操作正常进行)
ISR(TIMER0_OVF_vect)
{  
        TCNT0 = T0_INIT;          //T0初值
        T0_count++;

        if(T0_count>=25)
        {
                mS_count++;               //500mS+1
                uSF.bit.T_500mS_f=1;        //置500mS定时到标志
                T0_count=0;
                if(mS_count>=2)
                {
                        second++;        //秒+1
                        re_sec++;          //秒记录+1
                        mS_count=0;
                        uSF.S_Flag ^=0b00000001;       //等秒取反

                        if(uSF.bit.T_XR_f)      ////////////////////////////////////////
                        {
                                PORTB |=(1<<LED_Fwd);   //正转LED亮///////////////////////////////////
                        }
                        else
                        {
                                PORTB &=(0<<LED_Fwd);   //正转LED亮///////////////////////////////////
                        }
                }
        }
//LCD_Set_Flash();              //设置闪烁
//LCD_Display_Update();         //LCD上8*16数字更新
}


//timer1 溢出中断(溢出次数记录)
ISR(TIMER1_OVF_vect)
{
T1_count++;      //TM1中断计数+1
/*if(uSF.bit.T_XR_f)      ////////////////////////////////////////
PORTB |=(1<<LED_Rev);   //正转LED亮///////////////////////////////////
else PORTB &=(0<<LED_Rev);*/
}


//IC1 输入捕获中断(测量周期脉冲数)
ISR(TIMER1_CAPT_vect)
{
        static uint IC1Temp1 = 0;    //第一个IC1捕捉值
        static uint IC1Temp2 = 0;    //第二个IC1捕捉值

        if(uSF.bit.IC1_1st_f == 0)     //IC1首次捕捉?
        {
                IC1Temp1 = ICR1;              //存第1次事件
                T1_count=0;               //清TM1中断计数
                uSF.bit.IC1_1st_f =1;     //置IC1首次捕捉标志
        }
        else
        {                       //第二次事件
                TIMSK &=(0<<TICIE1);      //IC1输入捕捉中断禁止
                IC1Temp2 = ICR1;              //存第2次事件
                T_Num = (IC1Temp2-IC1Temp1) + T1_count*65536;
                uSF.bit.IC1_1st_f =0;     //清IC1首次捕捉标志
                uSF.bit.TC1_End_f=1;       //置IC1捕捉完成标志
        }
}
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 04:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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