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

📄 output.lst

📁 这是一个单片机的项目
💻 LST
📖 第 1 页 / 共 3 页
字号:
 401   2          }
 402   1      }
 403          
 404          /*********************************************************************************************************
             -**
 405          功能:Extern0;产生外部中断0,是仲裁机分配IIC使用权的。
 406          描述:FlagMutex---用于隔离外部中断,假如一次外部中断没有执行完,不能响应下一次外部中断;
 407               FlagExt0---外部中断期间标志;P20---保证IIC使用权已经完全释放才可以再次响应。
 408          参数:无
 409          返回:无
 410          **********************************************************************************************************
             -**/
 411          void EXT0() interrupt 0 using 1
 412          { 
 413   1         if((FlagExt0 == 0) && (P20 == 1))
 414   1         {
 415   2             FlagExt0 = 1;
 416   2         }
 417   1      }
 418          
 419          /*********************************************************************************************************
             -**
 420          功能:ClearMyRom
 421          描述:清零字节数存储地址
 422          参数:无
 423          返回:无
 424          **********************************************************************************************************
             -**/
 425          void ClearMyRam(uint address)
 426          {
 427   1          MyWriteOneByte(address,0x00);
 428   1              MyWriteOneByte(address+1,0x00);
 429   1      }
 430          
 431          /*********************************************************************************************************
             -**
 432          功能:SetDataBytes
 433          描述:设置自带RAM的字节长度
 434          参数:address---存放长度的地址 len---长度值
 435          返回:无
 436          **********************************************************************************************************
             -**/
 437          void SetMyDataBytes(uint address,uchar len)
 438          {
 439   1              uint num;
 440   1              xdata uchar temp[2];
 441   1              MyReadBytes(address,temp,2);
 442   1              num = temp[0] + temp[1] * 0x100 + len;  
 443   1              temp[0]=num%256;
 444   1              temp[1]=num/256;  
 445   1          MyWriteBytes(address,temp,2);
 446   1      }
 447          
 448          /*********************************************************************************************************
             -**
 449          功能:GetMyDataBytes
 450          描述:得到自带RAM里的数据字节数
 451          参数:address---存放长度的地址
C51 COMPILER V7.50   OUTPUT                                                                03/17/2008 20:38:41 PAGE 9   

 452          返回:uint
 453          **********************************************************************************************************
             -**/
 454          uint GetMyDataBytes(uint address)
 455          {
 456   1              uint num;
 457   1              xdata uchar temp[2] = {0x00,0x00};
 458   1              MyReadBytes(address,temp,2);
 459   1              num = temp[0] + temp[1] * 0x100;
 460   1              return num;
 461   1      }
 462          
 463          /*********************************************************************************************************
             -**
 464          功能:ClearComRam
 465          描述:清零字节数存储地址
 466          参数:address---需要清零的地址
 467          返回:无
 468          **********************************************************************************************************
             -**/
 469          void ClearComRam(uint address)
 470          {
 471   1          ComWriteOneByte(address,0x00);
 472   1              ComWriteOneByte(address+1,0x00);
 473   1      }
 474          
 475          /*********************************************************************************************************
             -**
 476          功能:SetComDataBytes;设置字节数的函数
 477          描述:设置公共RAM的字节长度。是先读出长度,再累加一个需要设置的长度。
 478          参数:address---需要设置字节数的地址;len---需要设置的长度。
 479          返回:无
 480          **********************************************************************************************************
             -**/
 481          void SetComDataBytes(uint address,uchar len)
 482          {
 483   1              uint num;
 484   1              xdata uchar temp[2];
 485   1              ComReadBytes(address,temp,2);
 486   1              num = temp[0] + temp[1] * 0x100 + len;   
 487   1              temp[0]=num%256;
 488   1              temp[1]=num/256;
 489   1          ComWriteBytes(address,temp,2);
 490   1      }
 491          
 492          /*********************************************************************************************************
             -**
 493          功能:GetComDataBytes;取到字节数的函数
 494          描述:取得公共RAM里的数据字节数
 495          参数:address---存放字节数的地址
 496          返回:uint
 497          **********************************************************************************************************
             -**/
 498          uint GetComDataBytes(uint address)
 499          {
 500   1              uint num;
 501   1              xdata uchar temp[2] = {0x00,0x00};
 502   1      
 503   1              ComReadBytes(address,temp,2);
 504   1              num = temp[0] + temp[1] * 0x100;
 505   1              return num;
 506   1      }
