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

📄 common.lst

📁 51单片机基于CAN总线通信程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 190          /*********************************************************************************************************
             -**
 191          ;;函数原型: uchar SelfTest()
 192          ;;函数功能: 自检
 193          ;;函数输入: 无
 194          ;;函数输出: 无
 195          ;;函数返回值: 00 自检通过
 196                          8位             7位             6位             5位             4位             3位             2位             1位
 197          代表    超时故障                                                    结尾霍尔    中卫霍尔        复位霍尔  电机故障
 198                            
 199          ;;被调用函数: main
 200          *********************************************************************************************************/
 201          uchar SelfTest()
 202          {
 203   1          uchar tmpchar,ucResults=0;
 204   1          if( bitHuoerRest )  //复位测试
 205   1          {
 206   2              TimerNo[7] = CVERTIME;//启动超时定时器 25s
 207   2              fTimer &= ~(0x01<<7);
 208   2              Mot(NEGATIVE,P10WM); //执行复位操作电机反转
 209   2              bitRstFlg = 1;       //标记复位操作电机启动
 210   2              do
 211   2              {    
 212   3                  tmpchar = fTimer&(0x01<<7);
 213   3                  if( !bitHuoerRest )
 214   3                  {
 215   4                 //     MOTONOFF  = 1;
 216   4                  //    TR1 = 0;
 217   4                      break;
 218   4                  }
 219   3              }
 220   2              while(!tmpchar);
 221   2              
 222   2              if( bitHuoerRest )
 223   2              {  
 224   3                 ucResults |= 0x03;    //电机故障或者复位霍尔故障
 225   3                 return ( ucResults ); 
 226   3              }
 227   2          }
 228   1          //适当延时
 229   1          Delay(200);
 230   1      
 231   1          if( bitHuoerMido )   //中卫位测试
 232   1          {
 233   2              TimerNo[7] = CVERTIME;//启动超时定时器 25s
 234   2              fTimer &= ~(0x01<<7);
 235   2              Mot(POSITIVE,P10WM);    //执行电机快正转
 236   2              bitMidoFlg = 1;       //标记中位操作电机启动
 237   2              do
 238   2              {    
 239   3                  tmpchar = fTimer&(0x01<<7);
C51 COMPILER V8.09   COMMON                                                                09/23/2008 08:34:17 PAGE 5   

 240   3                  if( !bitHuoerMido )
 241   3                  {
 242   4                  //    MOTONOFF  = 1;
 243   4                  //    TR1 = 0;
 244   4                      break;
 245   4                  }
 246   3              }
 247   2              while(!tmpchar);
 248   2      
 249   2              if( bitHuoerMido )
 250   2              {  
 251   3                 ucResults |= 0x04; //中卫霍尔故障
 252   3              }
 253   2          }
 254   1         //适当延时
 255   1          Delay(200);
 256   1          if( bitHuoerLast )   //后位测试
 257   1          {
 258   2              TimerNo[7] = CVERTIME;//启动超时定时器 25s
 259   2              fTimer &= ~(0x01<<7);
 260   2              Mot(POSITIVE,P10WM);    //执行电机快正转
 261   2              bitLastFlg = 1;       //标记结位操作电机启动
 262   2              do
 263   2              {    
 264   3                  tmpchar = fTimer&(0x01<<7);
 265   3                  if( !bitHuoerLast )
 266   3                  {
 267   4                  //    MOTONOFF  = 1;
 268   4                  //    TR1 = 0;
 269   4                      break;
 270   4                  }
 271   3              }
 272   2              while(!tmpchar);
 273   2      
 274   2              if( bitHuoerLast )
 275   2              {  
 276   3                 ucResults |= 0x08;  //末尾霍尔故障
 277   3              }
 278   2          }
 279   1        //适当延时
 280   1          Delay(200);
 281   1          if( bitHuoerRest )  //复位测试
 282   1          {
 283   2              TimerNo[7] = CVERTIME;//启动超时定时器 25s
 284   2              fTimer &= ~(0x01<<7);
 285   2              Mot(NEGATIVE,P10WM); //执行复位操作电机反转
 286   2              bitRstFlg = 1;       //标记复位操作电机启动
 287   2              do
 288   2              {    
 289   3                  tmpchar = fTimer&(0x01<<7);
 290   3                  if( !bitHuoerRest )
 291   3                  {
 292   4               //       MOTONOFF  = 1;
 293   4               //       TR1 = 0;
 294   4                      break;
 295   4                  }
 296   3              }
 297   2              while(!tmpchar);
 298   2      
 299   2              if( bitHuoerRest )
 300   2                 ucResults |= 0x03;
 301   2          }
C51 COMPILER V8.09   COMMON                                                                09/23/2008 08:34:17 PAGE 6   

 302   1          return ( ucResults );
 303   1      
 304   1      }
 305          /**************************************************************************************
 306          ;;函数原型: SysInit()
 307          ;;函数功能: 系统准备初始化阶段
 308          ;;函数输入: 无
 309          ;;函数输出: 无
 310          ;;函数返回值: 无
 311          ;;被调用函数: main
 312          ************************************************************************************/
 313          void SysReadyInit()
 314          {   uchar tmpchar,ucTxdBuf[1];
 315   1          //启动延时1等待自检命令
 316   1          TimerNo[7] = SELF_TEST_CVERTIME;//启动超时定时器 5s
 317   1          fTimer &= ~(0x01<<7);
 318   1          do
 319   1          {
 320   2              if( (CanRx.farmeSta == FULL)&&(CanRx.farmeType == MS_SELF_TEST) )
 321   2              {  
 322   3                  //做出接收应答进入自检状态
 323   3                  ucTxdBuf[0] = 0x00;//000000回复相应结果
 324   3                  CAN_TXD( MADDRESS,SM_RECEV_OK,UN_ACK,1,ucTxdBuf );
 325   3                  //上传自检结果
 326   3                  ucTxdBuf[0] = SelfTest();//开始自检
 327   3      
 328   3                  CAN_TXD( MADDRESS,SM_SELF_TEST,UN_ACK,1,ucTxdBuf );
 329   3                  CanRx.farmeSta = NULL;
 330   3                  break;
 331   3              } 
 332   2              tmpchar =  (fTimer&(0x01<<7));
 333   2      
 334   2          }
 335   1          while(!tmpchar);
 336   1          //无自检命令,电机复位申请准备命令
 337   1          
 338   1          
 339   1          //规定时间内收到请求工作命令 1分钟
 340   1          TimerNo[7] = 240;//启动超时定时器 2分钟
 341   1          fTimer &= ~(0x01<<7);
 342   1          do
 343   1          {
 344   2              if(CanRx.farmeSta == FULL)
 345   2              {
 346   3                  if( CanRx.farmeType == MS_ALLOW_IN_WORKING )
 347   3                  {
 348   4                      //应答
 349   4                      ucTxdBuf[0] = 0x00;//000000回复相应结果
 350   4                      CAN_TXD( MADDRESS,SM_RECEV_OK,UN_ACK,1,ucTxdBuf );
 351   4                      bitSysAllowWork = 1;//进入工作状态标记置一
 352   4                      CAN_TXD( MADDRESS,MS_ALLOW_IN_WORKING,UN_ACK,1,ucTxdBuf );
 353   4                      return;
 354   4                  }
 355   3                  CanRx.farmeSta = NULL;     
 356   3              } 
 357   2              else
 358   2              tmpchar =  (fTimer&(0x01<<7));
 359   2              
 360   2          }
 361   1          while(!tmpchar);
 362   1      
 363   1          //进入休眠模式
C51 COMPILER V8.09   COMMON                                                                09/23/2008 08:34:17 PAGE 7   

 364   1          while(1)
 365   1          {
 366   2          
 367   2          }
 368   1      
 369   1      
 370   1      }
 371          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    947    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----      13
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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