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

📄 interrupt.lst

📁 以C8051F020单片机做的多功能计数器
💻 LST
字号:
C51 COMPILER V7.50   INTERRUPT                                                             09/20/2008 15:21:11 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE INTERRUPT
OBJECT MODULE PLACED IN interrupt.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE interrupt.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*********interrupt.c****************/
   2          #include "interrrupt.h"
   3          extern xdata uchar state;
   4          extern xdata uchar liangcheng;
   5          extern xdata refreshTime;
   6          extern xdata refreshTemp;
   7          
   8          idata Counter periodCounters[COUNTERS_LEN];
   9          Counter periodCounter;
  10          //uint counts[6];
  11          //uint count=0;
  12          idata uchar DownCount=0 ;
  13          bit T2ExDown2=0;
  14          xdata uchar CountFor1s=0;
  15          
  16          
  17          #define IGNORE 4 
  18          
  19          void InitInterrupt();                                           //初始化中断
  20          
  21          void InitInterrupt()
  22          {
  23   1      //      PCA0MD=0x0B;//使用外时钟8分频,允许CF中断
  24   1      //      EIE1 =0x08;//EPCA0置1,允许PCA0中断
  25   1      
  26   1              
  27   1              EX0=1;//外部中断0
  28   1              IT1=1;//沿触发方式
  29   1              //IT1=0;//
  30   1              CKCON=0xF0;     //定时器1,2,4系统时钟不分频,定时器0使用12分频
  31   1      
  32   1              TMOD=0x21;
  33   1              TH0=0;TL0=0;
  34   1      
  35   1              PT0=0;//低优先级
  36   1              ET0=1;
  37   1              TR0=1;
  38   1      
  39   1              EA=1;   
  40   1              //EX1=1;//打开外部中断1
  41   1              //IT1=0;//电平触发方式
  42   1              
  43   1              //EIE2=0x10;//打开外部中断6
  44   1              //P3IF=0x00;//使用默认值,下降沿触发
  45   1      
  46   1      
  47   1      }
  48          
  49          
  50          void INT1() interrupt 2 using 1 //外部中断1
  51          {
  52   1              if(++DownCount<=8)//if(++DownCount<=2*IGNORE)
  53   1                      return;//舍弃前IGNORE次结果
  54   1      
  55   1              if(DownCount%2==1)
C51 COMPILER V7.50   INTERRUPT                                                             09/20/2008 15:21:11 PAGE 2   

  56   1              {
  57   2                      //periodCounter.Low16=
  58   2                      TR1=1;  //开定时器
  59   2              }
  60   1              else
  61   1              {
  62   2                      TR1=0;
  63   2                      periodCounters[DownCount/2-5]=periodCounter;//periodCounters[DownCount/2-(IGNORE+1)]=periodCounter;
  64   2                      periodCounter=0;                        
  65   2              }
  66   1              if(DownCount==20)//if(DownCount==((IGNORE*+COUNTERS_LEN)*2))
  67   1              {
  68   2                      ET1=0;  
  69   2                      EX1=0;//关闭外部中断0   
  70   2                      DownCount=0;
  71   2              //      interrupted=1;
  72   2                      state=CALCU;
  73   2              }
  74   1      
  75   1              
  76   1      }
  77          
  78          
  79          
  80          void Timer1() interrupt 3 using 3       
  81          {
  82   1              periodCounter++;
  83   1              
  84   1      //      TEST=!TEST;
  85   1      }
  86          
  87          
  88          void Timer0() interrupt 1 using 1
  89          {
  90   1              ++CountFor1s;
  91   1              if(32==CountFor1s)
  92   1                      refreshTime=1;
  93   1              if(64==CountFor1s)
  94   1              {
  95   2                      refreshTime=1;
  96   2                      refreshTemp=1;
  97   2                      CountFor1s=0;
  98   2              }
  99   1      }
 100          
 101          
 102          /*
 103          void PCATimer() interrupt 9 using 3
 104          {
 105                  TR1=0;
 106          
 107          }*/
 108          
 109          
 110          //way 1
 111          void Timer2() interrupt 5 using 2 //the number of the input pulse  arrived 65536        
 112          {
 113   1              TR1=0;
 114   1              TR2=0;
 115   1              EA=0;
 116   1              
 117   1              periodCounters[DownCount++]=periodCounter;
C51 COMPILER V7.50   INTERRUPT                                                             09/20/2008 15:21:11 PAGE 3   

 118   1              periodCounter=0;
 119   1      
 120   1              if(DownCount==3)
 121   1              {
 122   2                      DownCount=0;
 123   2                      ET2=0;
 124   2                      ET1=0;
 125   2                      state=CALCU;
 126   2              }
 127   1              else
 128   1              {       
 129   2                      switch(liangcheng)
 130   2                      {
 131   3                      case 4:break;
 132   3                      case 3:TH2=0xfc;TL2=0x18;break;//1000 periods
 133   3                      case 2:TH2=0xff;TL2=0x9c;break;//100 periods
 134   3                      case 1:TH2=0xff;TL2=0xf6;//10 periods
 135   3                      case 5:TH2=0xff;TL2=0xfb;//2 periods
 136   3                      }
 137   2              
 138   2                      EA=1;
 139   2                      TR1=1;
 140   2                      TR2=1;  
 141   2              }
 142   1              TF2=0;
 143   1      
 144   1      }
 145          
 146          
 147                          
 148          /*
 149          //way 2
 150          
 151          void Timer2() interrupt 5 using 2 //
 152          {
 153          
 154                  if(EXF2)
 155             {
 156                EXF2 = 0;                        // Reset Capture Flag
 157          
 158             }
 159             else if(TF2)
 160             {
 161                TF2 = 0;
 162             }
 163          
 164          
 165          if(T2ExDown2==0)
 166                  {
 167                          T2ExDown2=1;    
 168                  }
 169                  else
 170                  {
 171                          periodCounter=RCAP2H*256+RCAP2L ;
 172                          EXEN2=0;
 173                          T2ExDown2=0;    
 174                          TR2=0;
 175                          TH2=0;
 176                          TL2=0;
 177                  }
 178                  EXF2=0; 
 179          }
C51 COMPILER V7.50   INTERRUPT                                                             09/20/2008 15:21:11 PAGE 4   

 180          */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    353    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =      1    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4    ----
   IDATA SIZE       =     25    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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