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

📄 main.c

📁 基于ucosSAEj1939的汽车组合仪表,硬件是MC9S12H128
💻 C
📖 第 1 页 / 共 2 页
字号:
  	unsigned char err;
  	unsigned char *msg;
  	
    unsigned char temp;
  	unsigned int tempstep;
  	unsigned int step;
  	char result;
    
    pdata = pdata;
      
    for(;;) 
    {
        msg = (unsigned char*)OSMboxPend(WatTemp_MBox, 0, &err);
        if(err == OS_NO_ERR) 
        {   	    	 
            if(*msg > 40) 
            {
      	        temp = (*msg - 40);
                temp = temp >> 3;			//换算为转角第一步 /8  水温换算为转角:*(90/(120-40))
                temp = temp * 9;      //换算为转角第二步 *9  90:转角满量程,80:水温满量程             
            }
      	    else 
      	    {
      	        temp = 0;
      	    }
      	    step = (unsigned int)temp * 48;			//换算为电机步数		(*48)
      	    tempstep = (unsigned int)step;             
      	    result = motor_move(TEMP,tempstep);           
        }
        OSTimeDly(150);  				                //任务挂起3s
    }         
}

/****************************************************************************************
@函数名称           : void TaskOilPress(void* pdata)           
@参数               : void* pdata 
@返回值             : None
@描述               : 机油压力任务
@作者               : 孙进,曹磊
@最后编辑时间       : 2006-03-31
@版本               : V3.1.0
*****************************************************************************************/
void TaskOilPres(void* pdata) 
{
  	unsigned char err;
  	unsigned char *msg;
  	
   	unsigned char pres;
  	unsigned int presstep;
  	unsigned int step;
   	char result;
  	
    pdata = pdata;
      
    for(;;) 
    {
        msg = (unsigned char*)OSMboxPend(OilPres_MBox, 0, &err);
        if(err == OS_NO_ERR) 
        {	       
            pres = *msg;	                  
            pres = pres >> 4;								     //换算为kpa  (*4)
            step = (unsigned int)(pres * 459);	 //换算为电机步数
            presstep = (unsigned int)step;	    	  
      	    result = motor_move(PRES,presstep);  	
        }
        OSTimeDly(50); 						               //任务挂起3s
    }    
}

#if MUTIPLE_PACKAGE_TRANSPORT						         //如果使用多包传输,则启动TaskFaultCode任务
/****************************************************************************************
@函数名称           : void TaskFaultCode(void* pdata)           
@参数               : void* pdata 
@返回值             : None
@描述               : 故障代码任务
@作者               : 孙进
@最后编辑时间       : 2006-03-31
@版本               : V3.1.0
*****************************************************************************************/
void TaskFaultCode(void* pdata) 
{
  	unsigned char err; 
  	FAULT_CODE_T *msg;
  	unsigned char i;
  	
  	pdata = pdata;
  		
  	for(;;) 
  	{
  	    msg = (FAULT_CODE_T *)OSMboxPend(FaultCode_MBox, 0, &err);
  	    if(err == OS_NO_ERR) 
  	    {
  	        OSSemPend(Printp_Sem,0,&err); 
            for(i=0;i<msg->count;i++) 
            {
                printp("FT%d ",i+1);
                printp("spn=%ld ",msg->fault_code[i].spn);
                printp("fmi=%d ",msg->fault_code[i].fmi);
                printp("oc=%d ",msg->fault_code[i].oc);
                printp("\n");                    
            }
            OSSemPost(Printp_Sem);
            OSTimeDly(50);					//任务挂起1s
  	    }   
  	}
}
#endif

/****************************************************************************************
@函数名称           : void TaskInstruc(void* pdata)           
@参数               : void* pdata 
@返回值             : None
@描述               : 通过协议栈发送数据请求任务
@作者               : 孙进,曹磊
@最后编辑时间       : 2006-03-31
@版本               : V3.1.0
*****************************************************************************************/
void TaskInstruc(void* pdata) 
{
  	unsigned char err;
  	unsigned char *msg;
    
    pdata = pdata;
      
    for(;;) 
    {
        msg = (unsigned char*)OSMboxPend(Instruc_MBox, 0, &err);
        if(err == OS_NO_ERR) 
        {
            J1939msg.PGN = 59904;
            J1939msg.priority = 6;
            J1939msg.byte_count = 3;
            J1939msg.data[0] = 0xe5;
            J1939msg.data[1] = 0xfe;
            J1939msg.data[2] = 0x00;
            if(*msg == 'g')
            {
              J1939msg.dest_addr = 255;
            }
            else if(*msg == 's')
            {
              J1939msg.dest_addr = 0;
            }
            else
            {}                     
            Trans_J1939msg(&J1939msg);   
        }        
    }
}

