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

📄 text1

📁 电能表误差测试仪的代码.为c语言编写.实现测量实时保存功能.
💻
字号:
void  Com1_int(void) interrupt 4                 
{
   uchar data   i=0;
   uchar data   Rev_buf1,Rev_buf2;
   EVEN=0;
   
   if(RI!=0)
   {
      ET0=1;
      REN=1;    
      RI=0;
      
      Timer_RS=100;                                        // 500mS未接收到下一字节则退出接收状态(恢复原始态)

      Rev_buf1=SBUF;
      Rev_buf2=Rev_buf1;
	  //SBUF=Rev_buf1;
	  
      for(i=0;i<8;i++)
	  {
	      if(Rev_buf2&0x01)
		  {EVEN=~EVEN;}
		   Rev_buf2 >>= 1;
	  }
      if(RB8!=EVEN)
	  //if(0)
	  {
	      RS232_State=0;
          RS232_Pointer=0;
          RS232_Data_CRC1=0;
		  RS232_Data_CRC2=0;
		  RS232_Data_Len=0;
	  }
      else if(RS232_State==0)                                   // 初始状态接收
      {  //
         RS232_Pointer=0;
         RS232_Data_CRC1=0;
		 RS232_Data_CRC2=0;
         RS232_Data_Len=0;
         
         RS232_buf[RS232_Pointer]=Rev_buf1;
         if(RS232_buf[RS232_Pointer]==0xfe)
         {  
            //lamp=0;
		    RS232_State=1;
            //RS232_Pointer++;
            //Timer_RS_Answer=240;/////////////////////////////////////////////////
         }
         else
         {  //lamp=0;
            RS232_State=0;
            RS232_Pointer=0;
            RS232_Data_CRC1=0;
			RS232_Data_CRC2=0;
         }
       }
      else if(RS232_State==1)                                   // 初始状态接收
      {  //
         RS232_Pointer=0;
         RS232_Data_CRC1=0;
		 RS232_Data_CRC2=0;
         RS232_Data_Len=0;
         
         RS232_buf[RS232_Pointer]=Rev_buf1;
         if(RS232_buf[RS232_Pointer]==0xfe)
         {  
            //lamp=0;
		    RS232_State=2;
           // RS232_Pointer++;
            //Timer_RS_Answer=240;/////////////////////////////////////////////////
         }
         else
         {  //lamp=0;
            RS232_State=0;
            RS232_Pointer=0;
            RS232_Data_CRC1=0;
			RS232_Data_CRC2=0;
         }
       }
      else if(RS232_State==2)                                   // 初始状态接收
      {  //
         RS232_Pointer=0;
         RS232_Data_CRC1=0;
		 RS232_Data_CRC2=0;
         RS232_Data_Len=0;
         
         RS232_buf[RS232_Pointer]=Rev_buf1;
         if(RS232_buf[RS232_Pointer]==0xfe)
         {  
            //lamp=0;
		    RS232_State=3;
            //RS232_Pointer++;
            //Timer_RS_Answer=240;/////////////////////////////////////////////////
         }
         else
         {  //lamp=0;
            RS232_State=0;
            RS232_Pointer=0;
            RS232_Data_CRC1=0;
			RS232_Data_CRC2=0;
         }
       }

      else if(RS232_State==3)
         {
		  RS232_Data_Len=0;
          if(RS232_buf[RS232_Pointer]==0x68)
          {  
            
		    RS232_State=4;
            RS232_Pointer++;
		
            //RS232_Data_CRC1+=RS232_buf[RS232_Pointer];
		    //RS232_Data_CRC2^=RS232_buf[RS232_Pointer];
            //Timer_RS_Answer=240;/////////////////////////////////////////////////
          }
          else
          {  //lamp=0;
            RS232_State=0;
            RS232_Pointer=0;
            RS232_Data_CRC1=0;
			RS232_Data_CRC2=0;
          }
         }       
      
      else if(RS232_State==4)                              // 已经接收到第一个0x68,开始接收控制码部分
      {
         //lamp=0;
	     RS232_buf[RS232_Pointer]=Rev_buf1;
         //RS232_Data_CRC1+=RS232_buf[RS232_Pointer];
         //RS232_Data_CRC2^=RS232_buf[RS232_Pointer];
         RS232_State=5;
		 RS232_Pointer++;         
      }
      else if(RS232_State==5)                              // 已经接收完地址,开始接收数据长度
      {
         RS232_buf[RS232_Pointer]=Rev_buf1;
         RS232_Data_Len=RS232_buf[RS232_Pointer];
        // RS232_Data_CRC1+=RS232_buf[RS232_Pointer];
		// RS232_Data_CRC2^=RS232_buf[RS232_Pointer];
		 RS232_Pointer++;
         if(RS232_Data_Len>60)
         {
            RS232_State=0;
            RS232_Pointer=0;
            RS232_Data_CRC1=0;
			//RS232_Data_CRC2=0;
         }
         else if(RS232_Data_Len==0)
         {
            RS232_State=7;
         }
         else 
         {
            RS232_State=6;            
          }
         
      }
      else if(RS232_State==6)                              // 开始接收数据
      {
         RS232_buf[RS232_Pointer]=Rev_buf1;
         //RS232_Data_CRC1+=RS232_buf[RS232_Pointer];
		 //RS232_Data_CRC2^=RS232_buf[RS232_Pointer];
         if(RS232_Data_Len>0) 
		    RS232_Data_Len--;
         if(RS232_Data_Len==0)
            RS232_State=7;

         RS232_Pointer++;

         
      }
      else if(RS232_State==7)                              // 已经接收到数据码,开始接收校验码
      {
         /*RS232_buf[RS232_Pointer]=Rev_buf1;

         if(RS232_buf[RS232_Pointer]==RS232_Data_CRC1)
         {
            RS232_State=5;
            RS232_Pointer++;
         }
         else
         {
            RS232_State=0;
            RS232_Pointer=0;
            RS232_Data_CRC1=0;
		    RS232_Data_CRC2=0;

         }*/
            RS232_State=8;
            RS232_Pointer++;
      }
	  else if(RS232_State==8)                              // 已经接收到数据码,开始接收校验码
      {
         /*RS232_buf[RS232_Pointer]=Rev_buf1;

         if(RS232_buf[RS232_Pointer]==RS232_Data_CRC2)
         {
            RS232_State=6;
            RS232_Pointer++;
         }
         else
         {
            RS232_State=0;
            RS232_Pointer=0;
            RS232_Data_CRC1=0;
			RS232_Data_CRC2=0;
         }*/
            RS232_State=9;
            RS232_Pointer++;
      }	
      else if(RS232_State==9)                              // 数据校验和正确,开始接收结束字符
      {
         RS232_buf[RS232_Pointer]=Rev_buf1;

         if(RS232_buf[RS232_Pointer]==0x16)
         {
            for(i=0; i<(RS232_buf[2]+3+2); i++)
                RS232_buf_bak[i]=RS232_buf[i];

            RS_Re_OK='0';
			//SBUF=22;
  		    //lamp=0;
            //RS232_Send_Sign=0;
         }

         RS232_State=0;
         RS232_Pointer=0;
         RS232_Data_CRC1=0;
		 RS232_Data_CRC2=0;
		 
      }
      else
      {
      		RS232_State=0;
      }

   }
   
   RI=0;
}

⌨️ 快捷键说明

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