⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 infrared_measure.c

📁 AVR 红外接收源代码,对学习红外的人很有帮助
💻 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 + -