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

📄 main.c

📁 protues仿真UCOSII多任务管理协调
💻 C
字号:

#include  "config.h"

#define rs (1<<8)
#define rw (1<<9)
#define en (1<<10)
#define busy (1<<7)
#define Led1 (1<<11)
#define Led2 (1<<12)
#define Led3 (1<<13)
#define Led4 (1<<14)
#define Led5 (1<<15)

#define  TASK_STK_SIZE                  64
OS_STK        TaskStartStk[TASK_STK_SIZE];
OS_STK        TaskLed1Stk[TASK_STK_SIZE];
OS_STK 		  TaskLed2Stk[TASK_STK_SIZE];
OS_STK 		  TaskLed3Stk[TASK_STK_SIZE];
OS_STK 		  TaskLed4Stk[TASK_STK_SIZE];
static void  TaskStart(void *data);
static void  TaskLed1(void *data);
static void  TaskLed2(void *data);
static void  TaskLed3(void *data);
static void  TaskLed4(void *data);

OS_EVENT	*AckMbox;
OS_EVENT	*TxMbox;


uint8 txt[]={"helloz"};
uint8 txe[]={"woaini"};
/****************************************************************************
* 名称:DelayNS
* 功能:长延时
****************************************************************************/
void DelayNS(uint32 dly)
{ 
	uint32 i;
	for(;dly>0;dly--)
		for(i=0;i<50000;i++);
}
/****************************************************************************
* 名称:LedInit
* 功能:Led控制口的初始化
****************************************************************************/
void LedInit(void)
{
 	PINSEL0=0x00000000;
 	PINSEL1=0x00000000;
 	IODIR=0xffffffff;
 	IOSET=Led1;
 	IOSET=Led2;
 	IOSET=Led3;
 	IOSET=Led4;
 	IOSET=Led5;
}	
		
/****************************************************************************
* 名称:ChkBusy()
* 功能:检查总线是否忙
****************************************************************************/
void ChkBusy()
{
	PINSEL0=0x00000000;
	IODIR=0x700;
	while(1)
	{
		IOCLR=rs;
		IOSET=rw;
		IOSET=en;
		if(!(IOPIN & busy))break;
		IOCLR=en;
	}
	IODIR=0x7ff;
}
/****************************************************************************
* 名称:WrOp()
* 功能:写函数
****************************************************************************/
void WrOp(uint8 dat)
{
	
	ChkBusy();
	IOCLR=rs;		//全部清零
	IOCLR=rw;
	IOCLR=0xff;		//先清零
	IOSET=dat;		//再送数
	IOSET=en;
	IOCLR=en;
}
/****************************************************************************
* 名称:WrDat()
* 功能:写数据函数
****************************************************************************/
void WrDat(uint8 dat)	//读数据
{
   
	ChkBusy();
	IOSET=rs;
	IOCLR=rw;
	IOCLR=0xff;		//先清零
	IOSET=dat;		//再送数
	IOSET=en;
	IOCLR=en;
}

/****************************************************************************
* 名称:DisText()
* 功能:显示文本函数
****************************************************************************/

void DisplayText(uint8 addr,uint8 *p)
{
	WrOp(addr);
	while(*p !='\0')WrDat(*(p++));
}
/****************************************************************************
* 名称:main()
* 功能:显示文本
****************************************************************************/

 int main (void)
{
    OSInit();
    OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 4);
    OSStart();
    return 0;
}
/****************************************************************************
* 名称:TaskStart()
* 功能:任务
****************************************************************************/

void  TaskStart(void *pdata)
{   
   
    pdata=pdata;
	TargetInit();	
	AckMbox = OSMboxCreate((void *)0);
	TxMbox  = OSMboxCreate((void *)0);
    OSTaskCreate(TaskLed1, (void *)0, &TaskLed1Stk[TASK_STK_SIZE - 1], 5);
    OSTaskCreate(TaskLed2, (void *)0, &TaskLed2Stk[TASK_STK_SIZE - 1], 6);
    OSTaskCreate(TaskLed3, (void *)0, &TaskLed3Stk[TASK_STK_SIZE - 1], 7);
    OSTaskCreate(TaskLed4, (void *)0, &TaskLed4Stk[TASK_STK_SIZE - 1], 8);  
    while(1)
    {
    OSTimeDlyHMSM(0,0,5,0);
    }                             
	while(1);
}

void  TaskLed1(void *pdata)
{   
   
    pdata=pdata;
	TargetInit();
	while(1)
	{
	IOSET=Led1;
	OSTimeDlyHMSM(0,0,0,50); 
	IOCLR=Led1;
	OSTaskSuspend(5);
	OSTimeDlyHMSM(0,0,0,50);  
	}                                
	while(1);
}

void  TaskLed2(void *pdata)
{   
	pdata=pdata;
	TargetInit();
	LedInit();
	while(1)
	{
	uint32 j;
	for(j=0;j<=3;j++)
	{
	IOSET=Led2;
	OSTimeDlyHMSM(0,0,0,50); 
	IOCLR=Led2;
	OSTimeDlyHMSM(0,0,0,50);
	}
	OSTaskResume(5); 
	}                                
	while(1);
}

void  TaskLed3(void *pdata)
{   
	uint8 txmsg;
	uint32 j;
	txmsg = 'A';
	pdata=pdata;
	TargetInit();
	LedInit();
	while(1)
	{
	
	for(j=0;j<=2;j++)
	{
	IOSET=Led3;
	OSTimeDlyHMSM(0,0,0,50);
	IOCLR=Led3;
	OSTimeDlyHMSM(0,0,0,50);
	}
	OSMboxPost(TxMbox,(void *)&txmsg);
	}                                 
	while(1);
}

void  TaskLed4(void *pdata)
{   
	uint8 err;
	pdata=pdata;
	TargetInit();
	LedInit();
	while(1)
	{
	OSMboxPend(TxMbox,0,&err);
	IOSET=Led4;
	OSTimeDlyHMSM(0,0,0,50); 
	IOCLR=Led4;
	OSTimeDlyHMSM(0,0,0,50);
	}                                 
	while(1);
}

⌨️ 快捷键说明

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