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

📄 main.lst

📁 一个基本的平安钟控制程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.08   MAIN                                                                  08/05/2008 10:21:25 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\obj\main.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\main.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND PRINT(.\list\main.lst) OBJE
                    -CT(.\obj\main.obj)

line level    source

   1          
   2          /**********************************************************************
   3          prjname:
   4          author: 
   5          version:0.2
   6          控制过程分析说明:
   7          系统进入后就不停的查询P3.2和P1.0,
   8          由此分开P3.2程序和P1.0程序
   9          
  10          P3.2程序:负责检测呼入情况
  11                            没有呼入就进入P1.0程序
  12                            有呼入,需要进入检测对方取消和本地取消
  13                            检测到本地取消就进入本地取消处理然后退到主循环
  14                            检测到对方取消就进入对方取消处理然后退到主循环
  15          
  16          P1.0程序:负责检测本地呼叫情况
  17                            没有本地呼叫情况进入P3.2程序
  18                            检测呼叫结果
  19                            本次呼叫不成功,进入下次呼叫,直到结束退到主循环
  20                            本次呼叫成功,进入成功处理
  21                            检测本地取消和对方取消
  22                            检测到本地取消就进入本地取消处理然后退到主循环
  23                            检测到对方取消就进入对方取消处理然后退到主循环
  24          *********************************************************************/
  25          #include "micro.h"
  26          
  27          void InitSystem(void);
  28          void Singal_Scan(void);
  29          void PLOW_Scan(void);
  30          void TimerCounterJudge(void);
  31          void PinCtr(uchar pinS,uchar delays,uchar Seconds,uchar PinST);
  32          void Low_Scan(void);
  33          void Reset_Check(void);
  34          
  35          main()
  36          {
  37   1      
  38   1              InitSystem();
  39   1                
  40   1              while(1)
  41   1              {
  42   2      
  43   2              /*****************************************************/
  44   2                      if(Flag_10ms)
  45   2                      {//这是一个系统运行的核心程序,单独独立出来
  46   3                              Flag_10ms = 0;
  47   3                              Singal_Scan();
  48   3                              Low_Scan();
  49   3                              PLOW_Scan();
  50   3                      }
  51   2                      if(Flag_100ms)
  52   2                      {//这也是一个系统运行的核心程序,单独独立出来
  53   3                              Flag_100ms = 0;
  54   3                              TimerCounterJudge();
C51 COMPILER V8.08   MAIN                                                                  08/05/2008 10:21:25 PAGE 2   

  55   3                      }
  56   2              /*****************************************************/
  57   2                      if(FlagP32)                     //系统的P32程序 块
  58   2                      {
  59   3                              if((SYSPINSTA & Check_Signal)==Signal_En)               //检测到有对方取消
  60   3                              {
  61   4                                      if((SYSPINSTA & Check_type)==Busy_Tone) //确认有对方取消
  62   4                                      {
  63   5                                              PinCtr(1,0,HOLDON,Low);
  64   5                                              PinCtr(7,0,HOLDON,Hight);
  65   5                                              Reset_Check();                          //所有信号标志复位
  66   5                                              continue;                                       //P32程序完成退出循环
  67   5                                      }
  68   4                              }  
  69   3                              if(SYSPINSTA & Line_Close)                              //检查p3.5脚低脉冲
  70   3                              {
  71   4                                      PinCtr(0,0,HOLDON,Low);
  72   4                                      PinCtr(7,0,HOLDON,Hight);       
  73   4                                      Reset_Check();                                  //所有信号标志复位
  74   4                                      continue;                                               //P32程序完成退出循环
  75   4                              }                       
  76   3                              continue;               //P32程序未完成,直接退出到主循环等待事件发生
  77   3                      }
  78   2              /*****************************************************/ 
  79   2                      if(FlagP10)                     //系统的P10程序 块
  80   2                      {
  81   3                              if((SYSPINSTA & Check_Signal)==Signal_En)               //检测到有对方无确认
  82   3                              {
  83   4                                      if((SYSPINSTA & Check_type)==Ring_respond)      //确认有对方无确认
  84   4                                      {
  85   5                                              Dailtimes++;                            //系统只进行5次尝试
  86   5                                              if(Dailtimes>=5)
  87   5                                              {
  88   6                                                      PinCtr(1,0,HOLDON,Low);
  89   6                                                      PinCtr(7,0,HOLDON,Hight);
  90   6                                                      Reset_Check();                          //所有信号标志复位
  91   6                                                      continue;                                       //P10程序完成退出循环                                           
  92   6                                              }
  93   5                                              pinnop11 = 0;                           //P11先送低
  94   5                                              PinCtr(1,20,HOLDON,Hight);              //P11在2S后保持高
  95   5                                              PinCtr(2+Dailtimes,30,2,Hight); //P1(2+Dailtimes)在3S后送200ms高
  96   5                                              Reset_Check();                          //所有信号标志复位
  97   5                                              FlagP10 = 1;                            //保证下次还是进入P10程序块
  98   5                                              continue;                                       //P32程序完成退出循环
  99   5                                      }
 100   4                              }
 101   3                              if((SYSPINSTA & Check_Signal)==Signal_En)               //检测到有对方取消
 102   3                              {
 103   4                                      if((SYSPINSTA & Check_type)==Busy_Tone) //确认有对方取消
 104   4                                      {
 105   5                                              PinCtr(1,0,HOLDON,Low);
 106   5                                              PinCtr(7,0,HOLDON,Hight);
 107   5                                              Reset_Check();                          //所有信号标志复位
 108   5                                              continue;                                       //P32程序完成退出循环
 109   5                                      }
 110   4                              }                       
 111   3                              if(SYSPINSTA & H_F)                             //P10程序块检测到免提就退出P10程序块
 112   3                              {
 113   4                                      PinCtr(1,0,HOLDON,Low);
 114   4                                      PinCtr(7,0,HOLDON,Hight);
 115   4                                      Reset_Check();
 116   4                                      Dailtimes=0;
C51 COMPILER V8.08   MAIN                                                                  08/05/2008 10:21:25 PAGE 3   

 117   4                                      continue;                       //确认进入P10程序块,需要立即进入下一次
 118   4                              }  
 119   3                              continue;               //P10程序未完成,直接退出到主循环等待事件发生
 120   3                      }
 121   2              /*****************************************************/         
 122   2                      if(SYSPINSTA & Ring_In)                                 //检查p3.2脚低脉冲
 123   2                      {
 124   3                              PinCtr(1,0,HOLDON,Hight);                       //P1.1->H
 125   3                              PinCtr(7,0,HOLDON,Low);                 //P1.7->L
 126   3                              PinCtr(0,5,20,Hight);                           //将P3.7延时500ms,置高2s(200*10ms)钟
 127   3                              Reset_Check();
 128   3                              FlagP32 = 1;                                    //要求系统下次进入P32程序
 129   3                              continue;                       //确认进入P32程序块,需要立即进入下一次
 130   3                      }                       
 131   2                      if(SYSPINSTA & H_F)                     //主程序检测到免提就打开系统
 132   2                      {
 133   3                              PinCtr(1,0,HOLDON,Hight);               //P11保持高
 134   3                              PinCtr(7,0,HOLDON,Low);         //P17保持低
 135   3                              PinCtr(2,10,2,Hight);                   //P12在1S后送200ms高
 136   3                              Reset_Check();
 137   3                              Dailtimes=0;
 138   3                              FlagP10 = 1;                                    //要求系统下次进入P10程序
 139   3                              continue;                       //确认进入P10程序块,需要立即进入下一次
 140   3                      }  
 141   2              }  
 142   1      }
 143          
 144          /***********************************************************************
 145          subroutine name: initsystem
 146          input variable:       /
 147          output variable:    /
 148          description: initialize the system variable,for interrupt\timer\uart\
 149          ***********************************************************************/
 150          void InitSystem(void)
 151          {
 152   1      
 153   1              uchar i;
 154   1      
 155   1              IE = 0;                 
 156   1              TMOD = 0x21;                    
 157   1              PCON = 0x80;                    
 158   1              SCON = 0x50;            
 159   1              IP = 0x02;                      
 160   1              ET0 = 1;                        
 161   1              TCON = 0;                       
 162   1              LOAD_TIMER0(TimerH_1ms, TimerL_1ms);
 163   1              TI = 0;
 164   1              RI = 0;
 165   1              for(i=0;i<TrkTal;i++)
 166   1              {
 167   2                      CHECK_Reg[i] = 0;
 168   2                      TimerCount[i] = 0;
 169   2              }
 170   1      
 171   1              SYSPINSTA = 0;
 172   1              FlagP10 = 0;
 173   1              FlagP32 = 0;
 174   1      
 175   1              Counter1ms = 0;
 176   1              Flag_10ms = 0;

⌨️ 快捷键说明

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