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

📄 main.lst

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

 179   1      
 180   1              Read_LowST = 0;
 181   1              Read_SingalST = 0;
 182   1              Read_PlowST = 0;
 183   1              Dailtimes = 0;
 184   1      
 185   1              pinnop11 = 0;
 186   1              pinnop12 = 0;
 187   1              pinnop13 = 0;
 188   1              pinnop14 = 0;
 189   1              pinnop15 = 0;   
 190   1              pinnop16 = 0;
 191   1              pinnop17 = 1;
 192   1              pinnop37 = 0;
 193   1              
 194   1              TR0 = 1;
 195   1              EA = 1;
 196   1      }
 197          
 198          void Reset_Check(void)
 199          {
 200   1              uchar i;
 201   1              
 202   1              for(i=0;i<TrkTal;i++)
 203   1              {
 204   2                      CHECK_Reg[i] = 0;
 205   2                      TimerCount[i] = 0;
 206   2              }
 207   1              FlagP32 = 0;
 208   1              FlagP10 = 0;
 209   1              SYSPINSTA = 0;
 210   1      }
 211          /************************************************************************
 212          subroutine name: Singal_Scan
 213          input variable:  P3口为信号音电平输入口,共2路信号
 214          output variable: SYSPINSTA
 215          description: 主要扫描信号忙音和回铃  
 216          *************************************************************************/
 217          void Singal_Scan(void)
 218          {
 219   1      uchar i;
 220   1      uint temp;
 221   1      uchar GROUP_ST_ANAL,GROUP_ST_NEW;
 222   1      
 223   1              GROUP_ST_NEW = P3>>3;
 224   1              GROUP_ST_ANAL=GROUP_ST_NEW^Read_SingalST;
 225   1              Read_SingalST = GROUP_ST_NEW;
 226   1              
 227   1              for(i=0;i<2;i++)
 228   1              {
 229   2                      temp = CHECK_Reg[i];                                    //为了节省时间使用内部变量
 230   2                      if( GROUP_ST_ANAL & 0x01 )
 231   2                      {
 232   3                              if(temp>(EXT_SCAN_ON+ResRingTone_ContinueC))     //表示接收到4秒电平
 233   3                              {
 234   4                                      if((TimerCount[i]&0xf0)==0x20)                  //mode =2
 235   4                                      {
 236   5                                              TimerCount[i]++;
 237   5                                              TimerCount[i]+= 0x10;                           //mode =3
 238   5                                              if((TimerCount[i]&0x0f)>ResRingperiod)
 239   5                                              {
 240   6                                                      SYSPINSTA |= 3<<(2*i);  //表示接收到回铃
C51 COMPILER V8.08   MAIN                                                                  08/05/2008 10:21:25 PAGE 5   

 241   6                                                      CHECK_Reg[i]=0;
 242   6                                                      TimerCount[i] = 0;
 243   6                                                      continue;                                       //检测到后直接退出
 244   6                                              }
 245   5                                      }
 246   4                                      else
 247   4                                      {
 248   5                                              TimerCount[i] = 0x30;
 249   5                                      }
 250   4                              }
 251   3                              else if(temp>(EXT_SCAN_ON+ResRingTone_ContinueO))
 252   3                              {
 253   4                                      if((TimerCount[i]&0xf0)==0x30)                  //mode = 3
 254   4                                      {
 255   5                                              TimerCount[i]&= 0x0f;
 256   5                                              TimerCount[i]+= 0x20;                           //mode =2
 257   5                                      }
 258   4                                      else
 259   4                                      {
 260   5                                              TimerCount[i] = 0x20;
 261   5                                      }
 262   4                              }
 263   3                              else if(temp>(EXT_SCAN_ON+BusyTone_Continue))
 264   3                              {
 265   4                                      if((TimerCount[i]&0xf0)==0x10)
 266   4                                      {
 267   5                                              TimerCount[i]++;
 268   5                                              if((TimerCount[i]&0x0f)>Busyperiod*2)
 269   5                                              {
 270   6                                                      SYSPINSTA |= 2<<(2*i);  //表示接收到信号
 271   6                                                      TimerCount[i] = 0;
 272   6                                                      CHECK_Reg[i] = 0;
 273   6                                                      continue;                                       //检测到后直接退出
 274   6                                              }
 275   5                                      }
 276   4                                      else
 277   4                                      {
 278   5                                              TimerCount[i] = 0x10;
 279   5                                      }
 280   4                              }
 281   3                              else
 282   3                              {
 283   4                                      TimerCount[i] = 0;
 284   4                              }
 285   3                              CHECK_Reg[i] = EXT_SCAN_ON;                                     //重新启动检测计数      
 286   3                      }
 287   2                      else
 288   2                      {
 289   3                              if( CHECK_Reg[i] >=EXT_SCAN_ON)
 290   3                                      CHECK_Reg[i]++;
 291   3                      }               
 292   2                      GROUP_ST_ANAL = GROUP_ST_ANAL >>1;
 293   2              }
 294   1      }
 295          
 296          /*********************************************************************************
 297          subroutine name: PLOW_Scan
 298          input variable:       /
 299          output variable:   SYSPINSTA
 300          description: 主要判断脚P32是否到达预定的周期数         
 301          *********************************************************************************/
 302          void PLOW_Scan(void)
