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

📄 infrared_receive.lst

📁 c8051f020+CH375读写U盘文件的程序
💻 LST
字号:
C51 COMPILER V8.02   INFRARED_RECEIVE                                                      10/19/2007 21:27:23 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE INFRARED_RECEIVE
OBJECT MODULE PLACED IN infrared_receive.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE infrared_receive.c LARGE BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************INFRARED DRIVER********************************/
   2          /*                                                                                                                                                        */
   3          /*                                                   SYSTEM CLOCK 11.0592M                                                        */
   4          /*                                                                                                                                                        */
   5          /******************************************************************************/
   6          
   7          #define INFRARED_EXTERN
   8          #include<c8051f020.h>
   9          #include"infrared_receive.h"
  10          
  11          
  12          sbit P37=P3^7;
  13          unsigned char val[8]=0;
  14          bit Head_ok=0,Got=0;    //Head_ok: 头帧正确,有新的按键  Got:接收完毕
  15          
  16          void Timer3_Init()
  17          {
  18   1          TMR3CN   &=0xfb;    //关定时器3
  19   1          TMR3RL    = T_3MS;  //延时3ms
  20   1          TMR3      = T_3MS;
  21   1      }
  22          
  23          void Infrared_Init()
  24          {
  25   1       IE=0x80;  //开总中断
  26   1       EIE2|=0x21;//开中断7和定时器3中断
  27   1       Timer3_Init();
  28   1      }
  29          
  30          
  31          unsigned char   Wait_Infrared()
  32          {               
  33   1                      unsigned char  keyvalue;
  34   1                  
  35   1            while(!Got);         //等待接收完毕
  36   1            if(val[2]+val[3]==0xff) //较验,最后两个字节相互为反码
  37   1            keyvalue=val[2]; //第三个字节为有效信息
  38   1            Got=0;
  39   1                      
  40   1                      return(keyvalue);       
  41   1      }
  42          
  43          
  44          
  45          void ex_interrupt() interrupt 19         //下降沿中断,收到低电平开始 
  46          {
  47   1      
  48   1      if(!Head_ok)   //头帧是否检测完毕
  49   1       {
  50   2       EIE2&=0xdf;//关中断7
  51   2        P3IF&=0x7f;//清中断7的中断标志
  52   2        Timer3_Init();//定时器3初始化
  53   2        TMR3CN|=0x04;  //开定时器3
  54   2        }
  55   1       else 
C51 COMPILER V8.02   INFRARED_RECEIVE                                                      10/19/2007 21:27:23 PAGE 2   

  56   1       {
  57   2        while(P37==0)
  58   2        {if(TMR3CN>0x80) return;}  //等待变高  定时器3溢出则跳出  多级中断的实现
  59   2        
  60   2         P3IF&=0x7f;//清中断7的中断标志 
  61   2         TMR3      = T_0_8MS;//延时0.8ms
  62   2         TMR3CN|=0x04;  //开定时器3
  63   2        
  64   2       }
  65   1      }
  66          
  67          void T3_inter() interrupt 14
  68          {
  69   1        static unsigned char i=0,n=0;
  70   1        static bit h=0; 
  71   1        unsigned int v;
  72   1        TMR3CN&=0x7f;  //清中断标志
  73   1      
  74   1       if(Head_ok==0&&h==0&&P37==0) h=1; //开始后第一个3ms处应为低
  75   1       else if(Head_ok==0&&h==1&&P37==1) // 开始后第二个3ms处应为高
  76   1       {
  77   2        EIE2|=0x20; //开中断7
  78   2        TMR3CN&=0xfb; //关定时器3
  79   2        h=0;Head_ok=1;return;
  80   2       }
  81   1       else if(Head_ok)
  82   1         {
  83   2            TMR3CN&=0xfb;     //关定时器3
  84   2            n=i++/8;
  85   2          if(P37)                                      //每0.8ms读一次数据
  86   2              {
  87   3               val[n]=val[n]>>1;
  88   3               val[n]|=0x80;
  89   3              }
  90   2          else 
  91   2               val[n]=val[n]>>1;
  92   2      //       n=++i/8;
  93   2          if(i==32)
  94   2             {
  95   3              i=0;n=0;Head_ok=0;
  96   3              EIE2&=0xdf;//关中断7
  97   3              for(v=0;v<60000;v++);    //避开重复码
  98   3              EIE2|=0x20; //开中断7
  99   3              Got=1;
 100   3             }
 101   2          } 
 102   1       else           //还原为最原始状态
 103   1       {
 104   2        EIE2|=0x20;//开中断7
 105   2        Timer3_Init();
 106   2        h=0;Got=0;Head_ok=0;
 107   2       } 
 108   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    350    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     10       2
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
C51 COMPILER V8.02   INFRARED_RECEIVE                                                      10/19/2007 21:27:23 PAGE 3   

   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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