/****************************************************************************************
@函数名称           : void TaskVehDistance(void* pdata)           
@参数               : void* pdata 
@返回值             : None
@描述               : 行车里程显示任务
@作者               : 曹磊
@最后编辑时间       : 2006-03-31
@版本               : V3.1.0
*****************************************************************************************/
void TaskVehDistance(void* pdata) 
{
    unsigned char err;
    VEH_DISTANCE_T *msg;

    pdata = pdata;
    
    for(;;) 
    {    
        msg = (VEH_DISTANCE_T *)OSMboxPend(VehDistance_MBox, 0, &err); 
        if(err == OS_NO_ERR)
        {
            DisplayNone();
            
            DisplayTripDistance(msg->trip_data>>3, 0);
            DisplayTotalDistance(msg->total_data>>3);
        }   
        OSTimeDly(150);        //任务挂起3s
    }
}


void TaskGeneralSignal(void* pdata)
{
  	unsigned char err;
    unsigned int *msg;
    unsigned int temp;
    unsigned int SignalNum;
    
    pdata = pdata;
      
    for(;;) 
    {
        msg = (unsigned int*)OSMboxPend(GeneralSignal_MBox, 0, &err);
        if(err == OS_NO_ERR) 
        {
            temp = *msg;
            SignalNum = temp >> 8;
            switch (SignalNum) 
            {              
              case 3:
              {
                if((temp<<8)>>8) 
                {
                  PTH_PTH4 = 1; 
                }
                else
                {
                  PTH_PTH4 = 0;
                }
              }
              break;
              
              case 4:
              {
                if((temp<<8)>>8) 
                {
                  PTH_PTH3 = 1; 
                }
                else
                {
                  PTH_PTH3 = 0;
                }
              }
              break;
              
              case 5:
              {
                if((temp<<8)>>8) 
                {
                  PTH_PTH2 = 1; 
                }
                else
                {
                  PTH_PTH2 = 0;
                }
              }
              break;
              
              case 6:
              {
                if((temp<<8)>>8) 
                {
                  PTH_PTH1 = 1; 
                }
                else
                {
                  PTH_PTH1 = 0;
                }
              }
              break;
              
              case 7:
              {
                if((temp<<8)>>8) 
                {
                  PTH_PTH0 = 1; 
                }
                else
                {
                  PTH_PTH0 = 0;
                }
              }
              break;
              
              case 8:
              {
                if((temp<<8)>>8) 
                {
                  PTJ_PTJ3 = 1; 
                }
                else
                {
                  PTJ_PTJ3 = 0;
                }
              }
              break;
              
              case 9:
              {
                if((temp<<8)>>8) 
                {
                  PTJ_PTJ2 = 1; 
                }
                else
                {
                  PTJ_PTJ2 = 0;
                }
              }
              break;
              
              case 10:
              {
                if((temp<<8)>>8) 
                {
                  PTJ_PTJ1 = 1; 
                }
                else
                {
                  PTJ_PTJ1 = 0;
                }
              }
              break;
              
              case 11:
              {
                if((temp<<8)>>8) 
                {
                  PTJ_PTJ0 = 1; 
                }
                else
                {
                  PTJ_PTJ0 = 0;
                }
              }
              break;
              
              case 12:
              {
                if((temp<<8)>>8) 
                {
                  PTL_PTL7 = 1; 
                }
                else
                {
                  PTL_PTL7 = 0;
                }
              }
              break;
              
              default:
              break;
            }
              
        }
        OSTimeDly(25); 					 //任务挂起1s
    }    
}

void TaskEmergSignal(void* pdata)
{
  	unsigned char err;
    unsigned int *msg;
    unsigned int temp;
    unsigned int SignalNum;
    
    pdata = pdata;
      
    for(;;) 
    {
        OSSemPend(EmergFlg_Sem,0,&err);
        
        msg = (unsigned int*)OSMboxPend(EmergSignal_MBox, 0, &err);
        if(err == OS_NO_ERR) 
        {
            temp = *msg;
            SignalNum = temp >> 8;
            switch (SignalNum) 
            {
              case 1: 
              {
                if((temp<<8)>>8) 
                {
                  PTH_PTH6 = 1; 
                }
                else
                {
                  PTH_PTH6 = 0;
                }
              }
              break;
              
              case 2:
              {
                if((temp<<8)>>8) 
                {
                  PTH_PTH5 = 1; 
                }
                else
                {
                  PTH_PTH5 = 0;
                }
              }
              break;
       
              default:
              break;
            }
              
        }
    }    

}

/****************************************************************************************
@函数名称           : void SCIReceive_ISR(void)           
@参数               : None 
@返回值             : None
@描述               : 串口接收中断服务程序
@作者               : 孙进
@最后编辑时间       : 2006-03-31
@版本               : V3.1.0
*****************************************************************************************/
#pragma TRAP_PROC
void SCIReceive_ISR(void) 
{
    OSIntEnter();
    OS_SAVE_SP();

    SCI0SR1_RDRF = 0;                   //clear interrupt
    Instruction = SCI0DRL;
    Instruc_ptr = &Instruction;
    OSMboxPost(Instruc_MBox,Instruc_ptr);
         
    OSIntExit();   
}

⌨️ 快捷键说明

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