用51单片机中断法解码pt2262无线遥控器
/***********************************************
pt2262解码软件修正版
使用了位操作代替前版本的位寻址,使用三个字节变量存储获取的数据,便于以后将地址和数据进行操作
增加了两次数据比对的功能,降低误码的干扰
2007.8.24
接受模块的信号输出端接INT0中断口。。。
P1.0,p1.1上接LED显示接受的情况。。。
用pt2262无线遥控器解码测试通过。。。
注意:使用的是4M的晶振以减少mcu对接受模块的干扰。。。
程序开发:http://www.51hei.com
运行平台:51hei单片机开发板+315m无线模块,用杜邦线连接.
使用时可能要改变检测的特征值,视遥控的中心频率而定,可以通过pt2262上的电阻改变*********************************************/
#include reg52.h>
unsigned int tmp,t1=0;
unsigned char i9=0,t2;
char *dataTMP;
unsigned char dataTMP0,dataTMP1,dataTMP2,datacheck;
unsigned char bdata oeCON;
sbit UD0=oeCON^0;
sbit UD1=oeCON^1;
sbit OC0=oeCON^2;
sbit OC1=oeCON^3;
sbit p10=P1^0;
sbit p11=P1^1;
sbit p32=P3^2;
bit flagF=1,press;
void up_down();
void open_close();
void delay(unsigned char);
void main()
{IT0=1;
EX0=1;
TMOD=0x09;
EA=1;
TR0=1;
P3=0xff;
UD0=1;
UD1=0;
OC0=1;
OC1=0;
while(1)
{p10=p32;
if(datacheck==0xff)
{
/**********编码解析后执行代码*******************
***********************/
}
}
/*************************************************************
中断服务程序
通过探头flagF的值判断是否接收到sync信号
接收到的数据存入dataTMP的三个变量中
连续按键的确认:
等待i9的值变为0;
延时
再次检测i9的值是否为0;
是0则认为按键中止。
*************************************************************/
int0() interrupt 0
{
tmp=TH0*256+TL0;
TH0=0x0;
TL0=0x0;
if(flagF)
{
if(tmp>1295tmp1300)
{p11=~p11;flagF=0;}
}
else
{
if(i99) dataTMP=dataTMP0;
else
{dataTMP=i917?(dataTMP1):(dataTMP2);}
(*dataTMP)=1;
if(tmp>100tmp150)
(*dataTMP)=(*dataTMP)|0x01;
else if(!(tmp>10tmp100))
{
flagF=1;
i9=0;
}
if(i9==24)
{
if(datacheck!=dataTMP2)
datacheck=dataTMP2;
else
datacheck=0xff;/*按键确认*/
}
i9++;
}
}
/*******************
延时函数
时间:1-2s
*******************/
void delay(unsigned char k)
{unsigned char i;
for(i=0;ik;i++)
for(tmp=0;tmp10300;tmp++);
}
- 关于RTX51 TINY的分析与探讨(05-30)
- 浅析8051模块化编程技巧(05-28)
- 基于DSP和单片机通信的液晶显示设计方案(07-20)
- 锁相环控制及初始化简析(08-27)
- 基于MSP430自动胀管控制器的研究(09-07)
- 嵌入式C实现延时程序的不同变量的区别(03-01)