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

📄 plji.lst

📁 ... .. 单片机接口技术实用子程序
💻 LST
字号:
C51 COMPILER V7.06   PLJI                                                                  05/04/2005 18:04:53 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE PLJI
OBJECT MODULE PLACED IN plji.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil20\C51\BIN\C51.EXE plji.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //-----------------------函数声明,变量定义--------------------------------------------------------
   2          #include <reg51.h>
   3          sbit     GATE=P3^0;             //预制门限
   4          sbit     CLR =P3^1;             //请零
   5          sbit     RGATE=P3^2;            //实际门限
   6          sbit     SEL0=P3^4;             //数据选择位0
   7          sbit     SEL1=P3^5;             //数据选择位1
   8          sbit     SEL2=P3^6;             //数据选择位2
   9          #define  data_in  P1
  10          unsigned char Nx[4];         //待测频率计数值
  11          unsigned char Ns[4];         //标准频率计数值
  12          unsigned char GATE_time=1;   //门限时间,预定义为1S
  13          unsigned char time_count;
  14          bit PRE_judge=1;
  15          //-----------------------变量声明---------------------------------------------------------------------
  16          void system_init(void );      //初始化,设置定时器0的工作方式,供主程序调用
  17          void TIMER0_SCANkey();        //定时器0中断处理函数
  18          
  19          //--------------------------------------------------------------------------------------------------
  20          // 函数名称: system_init()
  21          // 函数功能: 初始化设置
  22          //            设定INT0的工作方式
  23          //--------------------------------------------------------------------------------------------------
  24          void system_init(void )  
  25                       {
  26   1                    TMOD=0x01; //定时器0工作在方式1
  27   1                    ET0=1;     //定时器0中断允许
  28   1                    TH0=-5000/256;  //12M时钟时,定时0.01秒
  29   1                    TL0=-5000%256;
  30   1                    TR0=1;     //定时器0开始计数
  31   1                    EA=1;      //系统中断允许
  32   1                    }
  33          //--------------------------------------------------------------------------------------------------
  34          // 函数名称: read_result
  35          // 函数功能: 将计数值读出到Nx、Ns
  36          //--------------------------------------------------------------------------------------------------
  37          void read_result()
  38               {
  39   1            GATE=0;
  40   1                while(RGATE);   //等待实际门限的结束
  41   1            SEL0=0;
  42   1            SEL1=0;
  43   1            SEL2=0;
  44   1                Nx[0]=data_in;  //SEL=000
  45   1                SEL0=1;
  46   1            Nx[1]=data_in;  //001
  47   1                SEL1=1;
  48   1            Nx[3]=data_in;  //011
  49   1            SEL0=0;
  50   1            Nx[2]=data_in;  //010
  51   1            SEL0=0;
  52   1            SEL1=0;
  53   1            SEL2=1;
  54   1                Ns[0]=data_in;  //100
  55   1                SEL0=1;
C51 COMPILER V7.06   PLJI                                                                  05/04/2005 18:04:53 PAGE 2   

  56   1            Ns[1]=data_in;  //101
  57   1                SEL1=1;
  58   1            Ns[3]=data_in;  //111
  59   1            SEL0=0;
  60   1            Ns[2]=data_in;  //110
  61   1               }
  62          //--------------------------------------------------------------------------------------------------
  63          // 函数名称: judge_Prage
  64          // 函数功能: 判断频率范围,
  65          //            大于1M      即Nx>0x00 0F 42 40,              GATE=1
  66          //            小于1M大于1k即0x00 00 03 E8<Nx<0x00 0F 42 40,GATE=5
  67          //            小于1k      即 Nx<0x00 00 03 E8,             GATE=10  
  68          //--------------------------------------------------------------------------------------------------
  69          void judge_Prage()
  70               {
  71   1               if((Nx[3]==0)&&(Nx[2]==0))
  72   1                 if((Nx[1]<3)||((Nx[1]==3)&&(Nx[0]<0xE8)))
  73   1                 GATE_time=10;
  74   1                      else GATE_time=5;
  75   1               else if((Nx[3]==0)&&(Nx[2]<0x0f))
  76   1                     GATE_time=5;
  77   1               else if((Nx[3]==0)&&(Nx[2]==0x0f))
  78   1                    if(Nx[1]<0x42)
  79   1                     GATE_time=5;
  80   1                        else if((Nx[1]==0x42)&&(Nx[0]<0x40))
  81   1                         GATE_time=5;
  82   1                        else
  83   1                        GATE_time=1;
  84   1              else  GATE_time=1;
  85   1       }
  86          //--------------------------------------------------------------------------------------------------
  87          // 函数名称: calcu_Fx
  88          // 函数功能: 计算频率,根据Fx=(Nx/Ns)Fs 计算结果
  89          //--------------------------------------------------------------------------------------------------
  90          void calcu_Fx()
  91          {
  92   1      
  93   1      }
  94          //--------------------------------------------------------------------------------------------------
  95          // 函数名称: TIMER0_intrupt
  96          // 函数功能: 定时器0中断处理程序
  97          //--------------------------------------------------------------------------------------------------
  98          void TIMER0_intrupt() interrupt 1 using 1
  99                        {
 100   1                     EA=0;         //系统中断禁止
 101   1                                 GATE=1;
 102   1                                 TH0=-5000/256;  //12M时钟时,定时0.01秒
 103   1                     TL0=-5000%256;
 104   1                                 time_count++;
 105   1                                 if(++time_count==100) GATE_time--;
 106   1                                 while(GATE_time==0)
 107   1                                 {
 108   2                                 GATE=0;
 109   2                     read_result();
 110   2                                 if(PRE_judge)     //预测,判断频率范围                 
 111   2                                 {
 112   3                                 judge_Prage();
 113   3                                 PRE_judge=0;
 114   3                                 if(GATE_time)     //如果频率大于1M,直接计算,无须再测
 115   3                                 calcu_Fx();
 116   3                                 }
 117   2                                 else
C51 COMPILER V7.06   PLJI                                                                  05/04/2005 18:04:53 PAGE 3   

 118   2                     calcu_Fx();           //不是预测,直接计算结果
 119   2                  }
 120   1                             EA=1;
 121   1              }
 122          //--------------------------------------------------------------------------------------------------
 123          // 函数名称: main
 124          // 函数功能: 主函数
 125          //--------------------------------------------------------------------------------------------------
 126          void main()
 127           {
 128   1        CLR=0;
 129   1        GATE=1;
 130   1        system_init(); 
 131   1       }
 132          


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