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

📄 youyakokngzhi.c

📁 基于ARM7 LPC2124 油压控制系统原程序
💻 C
📖 第 1 页 / 共 3 页
字号:
								  U0THR=0xfe;
								  while( (U1LSR&0x20)==0 );	   /*等待数据发送完成*/
								  uarttmp1=uartrcv[2];		                                   
		                          uarttmp2=uartrcv[3]*0x10000+uartrcv[4]*0x100+uartrcv[5];
		                          yunxingli=uarttmp1*1.0+uarttmp2/10000000.0;
    								
								  break;	
						case 0x17:
						          PWM_Stop();                             //停止
								  U0THR=0x17;
								  U0THR=0x17;
								  U0THR=0xfe;
								  while( (U0LSR&0x20)==0 );	   /*等待数据发送完成*/
								  
								  break;
						case 0x18:                             //力值请零
								  U0THR=0x18;
								  U0THR=0x18;
								  U0THR=0xfe;
								  while( (U0LSR&0x20)==0 );	   /*等待数据发送完成*/
								  syl_clr=syl_sjz;
								  ybl_clr=ybl_sjz;
								  chuzhi_bz=0x00;
								  break;
						case 0x19:                             //PID自整定
								  U0THR=0x19;
								  U0THR=0x19;
								  U0THR=0xfe;
								  while( (U0LSR&0x20)==0 );	   /*等待数据发送完成*/
						
						          break;
						case 0x21:                             //压边力校准
								  U0THR=0x21;
								  U0THR=0x21;
								  U0THR=0xfe;
								  while( (U0LSR&0x20)==0 );	   /*等待数据发送完成*/
						          uarttmp1=uartrcv[2];		                                  
		                          uarttmp2=uartrcv[3]*0x10000+uartrcv[4]*0x100+uartrcv[5];
		                          lijiaozhun=uarttmp1*1.0+uarttmp2/10000000.0;
						        
						          break;
						
						default:  break;							  
					}
					uartrcv_new=0x00;
					uartrcv_cnt=0x00;
				}
				else if(uartrcv_new==0x88)
				{
					    U0THR=0x22;                             //校验错误帧命令
					switch(uartrcv[0])
					{
						case 0x11:
								  U0THR=0x11;                  //错误代码
								  U0THR=0x33;                  //校验和
								  break;
						case 0x14:                             //
								  U0THR=0x14;
								  U0THR=0x36;
								  break;	
						case 0x15:                             //
								  U0THR=0x15;
								  U0THR=0x37;
								  break;
						case 0x16:                             //
								  U0THR=0x16;
								  U0THR=0x38;
								  break;	
						case 0x17:                             //
								  U0THR=0x17;
								  U0THR=0x39;
								  break;
						case 0x18:                             //
								  U0THR=0x18;
								  U0THR=0x3a;
								  break;
						case 0x19:                             //角度清零
								  U0THR=0x19;
								  U0THR=0x3b;
								  break;
						case 0x21:                             //角度清零
								  U0THR=0x21;
								  U0THR=0x43;
								  break;			  							  	  
						default:  break;							  
					}
					U0THR=0xfe;                  			   //帧尾
					uartrcv_new=0x00;
					uartrcv_cnt=0x00;					
				}
				
		}
				/*if(online==0x00)
				{
					break;
				}*/
			
    
        
}


/********************************************************************************************************
** 名称:System_Ini()
** 功能:系统初始化
** 说明:使用外部11.0592MHz晶振,根据CONFIG.H文件配置,Fpclk=11.0592MHz,Fcclk=44MHz       
** 入口参数:无
** 出口参数:无
** 全局变量:无
** 调用函数:引脚设置、中断设置、时钟设置
********************************************************************************************************/
void System_Ini(void)
{
	
//===========================================引脚初始化==================================================
	PINSEL0=0x00000005;		/*设置所有管脚连接,管脚功能选择详见下位机编程文档*/
	PINSEL1=0x00000401;
	PINSEL2=0x00000034; 

	IO0DIR=0x00600081;		/*设置所有管脚方向,管脚方向定义详见下位机编程文档*/
	IO1DIR=0x03000000;
	

	cs_low;         /*初始CPLD并口状态为0*/
	clk_low;       	/*初始CPLD并口状态为0*/
	IO1CLR=CPLD_DB0;       	/*初始CPLD并口状态为0*/
	IO0CLR=CPLD_DB1;       	/*初始CPLD并口状态为0*/
	IO0CLR=CPLD_DB2;       	/*初始CPLD并口状态为0*/
	IO0CLR=CPLD_DB3;       	/*初始CPLD并口状态为0*/
	IO1CLR=CPLD_DB4;       	/*初始CPLD并口状态为0*/
	IO0CLR=CPLD_DB5;       	/*初始CPLD并口状态为0*/ 
	IO0CLR=CPLD_DB6;       	/*初始CPLD并口状态为0*/
	IO0CLR=CPLD_DB7;       	/*初始CPLD并口状态为0*/
	IO0CLR=RDY;       	    /*初始CPLD并口状态为0*/
	IO0CLR=SN;       	    /*初始CPLD并口状态为0*/ 
	soft_hight;
    delayuS(2);
    soft_low;
    delayuS(2);
    soft_hight;
    data_cnt=0x00;
    chuzhi_bz=0x00;
//===========================================中断设置====================================================
	VPBDIV=0;
	EXTMODE=0x01;					/*设置EINT0中断为边沿触发模式*/
	EXTPOLAR=0x01;					/*设置EINT0中断为上升沿有效*/
	VICIntSelect=0x00000000;		/*设置所有通道为IRQ中断*/
	//---------------------------------------------------------------------------------------------------
	VICVectCntl1 = 0x20|14;			/*EINT0中断通道(CPLD中断信号)分配到IRQ slot 1*/
	VICVectAddr1 = (int)IRQ_Eint0;	/*设置EINT0向量地址*/
	EXTINT=0x01;                    /*清零中断标志*/
	VICIntEnable = 0x00004000;		/*使能EINT0中断*/
	//---------------------------------------------------------------------------------------------------
	//VICVectCntl3 = 0x20|4;			/*TIME0中断通道分配到IRQ slot 3*/
	//VICVectAddr3 = (int)IRQ_Time0;	/*设置TIME0向量地址*/
	//VICIntEnClr = 0x00000010;		    /*禁能TIME0中断*/
    //---------------------------------------------------------------------------------------------------
	//VICVectCntl2 = 0x20|6;			/*UART0中断通道分配到IRQ slot 2*/
	//VICVectAddr2 = (int)IRQ_UART0;	/*设置UART0向量地址*/
	//VICIntEnable = 0x00000040;		/*使能UART0中断*/
//===========================================时钟设置====================================================
	#if(Fpclk/(Fcclk/4))==1
	VPBDIV=0;
	#endif
	#if(Fpclk/(Fcclk/4))==2
	VPBDIV=2;
	#endif
	#if(Fpclk/(Fcclk/4))==4
	VPBDIV=1;
	#endif
//=======================================================================================================
 	UART0_Ini();
//--------------------------------------------------------------------------------
    uartrcv_new=0x00;
	ybl_sjz=0.0;
	syl_sjz=0.0;
	ybl_clr=0.0;
	syl_clr=0.0;
//=======================================================================================================
	      							   /*初始化实时时钟*/
//=======================================================================================================
//    Time0Enable();
//=======================================================================================================
}