C51 COMPILER V7.50   OUTPUT                                                                03/17/2008 20:38:41 PAGE 10  

 507          
 508          /*********************************************************************************************************
             -**
 509          功能:WsSerialRecieve,接收外设发送来的数据。
 510          描述:通过串口中断接收外设发送过来的数据,保存在RecvDataBuff数组里,数据接收完毕时通过标识FlagProcessRecvDa
             -ta
 511               通知Process7017RecvData或者Process7053RecvData函数来打包接收的数据。
 512          参数:无
 513          返回:无
 514          **********************************************************************************************************
             -**/
 515          void WsSerialRecieve() interrupt 4 using 3    //注意:这个函数在程序里面没有用到,但是删除后有问题,暂时我
             -们也不知道什么原因!
 516          { 
 517   1         if(RI) 
 518   1         {  
 519   2           uchar ch;
 520   2               RI = 0; 
 521   2           ch = SBUF; 
 522   2           if(ch==0x3E)                   //若第一个字符为数据开始字符">"。
 523   2           { 
 524   3                 FlagStartRecv=1;             //开始接收标志置位。
 525   3                 RecvDataCount = -1;          //第一个字符不接收。
 526   3               }
 527   2      
 528   2           if(FlagStartRecv)              //若可以开始接收
 529   2               {         
 530   3                 if(RecvDataCount >=0)        //若接收的个数大于0,验证接收个数的有效性。
 531   3                 {
 532   4                   RecvDataBuff[RecvDataCount]=ch;    //保存接收的数据
 533   4                 }
 534   3                 RecvDataCount++;                     //接收的个数加一
 535   3                 if(RecvDataCount > (RecvDataSize-1)) //如果接收的数据已经接收完毕
 536   3             {
 537   4                         FlagProcessRecvData=1;           //FlagProcessRecvData置位,通知函数来打包该数据。              
 538   4                 FlagStartRecv=0;                 //开始接收标识复位,暂时不接受外设数据。
 539   4                 RecvDataCount=-1;                //接收个数也复位为-1.
 540   4                 }
 541   3                }
 542   2          }
 543   1      }
 544          
 545          /*********************************************************************************************************
             -**
 546          功能:CopyToMyRam,从公共RAM里拷贝相应的数据到自己的RAM。
 547          描述:实现从公共RAM里通过数组CopyBuff[COPYLEN]拷贝数据到自己的RAM,如果长度不超过缓冲区长度就一次拷贝过去,
             -假
 548               如长度超过缓冲区长度就分几次拷贝过去。
 549          参数:address1--自带RAM命令起始地址 address2--公共RAM命令起始地址 lenght--命令字节长度 
 550          返回:无
 551          **********************************************************************************************************
             -**/
 552          void CopyToMyRam(uint address1,uint address2,uint length)
 553          {
 554   1         xdata uchar CopyBuff[COPYLEN];   //缓冲区数组。
 555   1         uchar i,len1,len2;
 556   1         len1=(uchar)(length / COPYLEN);  //拷贝的次数。
 557   1         len2=(uchar)(length % COPYLEN);  //拷贝的余数。
 558   1      
 559   1              if(length>0)                    //验证length的有效性。
 560   1              {
 561   2                       if(length>COPYLEN)         //length大于缓冲区的长度
C51 COMPILER V7.50   OUTPUT                                                                03/17/2008 20:38:41 PAGE 11  

 562   2                       {
 563   3                              for(i=0;i<len1;i++)
 564   3                              {
 565   4                                 ComReadBytes(address1,CopyBuff,COPYLEN);   
 566   4                                 MyWriteBytes(address2,CopyBuff,COPYLEN);                   
 567   4                         address1  += COPYLEN ;
 568   4                         address2  += COPYLEN ;
 569   4                              }
 570   3                              ComReadBytes(address1,CopyBuff,len2);   
 571   3                          MyWriteBytes(address2,CopyBuff,len2);
 572   3                       }      
 573   2                       else                      //length小于缓冲区的长度。
 574   2                       {
 575   3                              ComReadBytes(address1,CopyBuff,length);   
 576   3                              MyWriteBytes(address2,CopyBuff,length);
 577   3                   }
 578   2                }         
 579   1      }
 580          
 581                                 
 582          /*********************************************************************************************************
             -**
 583          功能:CopyAllToMyRam(),把公共RAM中所有相应的数据拷贝到再带RAM中去。
 584          描述:实现把公共RAM中所有相应的数据拷贝到再带RAM中去,主要是拷贝服务器发来的存储在公共RAM中的命令。
 585          参数:无
 586          返回:无
 587          **********************************************************************************************************
             -**/
 588          void CopyAllToMyRam()
 589          {       
 590   1          uchar len = 0; 
 591   1      
 592   1          len = ComReadOneByte(ComAlarmLenAdd1);            //取出公共RAM中从机1报警动作号的长度。
 593   1              if((len > 0) && (len <= MaxSlaveAlarmLen))
 594   1              {
 595   2                  CopyToMyRam(ComAlarmStart1,Ws1Alarm,len);     //再把公共RAM中从机1报警动作号拷贝到输出机自带RAM中去。
 596   2                      MyWriteOneByte(Ws1AlarmLen,len);              //再把公共RAM中从机1报警动作号长度拷贝到输出机自带RAM中去

⌨️ 快捷键说明

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