📄 icp.c
字号:
#include"main.h"
extern volatile uchar icp_overflow;
extern const uchar xtal;
extern volatile ulong icp_time;
ISR(SIG_INPUT_CAPTURE3)
{
static uint icp_time_old;
static uchar icp_flag=0;
switch(icp_flag)
{
case 0:
icp_flag++;
TCNT3=0;
break;
case 1:icp_time_old=ICR3;
icp_flag++;
icp_overflow=0;
break;
case 2:
if(ICR3>=icp_time_old)
icp_time=(ulong) (ICR3-icp_time_old+icp_overflow*65536);
else
icp_time=(ulong) (icp_overflow*65536+icp_time_old-ICR3);
cbi(ETIMSK,TICIE3);
cbi(ETIMSK,TOIE3);
icp_flag=0;
TCNT3=0;
break;
}
}
ISR(SIG_OVERFLOW3)
{
icp_overflow++;
}
void icp(void) //timer3 PE7--ICP
{
icp_time=0;
ulong f;
TCCR3B|=(1<<ICNC3)|(1<<CS30);
//noise canceler,falling edge trigger,no prescaler
sbi(ETIMSK,TICIE3);
//Timer3 Input Capture Interrupt Enable
sbi(ETIMSK,TOIE3);
//Timer3 Overflow Interrupt Enable
sei();
while(icp_time==0);
f=(ulong) xtal*1000*1000/icp_time;
write_dec(f);
write_data('h');
write_data('z');
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -