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

📄 遥控红外编码.lst

📁 基于51单片机的控制的红外线通信
💻 LST
字号:
C51 COMPILER V7.08   襙控_焱_盻码                                                          08/22/2007 11:21:59 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE 襙控_焱_盻码
OBJECT MODULE PLACED IN 遥控红外编码.OBJ
COMPILER INVOKED BY: D:\单片机~1\C51\Bin\c51.exe 遥控红外编码.c DB OE SMALL ROM(LARGE)

line level    source

*** WARNING C500 IN LINE 1 OF 遥控红外编码.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
   1          #include<reg52.h>
   2          /*用AT89S51单片机制作红外电视遥控器
   3            一般红外电视遥控器的输出都是用编码后串行数据对38~40kHz的方波进行脉冲幅度调制而产生的。
   4            当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征:
   5            采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;
   6               以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”。
   7            上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制,然后再通过红外发射二极管产生红
   8              外线向空间发射。一般电视遥控器的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,
   9              能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。后16位为8位的操作码和8位的操作反码,
  10              用于核对数据是否接收准确。根据红外编码的格式,发送数据前需要先发送9ms的起始码和4.5ms
  11              的结果码。
  12            
  13            接收方一般使用TL0038一体化红外线接收器进行接收解码,当TL0038接收到38kHz红外信号时,输出端输
  14              出低电平,否则为高电平。所以红外遥控器发送红外信号时,参考上面遥控串行数据编码波形图,在低电
  15              平处发送38kHz红外信号,高电平处则不发送红外信号。
  16          C51程序代码:*/ 
  17          
  18          bit OP;                  //红外发射管的亮灭
  19          sbit p3_4=P3^4;
  20          unsigned int count;       //延时计数器
  21          unsigned int endcount; //终止延时计数
  22          unsigned char flag;      //红外发送标志
  23          char iraddr1;  //十六位地址的第一个字节
  24          char iraddr2;  //十六位地址的第二个字节
  25          
  26          void SendIRdata(char p_irdata);
  27          void delay();
  28          
  29          void main(void) 
  30          {
  31   1        count=0;
  32   1        flag=0;
  33   1        OP=0;
  34   1        p3_4=0;
  35   1        
  36   1        EA=1; //允许CPU中断 
  37   1        TMOD=0x11; //设定时器0和1为16位模式1 
  38   1        ET0=1; //定时器0中断允许 
  39   1      
  40   1      
  41   1        TH0=0xFF; 
  42   1        TL0=0xE6; //设定时值0为38K 也就是每隔26us中断一次  
  43   1        TR0=1;//开始计数
  44   1      
  45   1        iraddr1=3;
  46   1        iraddr2=252;
  47   1      
  48   1      
  49   1        do{
  50   2            delay();
  51   2            SendIRdata(12);
  52   2        }while(1);
  53   1      } 
  54          
C51 COMPILER V7.08   襙控_焱_盻码                                                          08/22/2007 11:21:59 PAGE 2   

  55          //定时器0中断处理 
  56          void timeint(void) interrupt 1 using 2
  57          { 
  58   1        TH0=0xFF; 
  59   1        TL0=0xE6; //设定时值为38K也就是每隔26us中断一次
  60   1        count++;
  61   1      
  62   1        if (flag==1)
  63   1        {
  64   2          OP=~OP;
  65   2        }
  66   1        else
  67   1        {
  68   2          OP=0;
  69   2        }
  70   1        p3_4=OP;
  71   1      } 
  72          
  73          
  74          void SendIRdata(char p_irdata)
  75          {
  76   1        int i;
  77   1        char irdata=p_irdata;
  78   1      
  79   1        //发送9ms的起始码
  80   1        endcount=223;
  81   1        flag=1;
  82   1        count=0;
  83   1        do{}while(count<endcount);
  84   1      
  85   1        //发送4.5ms的结果码
  86   1        endcount=117;
  87   1        flag=0;
  88   1        count=0;
  89   1        do{}while(count<endcount);
  90   1      
  91   1        //发送十六位地址的前八位
  92   1        irdata=iraddr1;
  93   1        for(i=0;i<8;i++)
  94   1        {
  95   2      
  96   2           //先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平)
  97   2           endcount=10;
  98   2           flag=1;
  99   2           count=0;
 100   2           do{}while(count<endcount);
 101   2      
 102   2          //停止发送红外信号(即编码中的高电平)
 103   2           if(irdata-(irdata/2)*2)  //判断二进制数个位为1还是0
 104   2           {
 105   3             endcount=41;  //1为宽的高电平
 106   3           }
 107   2          else
 108   2           {
 109   3           endcount=15;   //0为窄的高电平
 110   3           }
 111   2          flag=0;
 112   2          count=0;
 113   2          do{}while(count<endcount);
 114   2      
 115   2          irdata=irdata>>1;
 116   2        }
C51 COMPILER V7.08   襙控_焱_盻码                                                          08/22/2007 11:21:59 PAGE 3   

 117   1      
 118   1        //发送十六位地址的后八位
 119   1        irdata=iraddr2;
 120   1        for(i=0;i<8;i++)
 121   1        {
 122   2           endcount=10;
 123   2           flag=1;
 124   2           count=0;
 125   2           do{}while(count<endcount);
 126   2      
 127   2           if(irdata-(irdata/2)*2)
 128   2           {
 129   3              endcount=41;
 130   3           }
 131   2           else
 132   2           {
 133   3             endcount=15;
 134   3           }
 135   2           flag=0;
 136   2           count=0;
 137   2           do{}while(count<endcount);
 138   2      
 139   2           irdata=irdata>>1;
 140   2        }
 141   1      
 142   1        //发送八位数据
 143   1        irdata=p_irdata;
 144   1        for(i=0;i<8;i++)
 145   1        {
 146   2           endcount=10;
 147   2           flag=1;
 148   2           count=0;
 149   2           do{}while(count<endcount);
 150   2      
 151   2           if(irdata-(irdata/2)*2)
 152   2           {
 153   3               endcount=41;
 154   3           }
 155   2           else
 156   2           {
 157   3             endcount=15;
 158   3           }
 159   2           flag=0;
 160   2           count=0;
 161   2           do{}while(count<endcount);
 162   2      
 163   2           irdata=irdata>>1;
 164   2        }
 165   1      
 166   1        //发送八位数据的反码
 167   1        irdata=~p_irdata;
 168   1        for(i=0;i<8;i++)
 169   1        {
 170   2           endcount=10;
 171   2           flag=1;
 172   2           count=0;
 173   2           do{}while(count<endcount);
 174   2      
 175   2           if(irdata-(irdata/2)*2)
 176   2           {
 177   3               endcount=41;
 178   3           }
C51 COMPILER V7.08   襙控_焱_盻码                                                          08/22/2007 11:21:59 PAGE 4   

 179   2           else
 180   2           {
 181   3             endcount=15;
 182   3           }
 183   2           flag=0;
 184   2           count=0;
 185   2           do{}while(count<endcount);
 186   2      
 187   2           irdata=irdata>>1;
 188   2        }
 189   1      
 190   1        endcount=10;
 191   1        flag=1;
 192   1        count=0;
 193   1        do{}while(count<endcount);
 194   1        flag=0;
 195   1      }
 196          
 197          void delay()
 198          {
 199   1        int i,j;
 200   1        for(i=0;i<400;i++)
 201   1        {
 202   2          for(j=0;j<100;j++)
 203   2          {
 204   3          }
 205   2        }
 206   1      }
 207          
 208          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    550    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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