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

📄 pulse_count.lst

📁 《牛奶巴斯德杀菌系统》。一本嵌入式教材中的源码范例
💻 LST
字号:
C51 COMPILER V6.21  PULSE_COUNT                                                            01/23/2002 17:54:56 PAGE 1   


C51 COMPILER V6.21, COMPILATION OF MODULE PULSE_COUNT
OBJECT MODULE PLACED IN Pulse_count.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE Pulse_count.c OPTIMIZE(6,SPEED) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*------------------------------------------------------------------*-
   2          
   3             Pulse_Count.C (v1.00)
   4           
   5            ------------------------------------------------------------------
   6          
   7             Count pulses from a mechanical switch or similar device.  
   8                                                 ___
   9             Responds to falling edge of pulse:     |___
  10          
  11          
  12             COPYRIGHT
  13             ---------
  14          
  15             This code is associated with the book:
  16          
  17             EMBEDDED C by Michael J. Pont 
  18             [Pearson Education, 2002: ISBN: 0-201-79523-X].
  19          
  20             This code is copyright (c) 2001 by Michael J. Pont.
  21           
  22             See book for copyright details and other information.
  23          
  24          -*------------------------------------------------------------------*/
  25          
  26          #include "Main.H"
  27          #include "Port.H"
  28          
  29          #include "Bargraph.H"
  30          #include "Pulse_Count.H"
  31          
  32          
  33          // ------ Private function prototypes ------------------------------
  34          void PULSE_COUNT_Check_Below_Threshold(const tByte);
  35          
  36          // ------ Public variable declarations -----------------------------
  37          // The data to be displayed
  38          extern tBargraph Data_G;
  39          
  40          // ------ Public variable definitions -------------------------------
  41          // Set only after falling edge is detected
  42          bit Falling_edge_G;
  43          
  44          // ------ Private variable definitions ------------------------------
  45          // The results of successive tests of the pulse signal
  46          // (NOTE: Can't have arrays of bits...)
  47          static bit Test4, Test3, Test2, Test1, Test0;
  48          
  49          static tByte Total_G = 0;
  50          static tWord Calls_G = 0;
  51          
  52          // ------ Private constants ----------------------------------------
  53          
  54          // Allows changed of logic without hardware changes
  55          #define HI_LEVEL (0)
C51 COMPILER V6.21  PULSE_COUNT                                                            01/23/2002 17:54:56 PAGE 2   

  56          #define LO_LEVEL (1)
  57          
  58          /*------------------------------------------------------------------*-
  59          
  60            PULSE_COUNT_Init()
  61          
  62            Initialization function for the switch library.
  63          
  64          -*------------------------------------------------------------------*/
  65          void PULSE_COUNT_Init(void)
  66             {
  67   1         Sw_pin = 1; // Use this pin for input
  68   1      
  69   1         // The tests (see text)
  70   1         Test4 = LO_LEVEL;
  71   1         Test3 = LO_LEVEL;
  72   1         Test2 = LO_LEVEL;
  73   1         Test1 = LO_LEVEL;
  74   1         Test0 = LO_LEVEL;
  75   1         }
  76          
  77          /*------------------------------------------------------------------*-
  78          
  79            PULSE_COUNT_Check_Below_Threshold()
  80          
  81            Checks to see if pulse count is below a specified
  82            threshold value.  If it is, sounds an alarm.
  83          
  84          -*------------------------------------------------------------------*/
  85          void PULSE_COUNT_Check_Below_Threshold(const tByte THRESHOLD)
  86             {
  87   1         if (Data_G < THRESHOLD)
  88   1            {
  89   2            Alarm_pin = 0;
  90   2            }
  91   1         else
  92   1            {
  93   2            Alarm_pin = 1;
  94   2            }
  95   1         }
  96          
  97          /*------------------------------------------------------------------*-
  98          
  99            PULSE_COUNT_Update()
 100            
 101            This is the main switch function.  
 102          
 103            It should be called every 30 ms 
 104            (to allow for typical 20ms debounce time).
 105           
 106          -*------------------------------------------------------------------*/
 107          void PULSE_COUNT_Update(void)
 108             {
 109   1         // Clear timer flag
 110   1         TF2 = 0;
 111   1      
 112   1         // Shuffle the test results
 113   1         Test4 = Test3;
 114   1         Test3 = Test2;
 115   1         Test2 = Test1;
 116   1         Test1 = Test0;
 117   1      
C51 COMPILER V6.21  PULSE_COUNT                                                            01/23/2002 17:54:56 PAGE 3   

 118   1         // Get latest test result
 119   1         Test0 = Sw_pin;
 120   1      
 121   1         // Required result:
 122   1         // Test4 == HI_LEVEL
 123   1         // Test3 == HI_LEVEL
 124   1         // Test1 == LO_LEVEL
 125   1         // Test0 == LO_LEVEL
 126   1      
 127   1         if ((Test4 == HI_LEVEL) && 
 128   1             (Test3 == HI_LEVEL) && 
 129   1             (Test1 == LO_LEVEL) && 
 130   1             (Test0 == LO_LEVEL))
 131   1            {
 132   2            // Falling edge detected
 133   2            Falling_edge_G = 1;
 134   2            }
 135   1         else
 136   1            {
 137   2            // Default
 138   2            Falling_edge_G = 0;
 139   2            }
 140   1      
 141   1         // Calculate average every 45 calls to this task
 142   1         // - maximum count over this period is 9 pulses
 143   1         //   if (++Calls_G < 45)
 144   1      
 145   1         // 450 used here for test purposes (in simulator)
 146   1         // [Because there is a limit to how fast you can simulate pulses
 147   1         // by hand...]
 148   1         if (++Calls_G < 450)  
 149   1            {
 150   2            Total_G += (int) Falling_edge_G;
 151   2            }
 152   1         else
 153   1            {
 154   2            // Update the display
 155   2            Data_G = Total_G; // Max is 9
 156   2            Total_G = 0;
 157   2            Calls_G = 0;
 158   2            PULSE_COUNT_Check_Below_Threshold(3);
 159   2            BARGRAPH_Update();
 160   2            }
 161   1         }
 162          
 163          /*------------------------------------------------------------------*-
 164            ---- END OF FILE -------------------------------------------------
 165          -*------------------------------------------------------------------*/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    110    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      6    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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