|
程序只能测小于580hz的外部输入信号,大于时直接TEMP=0;无耐能力有限故求助。
#include "iom128.h"
void initialize(void);
void time1_init(void);
unsigned int Fre=0,interrupt_count=0,TEMP=0;
void main(void)
{
DDRE=0XDF; //int5 输入
initialize(); //中断初始化
time1_init(); //溢出定时 初始化
SREG|=80;
do
{
Fre=TEMP+TEMP; //500ms采样 外部输入
}while(1);
}
#pragma vector=INT5_vect
__interrupt void INT5_Server(void)
{
interrupt_count+=1;
}
#pragma vector=TIMER1_OVF_vect
__interrupt void TIMER1_OVF(void)
{
SREG^=0x80; //关中断 防止此处产生中断嵌套
TEMP=interrupt_count; //保存上500ms内计数值
TCNT1 = 0xAB9F; //赋T1初值 500ms溢出一次
interrupt_count=0;
SREG|=80;
}
void initialize(void) //外部中断5(INT5)初始化
{
EIMSK=0x20; // 使用外部中断5(INT5)
EICRB=0x0c; // 两次采样上升沿中断请求(同步)
SREG|=0X80; // SREG的最高位置1--使能全局中断
}
void time1_init(void)
{
TIMSK=0x04; //T1溢出中断允许
ASSR = 0x00; //使用内部时钟
TCNT1 = 0xAB9F; //赋T1初值 500ms溢出一次
TCCR1B = 0x04; //256分频
TCCR1A = 0x00;
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|