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

📄 movementcontrol_function.c.bak

📁 UCOSii for c8051f020
💻 BAK
📖 第 1 页 / 共 3 页
字号:
#include "includes.h"
#include "movement_control.h"
#include "MovementDefine.h"
#include "MovementControl_Function.h"
//Automatic Prototypes

void ZeroPosition_Execute(void);
void ZeroPosition_Status(void);
void SID_Execute(void);
void ImageLinkage_Execute(void);
void ImageLinkage_Status(void);
void Longitud_Execute(void);
void Longitud_Status(void);
void TubeLongitud_Execute(void);
void TubeLongitud_Status(void);
void Tabletop_LateralExecute(void);
void Tabletop_LateralStatus(void);
void Table_TilitExecute(void);
void Table_TilitStatus(void);
void InitHardware(void);
void PORT_Init(void);
void SYSCLK_Init (void);
void InitTimer0(void);



//初始化定时器0 ------ 系统时钟
void InitTimer0(void) 
{
    TMOD |= 0x01;   //定时器0:模式1(16位定时器),仅受TR0控制
    TH0  = 0xBE;    //定义Tick=100次/秒(即0.02秒/次),TH,TL值与CPU的频率有关(20M)
    TL0  = 0xE4;    //OS_CPU_C.C中定时器中断响应也要设置,OS_CFG.H中OS_TICKS_PER_SEC也有关系
    ET0=1;          //允许T0中断
    TR0=1;   
}


/***********************************************************************************
 FUNCTON NAME:   SYSCLK_Init
 FUNCTION VERSION:  
 CREATED ON:   
 FUNCTION DESCRIPTION: This routine initializes the system clock to use an 20MHz crystal as its clock source.
 INPUT PARAMETER: None
 RETURN VALUE: None
 MODIFY RECORD:
***********************************************************************************/	

void SYSCLK_Init (void)
{
   int i;                              // delay counter

   OSCXCN = 0x67;                      // start external oscillator with
                                       // 22.1184MHz crystal

   for (i=0; i < 256; i++) ;           // XTLVLD blanking interval (>1ms)

   while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle

   OSCICN = 0x88;                      // select external oscillator as SYSCLK
                                       // source and enable missing clock
                                       // detector
}

//------------------------------------------------------------------------------------


/*************************************************************************************
 FUNCTON NAME:   PORT_Init
 FUNCTION VERSION:   
 CREATED ON:   
 FUNCTION DESCRIPTION: intialize the port input and output
 INPUT PARAMETER:None
 RETURN VALUE:None
 MODIFY RECORD:
*************************************************************************************/
void PORT_Init(void)
{
	  
}
//------------------------------------------------------------------------------------




/******************************************************************************************************************
 FUNCTON NAME             : init_devices
 FUNCTION VERSION         :   
 CREATED ON               :   
 FUNCTION DESCRIPTION     : 设置硬件寄存器的初始值。
                            初始化定时器0,作为ucOS-II的系统时钟。
							还有其他的与硬件相关的初始化也可以放在这里。
 INPUT PARAMETER          : None
 RETURN VALUE             : None
 MODIFY RECORD            :
******************************************************************************************************************/


void InitHardware(void)
{   
    WDTCN = 0xde;													//禁止看门狗
	WDTCN = 0xad;

    SYSCLK_Init ();
    PORT_Init ();

    XBR2   = 0x40;	// Enable crossbar and weak pull-ups
    P1MDOUT = 0xFF;	
}

//----------------------------------------------------------------------------------------------------------------


