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

📄 ir.lst

📁 嵌入式C修炼之道,35页,写得很精妙,非常有用
💻 LST
字号:
C51 COMPILER V7.06   IR                                                                    10/24/2008 11:56:07 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE IR
OBJECT MODULE PLACED IN ir.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ir.c LARGE BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include<reg52.h>
   2          #define XBYTE ((char *) 0x20000L)
   3          sbit IR=P3^2;
   4          unsigned char num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
   5          unsigned char R_data[32];
   6          unsigned char leddata[2];
   7          unsigned char flag;
   8          //************************************************************************************************
   9          //延时4ms
  10          //************************************************************************************************
  11          void delay4ms()
  12          {
  13   1              int time=3686;
  14   1              while(--time);//延时2*time个机器周期     
  15   1      }
  16          
  17          
  18          //************************************************************************************************
  19          //延时600us
  20          //************************************************************************************************
  21          void delay600us()
  22          {
  23   1              int time=553;
  24   1              while(--time);//延时2*time个机器周期   
  25   1      }
  26          
  27          
  28          //************************************************************************************************
  29          //延时500us
  30          //************************************************************************************************
  31          void delay500us()
  32          {
  33   1              int time=460;
  34   1              while(--time);//延时2*time个机器周期   
  35   1      }
  36          
  37          //************************************************************************************************
  38          //延时2ms
  39          //************************************************************************************************
  40          void delay2ms()
  41          {
  42   1              int time=1843;
  43   1              while(--time);//延时2*time个机器周期     
  44   1      }
  45          //************************************************************************************************
  46          //引导码
  47          //************************************************************************************************
  48          void start_code()
  49          {
  50   1              
  51   1              if(IR==1)//现在是接收别处发送过来的数据,不是模拟时钟脉冲
  52   1              {
  53   2                      while(IR);//高电平就一直空循环,等待低电平到来
  54   2                      delay4ms();//低电平到来就延时4ms(要小于4.5ms)
  55   2                      while(IR==0);//在等待高电平的到来
C51 COMPILER V7.06   IR                                                                    10/24/2008 11:56:07 PAGE 2   

  56   2                      delay4ms();//高电平到来再延时4ms
  57   2              }
  58   1      }
  59          
  60          
  61          
  62          //***********************************************************************************************
  63          //读数据
  64          //***********************************************************************************************
  65          void read_data(void)
  66          {
  67   1              unsigned char count,zancun;
  68   1              while(IR);//高电平,等待低电平
  69   1              delay500us();//可以延时,也可以省略此延时
  70   1              
  71   1      //      if()
  72   1      //      for(count=0;count<32;count++)
  73   1      //      {
  74   1                      while(IR==0);//等待高电平
  75   1                      delay600us();//超过560us再判断是高是低,即判断每个数据位高电平的宽度
  76   1                      if(IR)
  77   1                      {
  78   2                              zancun=R_data[0];
  79   2                              R_data[0]=1;
  80   2                              while(IR);//等待低电平
  81   2                              while(IR==0);//在等待高电平的到来
  82   2                              delay2ms();//延时超过数据1的高电平时间,低于1周期的时间,若还是1就为连发码
  83   2                              if(IR==1)
  84   2                                      {
  85   3                                              R_data[0]=zancun;           
  86   3                                      }
  87   2                              else
  88   2                                      for(count=1;count<32;count++)
  89   2                                      {
  90   3                                              while(IR==0);//等待高电平
  91   3                                              delay600us();
  92   3                                              if(IR)
  93   3                                              {
  94   4                                                      R_data[count]=1;
  95   4                                                      while(IR);
  96   4                                              }
  97   3                                              else
  98   3                                                      R_data[count]=0;
  99   3                                      }
 100   2                      }
 101   1                      else
 102   1                      {
 103   2                              for(count=0;count<32;count++)
 104   2                                      {
 105   3                                              while(IR==0);//等待高电平
 106   3                                              delay600us();
 107   3                                              if(IR)
 108   3                                              {
 109   4                                                      R_data[count]=1;
 110   4                                                      while(IR);
 111   4                                              }
 112   3                                              else
 113   3                                                      R_data[count]=0;
 114   3                                      }
 115   2                      }
 116   1      //      }       
 117   1      }
C51 COMPILER V7.06   IR                                                                    10/24/2008 11:56:07 PAGE 3   

 118          
 119          
 120          
 121          //**********************************************************************************************
 122          //检验连发码
 123          /**********************************************************************************************
 124          unsigned char void con_code(void)
 125          {
 126                  unsigned char tag;
 127          //      zancun=R_data[0];               
 128          //      R_data[0]=1;
 129                  while(IR==0);//在等待高电平的到来
 130                  delay2ms;//延时超过数据1的高电平时间,低于1周期的时间,若还是1就为连发码
 131                  if(IR==1)
 132                          tag=1;
 133                  else
 134                          tag=0;  
 135                  return(teg);    
 136          }
 137          */
 138          
 139          
 140          //**********************************************************************************************
 141          //显示
 142          //**********************************************************************************************
 143          void display()
 144          {
 145   1              unsigned char i;
 146   1              for(i = 0; i < 2 ; i++)
 147   1              {
 148   2                      XBYTE[0xc000] = ~(0x01<<i);     //选择数码管
 149   2                      XBYTE[0xb000] = num[leddata[i]];        //显示数字
 150   2                      delay4ms();
 151   2              }       
 152   1      }
 153          
 154          
 155          
 156          //**********************************************************************************************
 157          //数据转换
 158          //**********************************************************************************************
 159          void trans()
 160          {
 161   1              unsigned char i,tmp=0;
 162   1              for(i=0;i<8;i++)
 163   1              {
 164   2                      tmp=(R_data[16+i]<<i)|tmp;//低位在前
 165   2              }
 166   1              leddata[0]=(tmp&0xf0)>>4;
 167   1              leddata[1]=tmp&0x0f;
 168   1      }
 169          
 170          
 171          
 172          //**********************************************************************************************
 173          //main函数
 174          //**********************************************************************************************
 175          void main()
 176          {
 177   1      //      unsigned char i;
 178   1              XBYTE[0xa000] =0;
 179   1              while(1)//程序一直在循环,要判断连发码
C51 COMPILER V7.06   IR                                                                    10/24/2008 11:56:07 PAGE 4   

 180   1              {
 181   2                      start_code();
 182   2                      read_data();
 183   2                      trans();
 184   2                      display();
 185   2              }       
 186   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    325    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     46    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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