打印
[AVR单片机]

mega16 上升沿开始计数,下降沿停止计数 ,怎么编程 ,帮忙分析一下

[复制链接]
1441|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liwei900712|  楼主 | 2013-12-24 21:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "iom16v.h"
#include "macros.h"
#include "stdio.h"

//声明定时器中断
#pragma interrupt_handler Second_Ir:9

//IO初始化
void IO_Init()
{
       
        DDRD&=~BIT(PD6);//设置输入模式
}

//定时器1-普通模式-初始化函数
void T1_Normal_Init()
{
        //TCCR1B|=BIT(2);                //分频设置为256;0x40
        TCCR1B|=BIT(ICES1); //上升沿触发
        TCNT1H=0xE0;                        //初值高八位
        TCNT1L=0xBF;                        //初值低八位
        TIMSK|=BIT(TICIE1)|BIT(TOIE1);                        //输入捕获中断使能,定时器1中断溢出使能  
        TIFR|=BIT(ICF1)|BIT(TOV1); //输入捕获标志,溢出标志
        SREG|=BIT(7);                //全局中断使能使能
}
//定时器1中断函数
void Second_Ir()
{
       
        TCNT1H=0XE0;                        //高八位重新赋值
        TCNT1L=0XBF;                        //低八位重新赋值
        t++;
        if(!(PIND&0x40))
        {
                 ppm=(t-2)*5000/1000;
                t=0;
        }
}


//主函数
void main()       
{
    unsigned int co2;
        IO_Init();
     T1_Normal_Init();
        while(1);
        }



相关帖子

沙发
airwill| | 2013-12-25 11:50 | 只看该作者
看到这个就非常怀念 51.
你的程序恐怕不能实现所要的功能.
51 的定时器有 GATE 控制, 完成楼主要的功能, 但后来的单片机都没有这个功能了.

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
qin552011373 + 6 很给力!
板凳
qin552011373| | 2013-12-26 00:23 | 只看该作者
楼主可以试一下任意电平变化都可以触发中断,这样的话你就可以有两个中断,然后判断两次中断的时间就可以咯

使用特权

评论回复
地板
cyanitefire| | 2013-12-31 21:23 | 只看该作者
对精度要求如何?信号高电平持续时间大概多长?精度要求不是特别高的话,增加一个外中断,上升沿触发后开始计数,并将外中断更改为下降沿触发,下降沿中断时读取计数值

使用特权

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

本版积分规则

9

主题

22

帖子

0

粉丝