/******************************************************************************************************************
 FUNCTON NAME             : Table_TilitStatus
 FUNCTION VERSION         :   
 CREATED ON               :   
 FUNCTION DESCRIPTION     : 
 INPUT PARAMETER          : None
 RETURN VALUE             : None
 MODIFY RECORD            :
 REMARK                   :                         _________________ 
   断开延时定时器:   Control Signal:         _____|                 |________________
                                                    ________________________
                      Timer Flag    :        _____|                        |_________
******************************************************************************************************************/
void Table_TilitStatus(void)
{
    //19--
	  //注:Q_正倾 上升沿   ||   Q_负倾 上升沿    
      //    --->>   开启 床体倾斜 断开延时 定时器
    if(IS_POS_EDGE(Output_1,Q_T_TilitPOS) || IS_POS_EDGE(Output_1,Q_T_TilitNEG))
    {
        SOFT_TIMER_RUN(Tilit_Timer,TOF,1000);
    }
      //注:Q_正倾 下降沿   ||   Q_负倾 下降沿    
      //    --->>   停止 床体倾斜 断开延时 定时器  (使其开始计时1S)
    if(IS_NEG_EDGE(Output_1,Q_T_TilitPOS) || IS_NEG_EDGE(Output_1,Q_T_TilitNEG))
    {
        SOFT_TIMER_STOP(Tilit_Timer);
    }
   
    //21--从正90度到正角度区
	  //注:I_正90度限位  下降沿   
	  //    --->>  置位A_正角度区域  、 清位A_水平区域  、 清位A_负角度区域 
    if(IS_NEG_EDGE(Tilit_Switch,I_T_P90)) 
    {
        SET_STATUS(Tilit_Switch,A_Table_POS);
        CLR_STATUS(Tilit_Switch,A_Table_ZERO);
        CLR_STATUS(Tilit_Switch,A_Table_NEG);
    }
    
    //22--水平位置位(抗齿轮间隙扰动) A_Table_POS(正角度区域标志)A_Table_NEG(负角度区域标志)条件避免再次置位
      //注:I_0度限位  上升沿   并且   A_正角度区域标志  &&  V_床体倾斜断开延时定时器 计时到 标志
	  //    --->>   置位A_水平区域  、 清位A_正角度区域  、 清位A_负角度区域 
    if(IS_POS_EDGE(Tilit_Switch,I_T_0))
    {
        if(CHECK_STATUS(Tilit_Switch,A_Table_POS) && CHECK_STATUS(Soft_Timer[Tilit_Timer],Timer_Flag))
        {
            SET_STATUS(Tilit_Switch,A_Table_ZERO);
            CLR_STATUS(Tilit_Switch,A_Table_POS);
            CLR_STATUS(Tilit_Switch,A_Table_NEG);
        }
    }
      //注:I_0度限位  下降沿   并且   A_负角度区域标志  &&  V_床体倾斜断开延时定时器 计时到 标志
	  //    --->>   置位A_水平区域  、 清位A_正角度区域  、 清位A_负角度区域 
    if(IS_NEG_EDGE(Tilit_Switch,I_T_0))
    {
        if(CHECK_STATUS(Tilit_Switch,A_Table_NEG) && CHECK_STATUS(Soft_Timer[Tilit_Timer],Timer_Flag))
        {
            SET_STATUS(Tilit_Switch,A_Table_ZERO);
            CLR_STATUS(Tilit_Switch,A_Table_POS);
            CLR_STATUS(Tilit_Switch,A_Table_NEG);
        }
    }


    //--从零度到正角度区(置标志位)床体位置是其它位置标志的条件(加入 I_T_0 的常闭条件用以防止在水平限位开关有效时搬动床体运动手柄对床体旋转的扰动)
    //注:A_水平区域  &&  !I_0度限位开关  && Q_正倾
	  //    --->>     置位A_正角度区域  、 清位A_水平区域 
	  if(CHECK_STATUS(Tilit_Switch,A_Table_ZERO) && !CHECK_STATUS(Tilit_Switch,I_T_0) && CHECK_STATUS(Output_1,Q_T_TilitPOS))
    {
        SET_STATUS(Tilit_Switch,A_Table_POS);
        CLR_STATUS(Tilit_Switch,A_Table_ZERO);
    }
  
    //--从零度到负角度区
	  //注:A_水平区域  &&  !I_0度限位开关  && Q_负倾
	  //    --->>     置位A_负角度区域  、 清位A_水平区域 
    if(CHECK_STATUS(Tilit_Switch,A_Table_ZERO) && !CHECK_STATUS(Tilit_Switch,I_T_0) && CHECK_STATUS(Output_1,Q_T_TilitNEG))
    { 
        SET_STATUS(Tilit_Switch,A_Table_NEG);
        CLR_STATUS(Tilit_Switch,A_Table_ZERO);  
    }


    //--到限位位置清区域位置标志位
	  //注:I_负90度限位 || I_正90度限位 
	  //    --->>    清位A_正角度区域  、 清位A_负角度区域 
    if(CHECK_STATUS(Tilit_Switch,I_T_N90) || CHECK_STATUS(Tilit_Switch,I_T_P90))
    {
         CLR_STATUS(Tilit_Switch,A_Table_NEG);
         CLR_STATUS(Tilit_Switch,A_Table_POS);
    }
     
    //27--从负90度到达负角度区 
       //注:I_负90度  下降沿
	   //    --->>    置位A_负角度区域  、 清位A_正角度区域 
    if(IS_NEG_EDGE(Tilit_Switch,I_T_N90))
    {
        SET_STATUS(Tilit_Switch,A_Table_NEG);
        CLR_STATUS(Tilit_Switch,A_Table_POS);
    }

    //69--PHILIPS控制台负倾允许在水平位切换;床体在水平位置时,逆时针运动命令的上升沿则置位负倾允许标志
    if(CHECK_STATUS(Local_Flag_2,V_GIM_PMS))
    {
        if(IS_POS_EDGE(Control_1,C_T_TilitNEG) && CHECK_STATUS(Tilit_Switch,A_Table_ZERO))
        {
            SET_STATUS(Local_Flag_1,V_Tilit_EnENG);
        }

        if(!CHECK_STATUS(Tilit_Switch,A_Table_ZERO))
        {
            CLR_STATUS(Local_Flag_1,V_Tilit_EnENG);
        }
      
    }
    
    //边沿更新
    UPDATE_EDGE(Output_1);
    UPDATE_EDGE(Tilit_Switch);

}
//---------------------------------------------------------------------------------------------------------------