C51 COMPILER V8.08   MAIN                                                                  08/05/2008 10:21:25 PAGE 6   

 303          {
 304   1      uchar GROUP_ST_ANAL,GROUP_ST_NEW;
 305   1      
 306   1              GROUP_ST_NEW = P3&0x04;
 307   1              GROUP_ST_NEW >>= 2;
 308   1              GROUP_ST_ANAL=GROUP_ST_NEW^Read_PlowST;
 309   1              Read_PlowST = GROUP_ST_NEW;
 310   1              
 311   1              if( GROUP_ST_ANAL & 0x01 )
 312   1              {
 313   2                      CHECK_Reg[2] = EXT_SCAN_ON;
 314   2                      if( EXT_SCAN_PRI )
 315   2                              CHECK_Reg[2]++;
 316   2                      else
 317   2                              goto NO_PRI;
 318   2              }
 319   1              else
 320   1              {
 321   2                      if( CHECK_Reg[2] >EXT_SCAN_ON)
 322   2                      {
 323   3                              if( CHECK_Reg[2] >EXT_SCAN_LEN )
 324   3                              {
 325   4      NO_PRI:                 if( (GROUP_ST_NEW&0X01)==0)
 326   4                                      {
 327   5                                              TimerCount[2]++;
 328   5                                              GROUP_ST_NEW =P3;
 329   5                                              GROUP_ST_NEW = ~GROUP_ST_NEW;
 330   5                                              GROUP_ST_NEW &=0x03;
 331   5                                              GROUP_ST_NEW++;
 332   5                                              if(TimerCount[2]>=GROUP_ST_NEW) //如果P32收到低,查看是否收到P3031个数字
 333   5                                              {
 334   6                                                      SYSPINSTA |=0x40;                       //收到就第5位为1
 335   6                                                      TimerCount[2]= 0;
 336   6                                              }
 337   5                                      }
 338   4                                      CHECK_Reg[2] = EXT_SCAN_OFF;
 339   4                              }
 340   3                              else
 341   3                              {
 342   4                                      CHECK_Reg[2]++;
 343   4                              }
 344   3                      }
 345   2                      else
 346   2                      {
 347   3                              CHECK_Reg[2] = EXT_SCAN_OFF;
 348   3                      }
 349   2              }
 350   1      }
 351          
 352          /********************************************************************************
 353          subroutine name: Low_Scan
 354          input variable:       /
 355          output variable:   SYSPINSTA
 356          description: 主要判断脚P35,P10电平          
 357          ********************************************************************************/
 358          void Low_Scan(void)
 359          {
 360   1      uchar i;

⌨️ 快捷键说明

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