📄 dx_rf.c
字号:
#include <reg51.h> /* define 8051 registers */
//用外部中断判断脉冲长度,最后一位不收
//Jam_kiss根据zizzfish大虾的提示更改后的遥控接收程序
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
sbit rmt = P3^2;
bit rf_end; //用以标志遥控器已经接收完毕
bit rf_ax; //遥控已经有键按下标示位
unsigned char time100ms,time10ms;
unsigned char count_bit; //用以计数8位数据计数,>8表示完
unsigned char count_byte; //用以计数遥控器4BYTE计数,>4表示完
bdata unsigned char rf_key[4]; //用以保存遥控器接收数据的保存,前2字节为地址,后2字节为数据
//sbit rf_bcw_h = rf_key[3]^7; //用以招收数据用与 rf_key[3]
//以下为遥控接收程序
void rf_zx()
{
//遥控功能执行程序
}
bit rf_comp()
{
bit add_comp=0;
if ((((rf_key[2] ^ rf_key[3])|0x80)==0x0ff)&&(rf_key[0]==0x02)&&(rf_key[0] ^ rf_key[1]==0x0ff))//比较接收的数据是否正确,
{ add_comp=1; }
return(add_comp);
}
void rf_lf()
{
//遥控连发功能程序
}
void rf_cl(bit rec_data)
{
uchar temp;
rf_key[3]>>=1;
temp=temp|(uchar)(rec_data);
temp<<=7;
rf_key[3]|=temp;
if((count_byte==3)&&(count_bit==6))
{count_bit++;rf_end=1;rf_key[3]>>=1;}
if((++count_bit)==8) //是否一个字节读完
{
count_bit=0;
rf_key[count_byte]=rf_key[3];//保存数据
if((++count_byte)==4) //判断是否读完4个字节数据
{
if(rf_comp()==1) //判断是否招收数据
{
time100ms=0;
rf_ax=1; //设置有键按下标志
rf_zx();
}
}
}
}
//120--30.9ms 连发占空脉冲
//52---13.5ms 头脉冲
//44.9--11.5ms 连发头脉冲
//8.75--2.24ms 1脉冲
//4.3--1.12ms 0脉冲
void rf()
{
if(TH1<100)
{
if(TH1>50){count_bit=0;count_byte=0;}
else if((TH1>40))
{
if(rf_ax==1)
{
time100ms=0;
rf_lf();
}
} //连发头脉冲,调用连发处理程序
else if(TH1>5)
{rf_cl(1);}//遥控1值保存
else if(TH1>1)
{rf_cl(0);}//遥控0保存
}
}
void ex0() interrupt 0
{
TR1=0;
if(rf_end==1)
{rf_end=0;}
else
{
rf();
TH1=TL1=0;
TR1=1;
}
}
void scan() interrupt 1 //定时器中断为200US
{
ET0=0;
if (time10ms<50)//50*200us
{
time10ms++;
}
else
{
time10ms=0;
if(rf_ax==1)
{
if(++time100ms>11)//; //1140ms遥控用以计数连发脉冲时间有效接收时间
{
rf_ax=0;
TH1=TL1=0;
TR1=0;
}
}
}
ET0=1;
}/*******************************************************/
void main()
{
TMOD=0x12; //设置定时器1为模式1,定时器0为模式2
TH0=TL0=256-200; //100us //改为200
EA=1;
EX0=1;
PX0=1;
IT0=1;
ET0=1;
TR0=1;
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -