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

📄 text1.lst

📁 用外部中断测频率:从P3.7端口引入频率
💻 LST
字号:
C51 COMPILER V8.02   TEXT1                                                                 05/19/2008 17:40:19 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: D:\Keil破解版\C51\BIN\C51.EXE Text1.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2          若晶振频率为12MHZ,如何用T0来测量20ms-1s之间的方波周期?
   3          又如何测量频率为0.5MHZ左右的脉冲频率?
   4          */
   5          /*
   6          实现方法:
   7          用外部中断,选择下降沿触发,程序响应中断后马上开启定时器,
   8          在下个下降沿来临的时候关掉定时器。
   9          */
  10          #include<regX51.h>
  11          #include<intrins.h>
  12          
  13          #define uchar unsigned char
  14          #define uint  unsigned int
  15          
  16          
  17           
  18          uint  time0_tick=0;
  19          uchar tick=0;
  20          uchar count[4]={0,0,0,0};
  21          
  22          
  23          bit flag = 1;
  24          
  25          code seven_seg[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
  26          code scan[4]={0X08,0X04,0X02,0X01};//直接用P3驱动共阳七段显示器;
  27          
  28          
  29          static void time0_isr(void)interrupt TF0_VECTOR using 2
  30          {
  31   1         TH0  = (65536-10000)/256;
  32   1         TL0  = (65536-10000)%256;
  33   1         P0_7 = ~ P0_7; //波动形象化。
  34   1         if(flag)
  35   1         {
  36   2                      count[0]++;
  37   2                              if(count[0]==10)
  38   2                              {
  39   3                                      count[0]=0;
  40   3                                      count[1]++;
  41   3                                      if(count[1]==10)
  42   3                                      {
  43   4                                              count[1]=0;
  44   4                                              count[2]++;
  45   4                                              if(count[2]==10)
  46   4                                              {
  47   5                                                      count[2]=0;
  48   5                                                      count[3]++;
  49   5                                                      if(count[3]==10)count[3]=0;
  50   5                                              }
  51   4                                      }
  52   3                              }               
  53   2              }
  54   1      }
  55          
C51 COMPILER V8.02   TEXT1                                                                 05/19/2008 17:40:19 PAGE 2   

  56          static void xint0_isr(void)interrupt IE0_VECTOR using 1//外部中断
  57          {
  58   1              tick++;
  59   1              if(tick == 1)
  60   1              {       
  61   2                      count[0]=0;
  62   2                      count[1]=0;
  63   2                      count[2]=0;
  64   2                      count[3]=0;
  65   2                      flag = 1;
  66   2                      TR0  = 1;
  67   2              }
  68   1              if(tick == 2)
  69   1              {
  70   2                      tick = 0;
  71   2                      flag = 0;
  72   2                      TR0  = 0;
  73   2              //      EX0  = 0;    //不允许int0中断;
  74   2              }
  75   1      }
  76          
  77          void delay(uchar ms)
  78          {
  79   1              uchar i,j;
  80   1              for(i=0;i<ms;i++)
  81   1                      for(j=0;j<250;j++)
  82   1                      {
  83   2                              _nop_();
  84   2                              _nop_();
  85   2                              _nop_();
  86   2                              _nop_();
  87   2                      }
  88   1      }
  89          
  90          static void timer0_initialize(void)
  91          {       
  92   1          EA=0;       // 所有中断关
  93   1              TR0=0;  
  94   1              TMOD = 0x01; // T0 模式1 16位计数器
  95   1              TH0  = (65536-10000)/256; //直接二进制取位赋值
  96   1              TL0  = (65536-10000)%256;
  97   1              PT0=1;
  98   1              ET0=1;
  99   1              //TR0=1;
 100   1              EA=1;   
 101   1      }
 102          
 103          static void xint0_initialize(void)
 104          {
 105   1              EA=0;
 106   1              IT0=1;
 107   1              EX0=1;
 108   1              EA=1;   
 109   1      }
 110          void main()
 111          {
 112   1      
 113   1              uchar i;        
 114   1              xint0_initialize();
 115   1      
 116   1              timer0_initialize();
 117   1      
C51 COMPILER V8.02   TEXT1                                                                 05/19/2008 17:40:19 PAGE 3   

 118   1              while(1)
 119   1              {
 120   2                      for(i=0;i<4;i++)
 121   2                      {
 122   3                              P2=seven_seg[count[i]];
 123   3                              P1=scan[i];
 124   3                              delay(5);
 125   3                              P1 = 0x00;
 126   3                      }
 127   2              } 
 128   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    214    ----
   CONSTANT SIZE    =     28    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7    ----
   IDATA SIZE       =   ----    ----
   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 + -