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

📄 teloperate.lst

📁 一个完整的用用AVR单片机开发的电话交换机程序 希望对想学习AVR开发人有帮助
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   TELOPERATE                                                            11/15/2007 09:02:22 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE TELOPERATE
OBJECT MODULE PLACED IN TelOperate.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE TelOperate.c OPTIMIZE(2,SIZE) BROWSE NOAREGS DEBUG OBJECTEXTEND

stmt level    source

   1          /***************************************************************************
   2          //Actpro International (SZ) Ltd
   3          //Project :
   4          //File          :TelOperate.c                                                                                           Compiler:Keil
   5          //Editor: LIUYI
   6          //Data:         25-12-28                                                                                                                Ver:
   7          //General Function
   8                  1、void ExtTelRing(UCHAR RingTel);                                      //分机振铃
   9                  2、void ExtTelStopRing(UCHAR StopRingTel);      //停止分机振铃
  10          */
  11          #include <switch.h>
  12          
  13          void    TelOperateInit();
  14          void    TelOperateLoop();
  15          void    ExtTelCheck();
  16          char    ExtTelRing(UCHAR RingTel);
  17          void    RingTimeTick();
  18          char    ExtTelStopRing(UCHAR StopRingTel);
  19          //void  ResourceWatch();
  20          void    OutsideTelRingCheck();
  21          void    TakeOutsideLine(UCHAR OutsideLineNum);
  22          void    HoldOutsideLine(UCHAR OutsideLineNum);
  23          void ReleaseOutsideTelRingCheckRes(UCHAR linenum);
  24          
  25          
  26          bit             State_Flag;
  27          bit             Store_Flag;
  28          
  29          idata   int             ExtTelHoldState;
  30          idata   int             ExtTelHoldStateStore;
  31          
  32          idata   UCHAR   OutsideTelRingState;
  33          idata UCHAR     OutsideTelRingStateStore;
  34          idata UCHAR     OutsideTelRingNum[OUTSIDETELNUM][3];//记忆存储外部振铃次数
  35                                                                                                                          //2: step(2)    num(1)
  36          idata   UCHAR   OutsideTelLineState;
  37                                                                                                                          
  38          idata   int             ExtTelRingState;
  39          idata   UCHAR   RingGroup[MaxNumAtRing][6];//振铃控制资源,MaxNumAtRing为可同时振铃数
  40                                                          //6:state(1) telphonenummber(1) ringtime(2) quiettime(2)
  41                                                                                                                                          
  42          void    TelOperateInit()
  43          {
  44   1              idata   UCHAR i,j;
  45   1              
  46   1              State_Flag=1;
  47   1              Store_Flag=1;
  48   1              ExtTelHoldState                 =0xff;
  49   1              ExtTelHoldStateStore=0xff;
  50   1              
  51   1              ExtTelRingState=0x0;
  52   1              for(i=0;i<MaxNumAtRing;i++)
  53   1                      {
  54   2                              for(j=0;j<6;j++)
  55   2                                      {RingGroup[i][j]=0;}
C51 COMPILER V7.06   TELOPERATE                                                            11/15/2007 09:02:22 PAGE 2   

  56   2                      }
  57   1      
  58   1              OutsideTelRingState=0xff;
  59   1              OutsideTelRingStateStore=0xff;
  60   1              for(i=0;i<OUTSIDETELNUM;i++)
  61   1                      {
  62   2                              for(j=0;j<3;j++)
  63   2                                      {OutsideTelRingNum[i][j]=0;}                    
  64   2                      }
  65   1              OutsideTelLineState=0;  
  66   1              ReleaseOutsideTelRingCheckRes(0);
  67   1              ReleaseOutsideTelRingCheckRes(2);
  68   1      }
  69          
  70          void    TelOperateLoop()
  71          {
  72   1               ExtTelCheck();                                                         //分机摘机检测
  73   1               RingTimeTick();                                                        //振铃控制过程
  74   1               OutsideTelRingCheck();                         //外线振铃检测
  75   1               DTMFSend();     
  76   1      }
  77          
  78          void ExtTelCheck()
  79          {
  80   1              idata   UCHAR i;
  81   1              
  82   1              EnDetectHold=0;                                                 //扩展选择
  83   1              PORT=0xff;
  84   1              ExtTelHoldState=PORT;
  85   1              EnDetectHold=1;
  86   1              
  87   1              if(ExtTelHoldStateStore!=ExtTelHoldState)
  88   1                      {
  89   2                              for(i=0;i<3;i++)//延时去抖动
  90   2                                      {
  91   3                                              EnDetectHold=0;                                                 //扩展选择
  92   3                                              PORT=0xff;
  93   3                                              ExtTelHoldState=PORT;
  94   3                                              EnDetectHold=1;
  95   3                                              
  96   3                                              if(ExtTelHoldStateStore==ExtTelHoldState){return;} 
  97   3                                      }                                               
  98   2                              for(i=0;i<ExtTelNum;i++)
  99   2                                      {
 100   3                                              State_Flag=(bit)((ExtTelHoldState>>i)&0x01);
 101   3                                              Store_Flag=(bit)((ExtTelHoldStateStore>>i)&0x01);
 102   3                                              
 103   3                                              if(State_Flag)
 104   3                                                      {
 105   4                                                              if(Store_Flag)
 106   4                                                                      {//正常状态
 107   5                                                                              //rs232write(0x );
 108   5                                                                      }
 109   4                                                              else
 110   4                                                                      {//挂机动作****************
 111   5                                                                              SendHoldMessage(i);                                                                     
 112   5                                                                                      //发送挂机消息
 113   5                                                                              //rs232write(0xAA);rs232write(0x02);rs232write(i+1);rs232write(0xBB);
 114   5                                                                      }       
 115   4                                                      }
 116   3                                              else
 117   3                                                      {
C51 COMPILER V7.06   TELOPERATE                                                            11/15/2007 09:02:22 PAGE 3   

 118   4                                                              if(Store_Flag)
 119   4                                                                      {//摘机动作****************
 120   5                                                                              SendUnholdMessage(i);//发送摘机消息                                                             
 121   5                                                                              //rs232write(0xAA);rs232write(0x01);rs232write(i+1);rs232write(0xBB);
 122   5                                                                      }
 123   4                                                              else
 124   4                                                                      {//摘机状态
 125   5                                                                              //rs232write(0x );
 126   5                                                                      }                                                               
 127   4                                                      }               
 128   3                                      }
 129   2                              ExtTelHoldStateStore=ExtTelHoldState;   //更新寄存值
 130   2                      }                       
 131   1      }
 132          
 133          char    ExtTelRing(UCHAR RingTel)
 134          {
 135   1              idata  UCHAR i;
 136   1              idata   WORD    temp;
 137   1              if(RingTel>=ExtTelNum)
 138   1                      {
 139   2                              return 0xff;            //超出分机范围出错
 140   2                      }
 141   1                                                                                              //检查该分机是否已经处于振铃状态
 142   1                                                                                              
 143   1              for(i=0;i<MaxNumAtRing;i++)
 144   1                      {
 145   2                              if(RingGroup[i][0]==0)                          //查询资源
 146   2                                      {//首次配置资源
 147   3                                              
 148   3                                              RingGroup[i][0]=0x01;                           //可以振铃
 149   3                                              RingGroup[i][1]=RingTel;        //设置振铃分机号
 150   3                                              temp=RINGTIMELENGTH;
 151   3                                              RingGroup[i][2]=temp>>8;        
 152   3                                              RingGroup[i][3]=temp;                   //设置振铃时间
 153   3                                              temp=RINGQUIETTIMELENGTH;

⌨️ 快捷键说明

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