zzqlord 发表于 2011-3-25 16:11:31

关于atmega128测信号频率的一点问题

程序只能测小于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;
}

machao 发表于 2011-4-2 11:38:39

先学习别人的代码,至少我的教材上有测频率的示例。

然后比较自己的代码,查看问题在哪里。
页: [1]
查看完整版本: 关于atmega128测信号频率的一点问题