📄 红外遥控学习开关.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 + -