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

📄 红外遥控学习开关.c

📁 红外遥控学习开关
💻 C
字号:
//遥控测试程序
#include <stdio.h>
#include <reg52.h>

sbit			g_ioRec		= P3 ^ 3;
sbit			g_ioRecLed	= P1 ^ 0;
unsigned int	g_nRecData;
unsigned char	g_cRecNum;
bit				g_bEnRead;


void Init()
{
	TMOD = 0x11;
	TH0 = 0;
	TL0 = 0;
	IE = 0x86;  //外部中断1 定时器0 允许
	TCON = 0x04;
}

//IE-----中断充许寄存器 按位寻址,地址:A8H
//B7  B6  B5  B4  B3   B2   B1   B0  
//EA  -  ET2  ES  ET1  EX1  ET0  EX0  

//IP-----中断优先级控制寄存器 按位寻址,地址位B8H
//B7  B6  B5   B4  B3   B2   B1   B0  
//-   -   PT2  PS  PT1  PX1  PT0  PX0  

//TMOD-----定时器控制寄存器 不按位寻址,地址89H
//B7   B6   B5 B4  B3    B2   B1  B0  
//GATE C/T  M1 M0  GATE  C/T  M1  M0 

//TCON-----定时器控制寄存器 按位寻址,地址位88H
//B7  B6   B5   B4   B3   B2   B1   B0  
//TF1 TR1  TF0  TR0  IE1  IT1  IE0  IT0  


//************************************************************
//外部中断0,使用寄存器组2
//遥控接收分析
void ExternINT1() interrupt 2 using 2
{
	EX1 = 0;
	TH0 = 0xFE;		//A;//11.0592
	TL0 = 0x6A;		//91;//6A;//delay 0.44ms -> 11.0592 is FE6A  10M is FE91
	TR0 = 1;
	ET0 = 1;
	g_nRecData = 0;
	g_cRecNum = 0;
	g_bEnRead = 0;
	
	g_ioRecLed = 0;
}


//****************************************************************
//定时器中断1  使用寄存器组3
void IntT1() interrupt 3 using 3
{
	unsigned char i;

	//如果不是50ms定时状态,是1.66ms的判断数据状态
	TH0 = 0XFA;//11.0592 is FA06 10M is FA99
	TL0 = 0X06;//99;//06;
	g_cRecNum++;

	if( g_cRecNum < 15 )
	{
		g_nRecData = g_nRecData << 1;
		if( ~g_ioRec )
		{
			g_nRecData++;
		}
		g_ioRecLed = g_ioRec;//灯随数据亮灭		
	}
	else if( g_cRecNum > 17 )	//完成接收数据
	{
		g_ioRecLed = 1;//灯灭
		//保存数据

		g_bEnRead = 1;
		EX0 = 1;
		g_cRecNum = 0;
		g_nRecData = 0;
	}
}



//*********************************************
//    X25045  子程序        
//*********************************************
//  X25045 的命令字
#define	WREN	06  // 允许写 
#define WRDI	04  // 禁止写
#define RDSR	05	// 读状态寄存器
#define WRSR	01  // 写状态寄存器
sbit X_CS = P1^2;
sbit X_SCK = P1^6; 
sbit X_SO =  P1^7;
sbit X_SI =  P1^1;
unsigned char  Xinbyte()
{
	unsigned char  rtn = 0;
	unsigned char  i;
	unsigned char  a1 = 0x80;	
	for( i=0; i<8; i++)
	{
		X_SCK = 1;
		X_SCK = 0;
		if(X_SI)
			 rtn=rtn | a1;
		a1 = a1>>1; 
	}
	return rtn;
}

void Xoutbyte(unsigned char  bt)
{
	unsigned char  i;
	unsigned char  ppp = 0x80;
	for( i=0; i<8; i++)
	{
		X_SCK = 0;
		if(bt & ppp) 
			X_SO = 1;
		else
			X_SO = 0;
		X_SCK = 1;
		ppp = ppp>>1;
	} 
}

unsigned char  XReadChar(unsigned int address)
{
	unsigned char  tp = 3;
	unsigned char  rtn;
	
	if( address & 0x100) tp  = 0x0b;
	X_CS = 0;
	Xoutbyte(tp);
	Xoutbyte(address);
	rtn = Xinbyte();
	X_CS = 1;
	return rtn;
}

void XWriteChar(unsigned int address,unsigned char  a1)
{	
	unsigned char  tp = 2;
	
	if( address & 0x100) tp  = 0x0a;
	X_CS = 0;
	Xoutbyte(WREN);
	X_CS = 1;
	X_CS = 0;
	Xoutbyte(tp);
	Xoutbyte(address);
	Xoutbyte(a1);
	X_CS = 1;
}

main()
{
	Init();	
	while(1)
	{
		
	}
}

⌨️ 快捷键说明

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