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

📄 3.3ucosmovementcontrol.c

📁 UCOSii for c8051f020
💻 C
📖 第 1 页 / 共 2 页
字号:
//***************************************************************************************************************
// FILE NAME         : MovementControl.C
// FILE DESCRIPTION  :
// TARGET DEVICE     : C8051F021
// CREATED ON        : 2007.12.29
// CREATED BY        : yuanwq
// VERSION           : 1.00
// MODIFY  RECORD    :
// uCOS-II VERSION   : 2.51
//****************************************************************************************************************
//****************************************************************************************************************
// Include File
//****************************************************************************************************************
#include "includes.h"
#include "FunctionPrototype.h"
//#include "Movement_speed.h"

//STACK Define
//*****************************************************************************************************************

OS_STK LED_TestSTK[MaxStkSize];

//OS_STK TL16C554communicateRXSTK[MaxStkSize];
OS_STK FRENIC_RS485TXSTK[MaxStkSize];
//OS_STK FALDIC_RS422TXSTK[MaxStkSize];
//OS_STK TL16C554communicateProcessSTK[MaxStkSize];
//OS_STK TL16C554TestTaskSTK[MaxStkSize];

//----------------------------------------------------------------------------------------------------------------
sbit LED = P1^6;
#include "Movement_speed.h"
//TASK Function
//*****************************************************************************************************************

void LED_Test(void *nouse) reentrant;

//void TL16C554communicateRX(void *nouse) reentrant;
void FRENIC_RS485TX(void *nouse) reentrant;
//void FALDIC_RS422TX(void *nouse) reentrant;
//void TL16C554communicateProcess(void *nouse) reentrant;
//void TL16C554TestTask(void *nouse) reentrant;
//MAIN ROUTINE
//*****************************************************************************************************************

void main(void)
{
  INT8U ERROR_NUMBER;
    
  Hardware_Init();    //-------------------------------------------------------------------------- 硬件初始化程序
  Variables_Init();   //-------------------------------------------------------------------------- 变量初始化程序
    
	OSInit();
	
    
  SET_STATUS(Q0_Output,Q_En_Move);
	XBYTE[Q0_Address] = Q0_Output.Now_Flag;
	
	//---- 创建信号量
  //TL16C554_RXSEM = OSSemCreate(0);
  //while(!TL16C554_RXSEM);

	FRENIC_RS485TXMUX = OSSemCreate(1);
  while(!FRENIC_RS485TXMUX);
  //TL16C554_TXMUX = OSSemCreate(2);
  //while(!TL16C554_TXMUX);       
  
  //---- 创建邮箱
	//TxTL16C554Mbox_A = OSMboxCreate((void *) 0);
	//while(!TxTL16C554Mbox_A);
	//TxTL16C554Mbox_B = OSMboxCreate((void *) 0);
	//while(!TxTL16C554Mbox_B);
	//TxTL16C554Mbox_C = OSMboxCreate((void *) 0);
	//while(!TxTL16C554Mbox_C);
	//TxTL16C554Mbox_D = OSMboxCreate((void *) 0);
	//while(!TxTL16C554Mbox_D);

	//---- 创建队列
	FRENIC_RS485TXMsg = OSQCreate(&TxTL16C554MsgTbl[0],5);
  while(!FRENIC_RS485TXMsg);

	//RxTL16C554Msg = OSQCreate(&RxTL16C554MsgTbl[0],5);
  //while(!RxTL16C554Msg);

	//TL16C554ProcessMsg = OSQCreate(&TL16C554ProcessMsgTbl[0],5);
	//while(!TL16C554ProcessMsg);
    
  //TL16C554TestMsg = OSQCreate(&TL16C554TestMsgTbl[0],5);
  //while(!TL16C554TestMsg);                                 
  //---- 创建内存分区
  CommunicateBUF = OSMemCreate(CommunicatePART,COM_BLOCK_NUM,COM_BLOCK_SIZE,&ERROR_NUMBER);
	while(ERROR_NUMBER);

  //---- 创建任务
  //ERROR_NUMBER = OSTaskCreate(TL16C554communicateRX, (void *)0, &TL16C554communicateRXSTK[0],4);
	//while(ERROR_NUMBER);
	
	//---- 测试灯任务:使测试LED间隔1s闪烁                               
	ERROR_NUMBER = OSTaskCreate(LED_Test, (void *)0, &LED_TestSTK[0],14);
  while(ERROR_NUMBER);                                                 
  //----变频器发送任务
	ERROR_NUMBER = OSTaskCreate(FRENIC_RS485TX, (void *)0, &FRENIC_RS485TXSTK[0],7);
	while(ERROR_NUMBER);

	//ERROR_NUMBER = OSTaskCreate(TL16C554communicateProcess, (void *)0, &TL16C554communicateProcessSTK[0],6);
	//while(ERROR_NUMBER);

	//ERROR_NUMBER = OSTaskCreate(TL16C554TestTask, (void *)0, &TL16C554TestTaskSTK[0],5);
	//while(ERROR_NUMBER);
	
  
    
    //---- 以Timer0为uCOS系统时钟,对其进行初始化
    InitTimer0();
    
    //---- 开始多任务调度
    OSStart();
}

