×
单片机 > 单片机程序设计 > 详情

用51单片机中断法解码pt2262无线遥控器

发布时间:2020-05-28 发布时间:
|

/***********************************************
pt2262解码软件修正版
使用了位操作代替前版本的位寻址,使用三个字节变量存储获取的数据,便于以后将地址和数据进行操作
增加了两次数据比对的功能,降低误码的干扰
2007.8.24
接受模块的信号输出端接INT0中断口。。。
P1.0,p1.1上接LED显示接受的情况。。。
用pt2262无线遥控器解码测试通过。。。
注意:使用的是4M的晶振以减少mcu对接受模块的干扰。。。
程序开发:http://www.51hei.com
运行平台:51hei单片机开发板+315m无线模块,用杜邦线连接.
使用时可能要改变检测的特征值,视遥控的中心频率而定,可以通过pt2262上的电阻改变*********************************************/

#include
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>1295&&tmp<1300)
  {p11=~p11;flagF=0;}
 }
 else
 { 
   if(i9<9) dataTMP=&dataTMP0;
            else
   {dataTMP=i9<17?(&dataTMP1):(&dataTMP2);}
   (*dataTMP)<<=1;
  if(tmp>100&&tmp<150)
   (*dataTMP)=(*dataTMP)|0x01;
  else if(!(tmp>10&&tmp<100))
   {
   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;ifor(tmp=0;tmp<10300;tmp++);  
}

关键字:51单片机  中断法  pt2262  无线遥控器

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向