📄 infrared_measure.c
字号:
/******************************************/
/* 北京MCU学习之家 */
/* 采集红外输入数据的高低电平保持时间程序 */
/* 作者:白如冰 */
/* 2005年10月1日 */
/* 目标MCU:MEGA8 晶振:外部(EXT) 8MHZ */
/******************************************/
//红外接收头的引脚定义
// 1----->data-----> (PD3(int1))
// 2----->gnd
// 3----->vss
/******************************************/
#include <iom8v.h>
#include <macros.h>
#define INFR_DIR DDRD
#define INFR_PORT PORTD
#define INFR_DATA 3
unsigned int counter_buffer[100];
unsigned char flag_start,n;
/* 初始化外部中断1 */
void init_infr(void)
{
unsigned char i;
INFR_DIR&=~(1<<INFR_DATA); //PD3为输入方向
INFR_PORT|=1<<INFR_DATA; //PD3初始为高电平
MCUCR = 0x04; //int1 电平变化产生中断
GICR = 0x80; //int1 外部中断使能
TCCR1B=0;//关闭定时器T1
TCNT1=0; //初始值为0
flag_start=0;
n=0;
for(i=0;i<100;i++)
counter_buffer[i]=0;
SEI(); //全局中断使能
}
/*外部中断1 中断函数 */
#pragma interrupt_handler int1_isr:iv_INT1
void int1_isr(void)
{
if(flag_start==0)
{
TCCR1B=2;//开始计时 8分频
flag_start=1;
}
else
{
TCCR1B=0;
counter_buffer[n++]=TCNT1;
TCNT1=0;
TCCR1B=2;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -