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

📄 2262test.txt

📁 用89S52开发的解码2262程序。C语言编写
💻 TXT
字号:
#include<reg52.h>
#define uchar unsigned char
void display(); 
void delay_1s(uchar); 
bit  T0Action;
bit  Action;
bit  RECEIVE;  //接收标志
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;

sbit P1_7=P1^7;   //接收脚
sbit P3_5=P3^5;  //发光二极管
sfr AUXR  =0x8E;
sfr P1M0  =0x91;
sfr P1M1  =0x92;
sfr P3M0  =0xb1;
sfr P3M1  =0xb2;


void main()
{
   uchar i;
 uchar temp,data0,data1,counttime;
 unsigned int time,time1,time2;
 //  AUXR=0x80;          //定时器0不分频
 T0Action=0;
 RECEIVE=0;    //接收标志位
 Action=0;
    TMOD = 0x01;        // 定时器0 工作方式1
 TH0=0x00;
 TL0=0x00;
 P1_0=0;
 P1_1=0;
 P1_2=0;
 P1_3=0;
 P3_5=0;
 while(1)               
 {
   do{}while(P1_7==1);
   if((P1_7==0) && (T0Action==0))      //等待低电平,低电平开始记时
  {
   TR0=0;
   TH0=0x00;
    TL0=0x00;
   TF0=0;
   TR0=1;
   T0Action=1;
   while(1)
   {
    if((P1_7==1) && (T0Action==1))
    {
     TR0=0;
     time=TH0*256+TL0;     //记下低电平宽度时间
     T0Action=0;
     break;
    }
   }
  }
  if((time>9000) && (time<12000))            //检测同步码约11ms
  {
   counttime=0;
      data0=0;
      data1=0;
   time=0;
   RECEIVE=1;    //检测到同步码时 置标志位 RECEIVE=1
   P3_5=1;                 //绿发光二极管灯亮(调试用)
  }
  if(RECEIVE==1)                    //检测到同步码后开始解码
  {
   RECEIVE=0;
   while(1)
   {
   L1:do{}while(P1_7==1);
    if((P1_7==0) && (T0Action==0))     //等待第一个低电平,一有低电平马上记时
    {
     TR0=0;
     T0Action=1;
     TH0=0x00;
      TL0=0x00;
     TF0=0;
     TR0=1;
     while(1)
     { 
      if((P1_7==1) && (T0Action==1))
      {
       TR0=0;
       time=TH0*256+TL0;    //记下第一个低电平宽度时间
       T0Action=0;
       TH0=0x00;
       TL0=0x00;
       TF0=0;
       TR0=1;       //开始记高电平时间
       break;
      }
     }
    }
    do{}while(P1_7==1);
    if((P1_7==0) && (T0Action==0))       //等待第二个低电平,一有低电平马上记时
    {
     TR0=0;
     time2=TH0*256+TL0;           //记下一个高电平宽度时间
     T0Action=1;
     TH0=0x00;
      TL0=0x00;
     TF0=0;
     TR0=1;
     while(1)
     { 
      if((P1_7==1) && (T0Action==1))
      {
       TR0=0;
       time1=TH0*256+TL0;       //记下第二个低电平宽度时间
       T0Action=0;    
       break;
      }
     }
    }
     if((time==time1) && (time<1500))    //判断两个低电平宽度时间是否相等,限时1500us
     {
      if((time>780) && (time<1150))    //低电平宽度时间
      {
      if((time2>210) && (time2<450))   //高电平宽度时间
      {
        temp=0x00;       //0
      }
      else   goto L1;      //误码,返回重新接收数据
      }
      else if((time>210) && (time<450))   //低电平宽度时间
      {           
      if((time2>780) && (time2<1150))   //高电平宽度时间
      {
        temp=0x01;       //1
      }
      else   goto L1;      //误码,返回重新接收数据
      }
     else   goto L1;       //误码,返回重新接收数据

      counttime++;
   
     if(counttime<=8)                         //开始接收前8位   地址码
      { 
       data0=(data0<<1)|temp;
      }
      else if((counttime>8) && (counttime<=12))  //开始接收后4位  数据码
       {
      
        data1=(data1<<1)|temp;
      if(counttime==12)                     // 第12位
        { 
       Action=1;
       break;        //接收完毕,退出解码程序
      }
        }
    }
    else goto L1;           //误码,返回重新接收数据
    }
   }

⌨️ 快捷键说明

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