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

📄 main.lst

📁 AT89C51 I2C接口通信程序例程.rar
💻 LST
📖 第 1 页 / 共 5 页
字号:
 233   1              CLUTHCTL = 1;
 234   1              MODESIG = 0;    //用于模式控制的信号输入
 235   1              for(index = 0;index<BUFFER_LENGTH;index++)
 236   1              {                               //初始化串行口缓冲区
 237   2                      RcvBUF[index] = 0;
 238   2                      TrxBUF[index] = 0;
 239   2              }
 240   1      }
 241          
C51 COMPILER V7.04   MAIN                                                                  12/26/2007 09:33:09 PAGE 5   

 242          //***********************************************************************
 243          //电机、离合器状态初始化函数
 244          //State : FR ** ** ** ** ** MR ML
 245          void System_SetMoto(void)
 246          {
 247   1              uchar Temp = CurConfig.MotoState;
 248   1              if(Temp&MOTO_MOVL)              //如果ML=1,离合器1吸合
 249   1              {
 250   2                      EA = 0;
 251   2                      CLUTH = 0;                      //离合器1吸合
 252   2                      CLUTHCTL = 0;           //打开离合器屏蔽端口
 253   2                  EA = 1;
 254   2              }
 255   1              else if(Temp&MOTO_MOVR) //如果MR=1,离合器2吸合
 256   1              {
 257   2                      EA = 0;
 258   2                      CLUTH = 1;                      //离合器2吸合
 259   2                      CLUTHCTL = 0;           //打开离合器屏蔽端口
 260   2                      EA = 1;
 261   2              }
 262   1              else
 263   1              {
 264   2                      ////添加系统出错代码
 265   2              }
 266   1      }
 267          
 268          
 269          //***********************************************************************
 270          //系统电机运行函数
 271          void System_MotoRun(uint time)
 272          {
 273   1              uchar Temp = CurConfig.MotoState;
 274   1              if(Temp&MOTO_MOVL)              //如果ML=1,电机1吸合
 275   1              {
 276   2                      EA = 0;
 277   2                      MOTO = 0;                       //电机1吸合                     
 278   2                      MOTOCTL = 0;            //打开电机屏蔽端口
 279   2                      LEDL = 0;
 280   2                      EA = 1;
 281   2                      if(time == 0)           
 282   2                              return ;                //时间为零则一直走纸
 283   2                      else
 284   2                              Delay_nms(time);//延时100ms
 285   2                      EA = 0;
 286   2                      MOTOCTL = 1;            //关闭电机屏蔽端口
 287   2                      LEDL = 1;
 288   2                      EA = 1;
 289   2              }
 290   1              else if(Temp&MOTO_MOVR) //如果MR=1,电机2吸合
 291   1              {
 292   2                      EA = 0;
 293   2                      MOTO = 1;                       //电机2吸合                     
 294   2                      MOTOCTL = 0;            //打开电机屏蔽端口
 295   2                      LEDR = 0;
 296   2                      EA = 1;
 297   2                      if(time == 0)
 298   2                              return ;                //时间为零则一直走纸
 299   2                      else
 300   2                              Delay_nms(time);//延时100ms
 301   2                      EA = 0;
 302   2                      MOTOCTL = 1;            //关闭电机屏蔽端口
 303   2                      LEDR = 1;
C51 COMPILER V7.04   MAIN                                                                  12/26/2007 09:33:09 PAGE 6   

 304   2                      EA = 1;
 305   2              }
 306   1              else
 307   1              {
 308   2                      //添加系统出错代码
 309   2              }
 310   1      }
 311          
 312          //***********************************************************************
 313          //系统电机停止函数
 314          void System_MotoStop(void)
 315          {       
 316   1              EA = 0;
 317   1              MOTOCTL = 1;            //关闭电机屏蔽端口
 318   1              LEDL = 1;
 319   1              LEDR = 1;
 320   1              EA = 1;
 321   1      }
 322          
 323          //***********************************************************************
 324          //电机、离合器状态切换函数
 325          //State : FR ** ** ** ** ** MR ML
 326          void System_ExchangeMoto(void)
 327          {
 328   1              uchar Temp = CurConfig.MotoState;       
 329   1              if(Temp&MOTO_MOVL)              //如果ML=1,电机2吸合
 330   1              {
 331   2                      EA = 0;
 332   2                      CLUTH = 1;                      //离合器2吸合
 333   2                      CLUTHCTL = 0;           //打开离合器屏蔽端口
 334   2                      EA = 1;
 335   2              
 336   2                      Temp = MOTO_MOVR;       //更新电机状态
 337   2              }
 338   1              else if(Temp&MOTO_MOVR) //如果MR=1,电机1吸合
 339   1              {
 340   2                      EA = 0;
 341   2                      CLUTH = 0;                      //离合器1吸合
 342   2                      CLUTHCTL = 0;           //打开离合器屏蔽端口
 343   2                      EA = 1;
 344   2              
 345   2                      Temp = MOTO_MOVL;       //更新电机状态
 346   2              }
 347   1              else
 348   1              {
 349   2                      //添加系统出错代码
 350   2              }
 351   1              
 352   1              CurConfig.MotoState = Temp;
 353   1      }
 354          
 355          //***********************************************************************
 356          //系统反馈当前信息函数,包括:走纸到位信息,射击有效信息,系统初始化成功信息。
 357          //                                                        
 358          void System_SendCommand(uint comid)
 359          {
 360   1              uchar check = 0,index;
 361   1              
 362   1              TrxBUF[0] = UART_MESGFLAG;                              //起始字节
 363   1              
 364   1              TrxBUF[2] = (uchar)(comid&0xFF);                //指令码2
 365   1          
C51 COMPILER V7.04   MAIN                                                                  12/26/2007 09:33:09 PAGE 7   

 366   1              TrxBUF[1] = (uchar)((comid>>8)&0xFF);   //指令码1
 367   1              
 368   1              TrxBUF[3] = 0x00;                                               //数据码1
 369   1              
 370   1              switch(comid)
 371   1              {
 372   2                      case MOTO_CFGRFB :      //如果是电机配置信息读取数据
 373   2                              
 374   2                              TrxBUF[4] = CurConfig.MotoRunCycle;
 375   2                              
 376   2                              break;
 377   2      
 378   2                      case IRLED_CFGRFB : //如果是红外灯配置信息读取数据
 379   2                              
 380   2                              TrxBUF[4] = CurConfig.IRLEDLight;
 381   2                              
 382   2                              break;
 383   2      
 384   2                      case MOTO_STATERFB ://如果是电机状态信息读取数据
 385   2                              
 386   2                              TrxBUF[4] = CurConfig.MotoState;
 387   2      
 388   2                              break;
 389   2                              
 390   2                      default :                       //其他为0x00 
 391   2                              
 392   2                              TrxBUF[4] = 0x00;
 393   2      
 394   2                              break;
 395   2              }
 396   1              
 397   1              for(index = 0;index<BUFFER_LENGTH-1;index++)
 398   1                      
 399   1                      check += TrxBUF[index];
 400   1              
 401   1              TrxBUF[BUFFER_LENGTH-1] = check;
 402   1              
 403   1              UART_SendStr(TrxBUF,BUFFER_LENGTH);
 404   1      }
 405          
 406          //***********************************************************************
 407          //系统解析当前信息函数
 408          void System_ParseCommand(void)
 409          {
 410   1              uint comid;
 411   1              uchar temp;
 412   1              
 413   1              comid = (uint)RcvBUF[2];
 414   1              comid += (((uint)RcvBUF[1])<<8);
 415   1              
 416   1              switch(comid)
 417   1              {
 418   2                      case MOTO_RUN :                 //如果是电机运行
 419   2                              
 420   2                              System_MotoRun((uint)CurConfig.MotoRunCycle);
 421   2                              
 422   2                              System_SendCommand(MOTO_STOP);                  
 423   2                              
 424   2                              break;
 425   2      
 426   2                      case MOTO_STATER :              //如果是读取电机当前状态
 427   2                              
C51 COMPILER V7.04   MAIN                                                                  12/26/2007 09:33:09 PAGE 8   

 428   2                              System_SendCommand(MOTO_STATERFB);
 429   2                              
 430   2                              break;
 431   2                      
 432   2                      case MOTO_CFGR :                //读取电机单步运行时间
 433   2                              
 434   2                              System_SendCommand(MOTO_CFGRFB);
 435   2                              
 436   2                              break;
 437   2                      
 438   2                      case IRLED_CFGR :               //如果是读取红外灯亮度
 439   2                              
 440   2                              System_SendCommand(IRLED_CFGRFB);
 441   2                              
 442   2                              break;
 443   2      
 444   2                      case IRLED_ON :                 //如果是红外灯打开控制码
 445   2                              
 446   2                              LEDCTL1 = 0;
 447   2                              
 448   2                              break;
 449   2                      
 450   2                      case IRLED_OFF :                //如果是红外灯关闭控制码
 451   2                              
 452   2                              LEDCTL1 = 1;
 453   2                              
 454   2                              break;
 455   2                      
 456   2                      case NVM_RESET :                //如果是EEPROM复位控制码
 457   2                              
 458   2                              CurConfig.MotoState = DEFAULT_MOTOSTATE;        //初始化电机状态
 459   2                              
 460   2                              CurConfig.MotoRunCycle = DEFAULT_MOTOCYCLE;     //电机缺省单步运行时间100ms
 461   2                              
 462   2                              CurConfig.IRLEDLight = DEFAULT_IRLEDLIGHT;      //红外灯缺省亮度                
 463   2                              
 464   2                              NVM_WriteStr(NVM_CONTROL,NVM_MOTOSTATE_ADDR,(uchar *)(&CurConfig),3);
 465   2      
 466   2                              System_SetMoto();
 467   2                              
 468   2                              break;
 469   2                      
 470   2                      case MOTO_CFGM :                //如果是修改电机单步执行时间
 471   2                              

⌨️ 快捷键说明

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