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

📄 ir.c

📁 程序接收红外发射过来的数据
💻 C
字号:
//-----------------------------------------------------------------------------
// 版权归新华龙电子公司所有
//-----------------------------------------------------------------------------
//
//文件名:	IR.c
//
//编写人:	LC
//
//编写时间:2005/03/10
//
//目标器件: C8051F02x
//
//编译工具: Silicon Laboratories IDE
//
//程序说明:	此程序接收红外发射过来的数据,接收解码后由CPU读取,程序运行前将S2
//			都拨到ON.J17短接第一和第二脚。	


//------------------------------------------------------------------------------------
// 头文件包含
//------------------------------------------------------------------------------------
#include <c8051f020.h>          /*SFR定义*/
#include <intrins.h>

//------------------------------------------------------------------------------------
// Global CONSTANTS
//------------------------------------------------------------------------------------
#define DataPort	0x8400		/*红外数据接收口*/

sbit BUZ = P3^5;
unsigned char ReadFlag;			/*读红外数据标志*/


//------------------------------------------------------------------------------------
// Function PROTOTYPES
//------------------------------------------------------------------------------------
void PORT_Init (void);

/***************************************************************************************
函数名称:	void sleep_ms(WORD count)
功能描述:	延时
输入:		WORD count(所要延时的长度)
输出:		无
全局变量:	无
调用模块:	_nop_()
***************************************************************************************/
void sleep_ms(unsigned int count)
{
  unsigned char ii,jj;
  for(ii=0;ii<count;ii++)
    {
      for(jj=0;jj<250;jj++)
	  _nop_();			
    }	
}


/***************************************************************************************
函数名称:	void INITEXINT67(void)
功能描述:	初始化外部中断6
输入:		无
输出:		无
全局变量:	EIE2
调用模块:	无
***************************************************************************************/
void INITEXINT67(void)
{
	EIE2 |= 0x10;			/*允许外部中断6*/
}


/***************************************************************************************
函数名称:	void INT6_ISR(void) interrupt 18
功能描述:	外部中断6的中断服务程序
输入:		无
输出:		无
全局变量:	P3IF
			ReadFlag:	读取红外数据标志
调用模块:	无
***************************************************************************************/
void INT6_ISR(void) interrupt 18
{
	P3IF &= ~0x40;			/*清外部中断6标志*/
	ReadFlag = 0x01;		/*置允许读标志*/
}


//------------------------------------------------------------------------------------
// MAIN Routine
//------------------------------------------------------------------------------------
void main (void) {
   	unsigned char ReadData,IRData;
	unsigned char xdata *idata Pointir;
	/*无效看门狗*/
   	WDTCN = 0xde;
   	WDTCN = 0xad;
	PORT_Init();							/*输入/输出口初始化*/
	INITEXINT67();							/*初始化外部中断6*/
	EA=1;									/*开总中断*/
	ReadFlag=0;
	while(1){
		while(ReadFlag==0x00);				/*是否允许读红外数据*/
		Pointir=DataPort;
		ReadData=*Pointir;					/*读红外数据*/
		if((ReadData&0x80)==0x00) continue;	/*是否接到红外数据*/
		IRData = ReadData &0x0f;			/*保存收到的红外数据*/
		BUZ = 0;							/*蜂鸣器响*/
		sleep_ms(250);
		BUZ = 1;							/*蜂鸣器灭*/
		_nop_();
		do{
			ReadData = *Pointir;
		}while((ReadData&0x80)==0x80);		/*上次红外中断是否结束*/
		_nop_();
	}
	_nop_();
}


/***************************************************************************************
函数名称:	void PORT_Init(void)
功能描述:	配置交叉开关和输入/输出口
输入:		无
输出:		无
全局变量:	XBR2,P74OUT,EMI0CF,EMI0TC,P3MDOUT
调用模块:	无
***************************************************************************************/
//------------------------------------------------------------------------------------
// PORT_Init
//------------------------------------------------------------------------------------
//
// Configure the Crossbar and GPIO ports
//
void PORT_Init (void)
{
   XBR2    = 0x40;      /*使能交叉开关和弱上拉*/
   P74OUT |= 0x0f;      /*使能P4~P7推挽输出*/
   EMI0CF |= 0x2c;		/*EMIF工作在地址/数据复用方式,只用外部存储器,ALE高/低脉宽占1个SYSCLK周期*/
   EMI0TC |= 0x6c;		/*地址建立/保持时间占0个SYSCLK周期,/WR和/RD占12个SYSCLK周期*/
   P3MDOUT |= 0x00;     /*使能P3.5推挽输出*/
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -