|
/*主函数*/
#include <iom16v.h>
#include <macros.h>
#include "12864.h"
#include "delay.h"
#define uint unsigned int
#define uchar unsigned char
uint Cnt1; //第一次捕获值
uint Cnt2; //第二次捕获值
uint Cnt; //捕获差值
uchar Flag=0; //捕获次数
uchar Data[6]={0,0,0,0,0,0};//显示初值,最后一个0是结束符,方便液晶显示
void init_timer1(void) //初始化T/C1的输入捕获中断
{
DDRD=0x00;
PORTD=0xff;//设置D口为带上拉电阻输入
TCCR1A = 0;//设值为普通模式
TCCR1B |= (1 << ICNC1)|(1 << CS11);///输入捕获噪声抑制使能,下降沿触发,1/8分频
TIMSK |= (1 << TICIE1);//输入捕捉中断使能
SREG=0x80; //打开总中断
}
void hz(uint i,uchar *p) //显示处理,+48是因为液晶显示的是ASCII码
{p[4]=i%10;//个
p[3]=i%100/10;//十
p[2]=i%1000/100;//百
p[1]=i%10000/1000;//千
p[0]=i/10000;//万
}
void main()
{
uint t;
port_init();
init_timer1();
lcd_init();
lcd_clr();
while(1);
}
#pragma interrupt_handler timer1_capt:6
void timer1_capt(void)
{
Cnt2=(ICR1H<<8)+ICR1L; //cnt2存放点前捕获值
Cnt=Cnt2-Cnt1; //cnt存放两次时间差
Cnt1=Cnt2; //cnt1存放上次捕获值
Flag++;
if(Flag==2)
{
Flag=0; //清除捕获标志位
hz(Cnt,Data); //显示处理
Lcd_DisplayOnenum(1,1,Data); //显示
Cnt=0;Cnt1=0;Cnt2=0; //清除捕获值几捕获差值
}
}
我用AVR16 的T1定时器的捕获功能做测频计测频率时,不能正常工作,我的外接信号是信号发生器发出的方波,当我把频率调大时12864显示的频率减小。并且显示的频率与我给的方波的频率差别很大,这个问题我弄了好久都没解决,请高手们指点一下,谢谢了!!! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|