/********************************************************************************************************
*Function Name: main(void)
*Discription:   成型极限控制功能函数
*Data:          2009/03/04      
*Author:        SuLiangwei
********************************************************************************************************/
int main (void)
{  
   uint8  ttp,ver;
   System_Ini();
   while(1)
   {
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
       if(U0LSR&0x01!=0)
         {
          
          	uartrcv[uartrcv_cnt]=U0RBR;		/*读取FIFO的数据,并清除中断标志*/
	 	  	uartrcv_cnt++;
		 	 	        
		  	if( uartrcv[uartrcv_cnt-1]==0xfe)        /*收到帧尾*/
		 	 {
		 	 	 ver=0;
		 	 	 for(ttp=0;ttp<(uartrcv_cnt-2);ttp++)
		 	 	 {
		 	 	 	ver+= uartrcv[ttp];
		 	 	 }
		 	 	 if(ver== uartrcv[uartrcv_cnt-2])  /*校验和正确*/
		 	 	 {
		 	 	 	uartrcv_new=0xff;
		 	 	 }
		 	 	 else                              /*校验和错误*/
		 	 	 {
		 	 	 	uartrcv_new=0x88;
		 	 	 }
		 	  }
         
         
         }
//--------------------------------------------------------------------------------        
/*********************************************************************************/ 
       cmd_rcv();                 /**上位机指令分类接收处理函数*/
/*********************************************************************************/       
       if(online==0xff)
       {
       task_send();
       }
/********************************************************************************/       
   if(jiajinchuli==0xff)           /*夹紧力单独处理*/
    {
      
       while(jiajinli>ybl_sjz)
        {
        fxkz=0x00;
        rOut=jiajinli-ybl_sjz;
        tmp=(uint32)(rOut);
         if(tmp<2)
         {
         	PWM_Stop();
         }
         else
         {
         	PWM_Out(fxkz,tmp);
         }
        
        }
        
        jiajinchuli=0x00;
        chuzhi_bz=0x00;
      
    }
    
   if(songchichuli==0xff)           /*松弛力单独处理*/
   {
     while(ybl_sjz>songchili)
     {
       fxkz=0xff;
       rOut=ybl_sjz-songchili;
       tmp=(uint32)(rOut);
         if(tmp<2)
         {
         	PWM_Stop();
         }
         else
         {
         	PWM_Out(fxkz,tmp);
         }
       
     }
     songchichuli=0x00;
     chuzhi_bz=0x00;
   }
//--------------------------------------------------------------------------------       
     if( data_cnt>= 0x05)
       { 
          if(sq.front!=(sq.rear+1)%QUEUEMAX)         //队列未满
  		  {
			sq.rear=(sq.rear+1)%QUEUEMAX;		   //调整队尾指针,准备写入数据 
			sq.L1[sq.rear]=  yabianli;			       //实时角度值入栈
		  }
		  data_cnt=0x00;
		  
		 // if(sq.front!=(sq.rear+1)%QUEUEMAX)         //队列未满
  		 // {
		  //  sq.rear=(sq.rear+1)%QUEUEMAX;		   //调整队尾指针,准备写入数据 
		  //sq.L1[sq.rear]=  shiyanli;			       //实时角度值入栈
		  
		 // }	
       }
//--------------------------------------------------------------------------------
      if(pwm==0xff&&yunxing==0xff)                /*运行状态比例控制调整*/
      {
      	 lizhijisuan();
      	 bilikongzhi();      
         tmp=(uint32)(rOut);
         if(tmp<2)
         {
         	PWM_Stop();
         }
         else
         {
         	PWM_Out(fxkz,tmp);
         }
         pwm=0x00;
      }
      
     
   }
   
   
   
   return(0);
}

⌨️ 快捷键说明

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