OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...

查看: 3615|回复: 3

求救,ATMEGA169捕捉测速不能清零

[复制链接]

  离线 

5

主题

7

帖子

0

精华

新手入门

积分
40
金钱
40
注册时间
2014-3-11
在线时间
5 小时
发表于 2018-1-20 12:27:55 | 显示全部楼层 |阅读模式
20金钱
外部时钟8M,捕捉中断T1采用8分频,这样每个时钟周期为8us,一个65535记录的最长时间为524280us,定时器0和定时器2用于显示
现在高转速还有低转速都能正常显示,但当转速没有的时候,不能清零,我也是初学者,弄了好几天了,求教各位大神,帮帮忙。
//ICPC1捕捉中断的时候,T1的初始化
void tc1_init()
{
                 TCCR1B=0X43;//64分频,
                 TIMSK1=0X21;
                 SREG|=0X80;
               
}

#pragma interrupt_handler TC1_yichu:10  //T/C1溢出中断   
void TC1_yichu()
{
          ov_counter++;
          
}
#pragma interrupt_handler TC1_buzhuo:7  //T/C1捕捉中断    发动机转速  
void TC1_buzhuo()
{
          if(icp_n==1)  //测量一个信号的时间
          {        
                        falling_edge=ICR1L;
                        temp=ICR1H;
                        falling_edge|=temp<<8;
                       
                        TCNT1H=0;
                        TCNT1L=0;
                        buhuobiaozhiwei=1;
                       
                
                        TIMSK1=0X00;           //这个必须要,不是时间就是乱的               
          }
          else if(icp_n==0)
      {
                        rising_edge=ICR1L;
                        temp=ICR1H;
                        rising_edge|=temp<<8;   //上升沿的时间
          }
          icp_n++;
       
}

void T2_init()
{
                 TCCR2A=0X0C;  //外部时钟 ,64分频,CTC模式  8M/64=125khz
                 TCNT2=0X00;
                 //OCR2A=0X63;    //OCR2A=0X63(99),(99+1)/1000=0.1MS
                OCR2A=0XF9;    //2MS
                 TIMSK2|=0X02;
}

#pragma interrupt_handler t2:5     
void t2()
{                           
         T2_yichu=1;
         SEI();// 开中断,允许中断嵌套,T/C0中断可打断该中断服务       
        display();                                          
}

/////////////主函数////////////////////
void main()
{

                 DDRD &=~(1<<PD0);  //方向输?
                 PORTD|=BIT(0);  //方向输?
                 tc1_init();
                 T2_init();
                 IO_init();         
                 uart_init(9600);
                 SREG|=BIT(7);                        //全局中断开放

                 while(1)
                 {               
                          if(buhuobiaozhiwei)   //完成一次测量
                          {
                                       
                                        if(falling_edge >=rising_edge)
                                        {
                                             pulse_clocks = (ulong)falling_edge -(ulong)rising_edge;
                                             
                                        }
                                        else
                                        {
                                             pulse_clocks = (ulong)falling_edge -(ulong)rising_edge+(ulong)ov_counter*65535*8;

                                        }
                                       
                                        pulse_clocks=pulse_clocks*8;
                                        fadongjizhuansu=60000000/pulse_clocks;                                       
                                fadongjizhuansu_TXB=fadongjizhuansu;
                                       
       
                                        icp_n=0;       
                                        TIFR1=0X21;
                                        TIMSK1=0X21;       
                                        ov_counter=0;       
                                    buhuobiaozhiwei=0;
                                    if(T2_yichu)//显示
                                    {
                                         freq_to_disbuff();
                                             T2_yichu=0;
                                          
                                    }
                          }
                         
                       
                       
                         
                          caiji_data();
                          uart_TXB();
                               
                          delay_MS(100);
       
                 }
}

回复

使用道具 举报

  离线 

501

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
130074
金钱
130074
注册时间
2010-12-1
在线时间
1173 小时
发表于 2018-1-21 00:43:03 | 显示全部楼层
帮顶
回复

使用道具 举报

  离线 

1

主题

3

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-8-3
在线时间
4 小时
发表于 2018-3-9 10:25:41 | 显示全部楼层
你这里每次的通过串口发送显示数据是基于你必须触发了检测到信号才会执行,而当你没有转速的时候,你这个buhuobiaozhiwei是一直为0的,当然也就不会清零
回复

使用道具 举报

  离线 

1

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2018-5-26
在线时间
6 小时
发表于 2018-6-14 16:09:59 | 显示全部楼层
顶顶更健康
ABB定位器www.chinaabb-positio.com
回复

使用道具 举报

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

本版积分规则




关闭

"原子哥”推荐上一条 /1 下一条

QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-7-23 19:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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