void LED_Test(void *nouse) reentrant
{
  nouse = nouse;
    
	while(1)
	{
   LED = ~LED;
	 OSTimeDly(OS_TICKS_PER_SEC * 1);
	}
}

/*void TL16C554communicateRX(void *nouse) reentrant
{
    INT8U ErrTL16C554Rx;
    INT8U FinishTL16C554Rx = 0;
    INT8U RxTL16C554CheckSUM = 0;
    INT8U RxTL16C554CheckSUM_H,RxTL16C554CheckSUM_L;
    INT8U *MemTL16C554RX_A,*MemTL16C554RX_B,*MemTL16C554RX_C,*MemTL16C554RX_D;
    
//    INT8U RxStat;
    
    nouse = nouse;
    
	while(1)
	{
    	OSSemPend(TL16C554_RXSEM, 0, &ErrTL16C554Rx);
		
 		if(TL_16C554_INIT_SY & 0x01) 
		{
				for(TL16C554RX_i = 0;TL16C554RX_i < RevvCharNumber;TL16C554RX_i++)
				{
					RevvCharFinish_A[TL16C554RX_i + RevvCharNumber_A] = RevvSerialChar_A[TL16C554RX_i];
				}
				if(RevvCharNumber_A == 0x00)
				{
					 RevvCharNumber_A = 0x08;
				}
				else 
				{
					RevvCharNumber_A = 0x00;
				}
				if(RevvCharNumber_A == 0x00)
					{
						for(TL16C554RX_i = 1;TL16C554RX_i<=13;TL16C554RX_i++)
						{
							if(TL16C554RX_i == 1) 
							{
								RxTL16C554CheckSUM = RevvCharFinish_A[1];
							}
							else
							{
								RxTL16C554CheckSUM += RevvCharFinish_A[TL16C554RX_i];
							}
						}
						    RxTL16C554CheckSUM_H = (RxTL16C554CheckSUM & 0xF0) >> 4;
				        RxTL16C554CheckSUM_L = (RxTL16C554CheckSUM & 0x0F);
				        RxTL16C554CheckSUM_H = TO_ASCII(RxTL16C554CheckSUM_H);
				        RxTL16C554CheckSUM_L = TO_ASCII(RxTL16C554CheckSUM_L);
				        if((RevvCharFinish_A[14] == RxTL16C554CheckSUM_H) && (RevvCharFinish_A[15] == RxTL16C554CheckSUM_L))            
      						{
				            //---- 数据接收正确,存储数据
            				 if(RevvCharFinish_A[3] == 0x06)
            					{
                           	MemTL16C554RX_A = (INT8U *)OSMemGet(CommunicateBUF,&ErrTL16C554Rx);
		                        *(MemTL16C554RX_A + 0) = RevvCharFinish_A[1];
        		                *(MemTL16C554RX_A + 1) = RevvCharFinish_A[2];
        		                
                            *(MemTL16C554RX_A + 2) = RevvCharFinish_A[4];
                          	*(MemTL16C554RX_A + 3) = RevvCharFinish_A[5];
                            *(MemTL16C554RX_A + 4) = RevvCharFinish_A[6];
                            *(MemTL16C554RX_A + 5) = RevvCharFinish_A[7];
                            
                            *(MemTL16C554RX_A + 6) = RevvCharFinish_A[9];
                            *(MemTL16C554RX_A + 7) = RevvCharFinish_A[10];
                            *(MemTL16C554RX_A + 8) = RevvCharFinish_A[11];
						  							*(MemTL16C554RX_A + 9) = RevvCharFinish_A[12];
                          	OSQPost(RxTL16C554Msg,MemTL16C554RX_A);
                     	}
							    }
		        		else //校验和错误
			            {
						      }
					}
		}
 		if(TL_16C554_INIT_SY & 0x02) 
		{
				for(TL16C554RX_i = 0;TL16C554RX_i < RevvCharNumber;TL16C554RX_i++)
				{
					RevvCharFinish_B[TL16C554RX_i + RevvCharNumber_B] = RevvSerialChar_B[TL16C554RX_i];
				}
				if(RevvCharNumber_B == 0x00)
				{
					 RevvCharNumber_B = 0x08;
				}
				else 
				{
						RevvCharNumber_B = 0x00;
				}
				if(RevvCharNumber_B == 0x00)
				{
						for(TL16C554RX_i = 1;TL16C554RX_i<=13;TL16C554RX_i++)
						{
							if(TL16C554RX_i == 1) 
							{
								RxTL16C554CheckSUM = RevvCharFinish_B[1];
							}
							else
							{
								RxTL16C554CheckSUM += RevvCharFinish_B[TL16C554RX_i];
							}
						}
				        RxTL16C554CheckSUM_H = (RxTL16C554CheckSUM & 0xF0) >> 4;
				        RxTL16C554CheckSUM_L = (RxTL16C554CheckSUM & 0x0F);
				        RxTL16C554CheckSUM_H = TO_ASCII(RxTL16C554CheckSUM_H);
				        RxTL16C554CheckSUM_L = TO_ASCII(RxTL16C554CheckSUM_L);
				        if((RevvCharFinish_B[14] == RxTL16C554CheckSUM_H) && (RevvCharFinish_B[15] == RxTL16C554CheckSUM_L))            
      					{
				            //---- 数据接收正确,存储数据
								     	if(RevvCharFinish_B[3] == 0x06)
								      {/*
                         MemTL16C554RX_B = (INT8U *)OSMemGet(CommunicateBUF,&ErrTL16C554Rx);
                        *(MemTL16C554RX_B + 0) = RevvCharFinish_B[1];
                        *(MemTL16C554RX_B + 1) = RevvCharFinish_B[2];
                        
                        *(MemTL16C554RX_B + 2) = RevvCharFinish_B[4];
                        *(MemTL16C554RX_B + 3) = RevvCharFinish_B[5];
                        *(MemTL16C554RX_B + 4) = RevvCharFinish_B[6];
                        *(MemTL16C554RX_B + 5) = RevvCharFinish_B[7];
                        
                        *(MemTL16C554RX_B + 6) = RevvCharFinish_B[9];
                        *(MemTL16C554RX_B + 7) = RevvCharFinish_B[10];
                        *(MemTL16C554RX_B + 8) = RevvCharFinish_B[11];
												*(MemTL16C554RX_B + 9) = RevvCharFinish_B[12];
                         OSQPost(RxTL16C554Msg,MemTL16C554RX_B);
                      */}

⌨️ 快捷键说明

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