/****************************************************************************************************************
 FUNCTON NAME              : Table_TilitExecute
 FUNCTION VERSION          :   
 CREATED ON                :   
 FUNCTION DESCRIPTION      : 
 INPUT PARAMETER           : 
 RETURN VALUE              : 
 MODIFY RECORD             :
*****************************************************************************************************************/ 
void Table_TilitExecute(void)
{
    //1--正转输出控制
    //注:C_正倾 && !C_负倾  &&  !Q_负倾    
	//    --->>   启动 Q_正倾
    if(CHECK_STATUS(Control_1,C_T_TilitPOS) && !CHECK_STATUS(Control_1,C_T_TilitNEG) && !CHECK_STATUS(Output_1,Q_T_TilitNEG))
    {
        SET_STATUS(Output_1,Q_T_TilitPOS);
    }
    
	//注:!C_正倾 || C_负倾 || I_正90限位  
	//    --->>   停止 Q_正倾
    if(!CHECK_STATUS(Control_1,C_T_TilitPOS) || CHECK_STATUS(Control_1,C_T_TilitNEG) || CHECK_STATUS(Tilit_Switch,I_T_P90))
    {
        CLR_STATUS(Output_1,Q_T_TilitPOS);
    }

    //3--反转输出控制
	//注:C_负倾 && !C_正倾  &&  !Q_正倾    并且  I_正90度限位 || A_正角度区域性 
	//    --->>   启动 Q_负倾
    if(CHECK_STATUS(Control_1,C_T_TilitNEG) && !CHECK_STATUS(Control_1,C_T_TilitPOS) && !CHECK_STATUS(Output_1,Q_T_TilitPOS))
    {
        if(CHECK_STATUS(Tilit_Switch,I_T_P90) || CHECK_STATUS(Tilit_Switch,A_Table_POS))
        {
            SET_STATUS(Output_1,Q_T_TilitNEG); 
        }
      
    }

    //注:!C_负倾 || A_水平区域  
	//    --->>   停止 Q_负倾
    if(!CHECK_STATUS(Control_1,C_T_TilitNEG) || CHECK_STATUS(Tilit_Switch,A_Table_ZERO))
    {
        CLR_STATUS(Output_1,Q_T_TilitNEG);
    }
  
    //5--
	//注:C_负倾 && A_水平区域 && !Q_正倾    并且  V_负倾允许标志   
	//    --->>   启动 Q_负倾
    if(CHECK_STATUS(Control_1,C_T_TilitNEG) && CHECK_STATUS(Tilit_Switch,A_Table_ZERO) && !CHECK_STATUS(Output_1,Q_T_TilitPOS))
    {
        if(CHECK_STATUS(Local_Flag_1,V_Tilit_EnENG))
        {
            SET_STATUS(Output_1,Q_T_TilitNEG); 
        }
    }

    //6--
	//注:C_负倾 && A_负角度区域  && !Q_正倾    
	//    --->>   启动 Q_负倾
    if(CHECK_STATUS(Control_1,C_T_TilitNEG) && CHECK_STATUS(Tilit_Switch,A_Table_NEG) && !CHECK_STATUS(Output_1,Q_T_TilitPOS))
    {
        SET_STATUS(Output_1,Q_T_TilitNEG); 
    }
    
	//注:!C_负倾 && I_负90度限位    
	//    --->>  停止 Q_负倾
    if(!CHECK_STATUS(Control_1,C_T_TilitNEG) || CHECK_STATUS(Tilit_Switch,I_T_N90) )
    {
        CLR_STATUS(Output_1,Q_T_TilitNEG); 
    }

    //输出保护
	
	//注:I_正90度限位    
	//    --->>  停止 Q_正倾
	  if(CHECK_STATUS(Tilit_Switch,I_T_P90))
    {
        CLR_STATUS(Output_1,Q_T_TilitPOS); 
    }
	//注:I_负90度限位    
	//    --->>  停止 Q_负倾
    if(CHECK_STATUS(Tilit_Switch,I_T_N90))
    {
        CLR_STATUS(Output_1,Q_T_TilitNEG); 
    }
    //注:Q_正倾 && Q_负倾
	//    --->>    停止 Q_正倾    停止 Q_负倾
    if(CHECK_STATUS(Output_1,Q_T_TilitPOS) && CHECK_STATUS(Output_1,Q_T_TilitNEG))
    {
        CLR_STATUS(Output_1,Q_T_TilitPOS); 
        CLR_STATUS(Output_1,Q_T_TilitNEG); 
    }
    

}
//---------------------------------------------------------------------------------------------------------------




/****************************************************************************************************************
 FUNCTON NAME              : Tabletop_LateralStatus
 FUNCTION VERSION          :   
 CREATED ON                :   
 FUNCTION DESCRIPTION      : 
 INPUT PARAMETER           : 
 RETURN VALUE              : 
 MODIFY RECORD             :
******************************************************************************************************************/ 
void Tabletop_LateralStatus(void)
{
    if(IS_POS_EDGE(Output_1,Q_La_MoveOutside) || IS_POS_EDGE(Output_1,Q_La_MoveInside))
    {
        SOFT_TIMER_RUN(Lateral_Timer,TOF,1000);
    }

    if(IS_NEG_EDGE(Output_1,Q_La_MoveOutside) || IS_NEG_EDGE(Output_1,Q_La_MoveInside))
    {
        SOFT_TIMER_STOP(Lateral_Timer);
    }
  

⌨️ 快捷键说明

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