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

📄 p89v51.c

📁 P89V51在KEILC51中的小操作系统RTOS51大模式下的源代码
💻 C
字号:
/*********************************************************************************************************
**				                               Small RTOS(51)
**                                   The Real-Time Kernel(For Keil c51)
**
**                                  (c) Copyright 2002-2003, chenmingji
**                                           All Rights Reserved
**
**                                                  V1.20.0
**
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: ext2.c
**创   建   人: 陈明计
**最后修改日期: 2003年8月3日
**描        述: ext2源代码。
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 陈明计
** 版  本: V0.50
** 日 期: 2002年2月22日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 版  本: V1.11.0
** 日 期: 2003年12月2日
** 描 述: 删除TaskF代码
**
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 版  本: V1.12.0
** 日 期: 2003年12月30日
** 描 述: 无变化
**
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 版  本: V1.20.0
** 日 期: 2003年8月3日
** 描 述: 根据新版本要求修改
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "config.h"
#include "led.h"

void Task0(void);
void Task1(void);
void Task2(void);
void Task3(void);
void Task4(void);
void Task5(void);
void Task6(void);
void Task7(void);
void Task8(void);
void Task9(void);


//主函数
void main(void)
{
	static uint16 i;
	i=0;
    OSInit();

	TMOD = (TMOD & 0XF0) | 0X01;
	TL0 = 0x0;
	TH0 = 0x0;
	TR0 = 1;
	ET0 = 1;
	TF0 = 0;

	//只建立两个任务来验证如何删除任务
    OSTaskCreate(Task0, NULL, 0);
    OSTaskCreate(Task1, NULL, 1);
    //OSTaskCreate(Task2, NULL, 2);
    //OSTaskCreate(Task3, NULL, 3);
    //OSTaskCreate(Task4, NULL, 4);
	//OSTaskCreate(Task5, NULL, 5);
	//OSTaskCreate(Task6, NULL, 6);
	//OSTaskCreate(Task7, NULL, 7);
	//OSTaskCreate(Task8, NULL, 8);
	//OSTaskCreate(Task9, NULL, 9);
	
    while(1)
    {
    	i+=1;
		if ( i % 9000 == 0 )
		{
			reserved_led_off();
			PCON = PCON & 0xfc | 0x01;                     /* CPU进入休眠状态 */
		}
		else
		{
			reserved_led_on();	
		}
	    						
		//PCON = PCON & 0xfc | 0x01;                     /* CPU进入休眠状态 */
		//PCON = PCON & 0xfc | 0x02;                     /* CPU进入掉电状态 */
    }
}

//任务0
void Task0(void)
{
    static uint8 i;
	i=0;
    while (1)
    {
    	OS_ENTER_CRITICAL();
		
		//任务代码
		i+=1;
		if ( i == 20 )
		{
			setting_led_on();
			//OSTaskDel(0);		//当运行20次(也就是灯闪烁10次)后让灯常量,并且删除任务自己
			if ( OSTaskDel(1) )	//这里好像有问题,虽然checkcode_led_on()被执行了,但是Task1仍然在执行,并没有被删除
			{	
				checkcode_led_on();//用这个led来指示Task1是否被删除
			}

			break;
		}

		if ( i % 2 == 0 ) 
		{
			setting_led_on();	 //使用led灯的闪烁来表明Task0在运行
		}
		else
		{
			setting_led_off();	
		}

        OS_EXIT_CRITICAL();
		OSWait(K_TMO,2);
    }    
}

//任务1
void Task1(void)
{
    static uint8 i;
    i=0;
    while (1)
    {
        OS_ENTER_CRITICAL();
		
		//任务代码
		i+=1;
		if ( i == 20 )
		{
			rob_led_on();
		//	OSTaskDel(1);		//当运行20次(也就是灯闪烁10次)后让灯常量,并且删除任务自己
		//	break;
		}

		if ( i % 2 == 0 ) 
		{
			rob_led_on();		//使用led灯的闪烁来表明Task1在运行
		}
		else
		{
			rob_led_off();	
		}

        OS_EXIT_CRITICAL();
        OSWait(K_TMO,4);
    }    
}

//任务2
void Task2(void)
{
    static uint8 i;
    
    while (1)
    {
        
		OS_ENTER_CRITICAL();
	
		//任务代码
		i+=1;
		
		if ( i == 20 )
		{
			steal_led_on();
			OSTaskDel(2);		//当运行20次(也就是灯闪烁10次)后让灯常量,并且删除任务自己
			break;
		}

		if ( i % 2 == 0 ) 
		{
			steal_led_on();	
		}
		else
		{
			steal_led_off();	
		}

        OS_EXIT_CRITICAL();
        OSWait(K_TMO,6);
    }    
}

//任务3
void Task3(void)
{
    static uint8 i;
    
    while (1)
    {
        OS_ENTER_CRITICAL();
		
		//任务代码
		i+=1;
		if ( i == 20 )
		{
			gas_led_on();
			OSTaskDel(3);		//当运行20次(也就是灯闪烁10次)后让灯常量,并且删除任务自己
			break;
		}

		if ( i % 2 == 0 ) 
		{
			gas_led_on();	
		}
		else
		{
			gas_led_off();	
		}

        OS_EXIT_CRITICAL();
        OSWait(K_TMO,8);
    }    
}

//任务4
void Task4(void)
{
    static uint8 i;
    while (1)
    {
        OS_ENTER_CRITICAL();
		
		//任务代码
		i+=1;

		if ( i == 20 )
		{
			fire_led_on();
			OSTaskDel(4);		//当运行20次(也就是灯闪烁10次)后让灯常量,并且删除任务自己
			break;
		}

		if ( i % 2 == 0 ) 
		{
			fire_led_on();	
		}
		else
		{
			fire_led_off();	
		}

        OS_EXIT_CRITICAL();
        OSWait(K_TMO,10);
    }    
}

//任务5
void Task5(void)
{
    static uint8 i;
    while (1)
    {
        OS_ENTER_CRITICAL();
		
		//任务代码
		i+=1;
		if ( i == 20 )
		{
			rescue_led_on();
			OSTaskDel(5);		//当运行20次(也就是灯闪烁10次)后让灯常量,并且删除任务自己
			break;
		}

		if ( i % 2 == 0 ) 
		{
			rescue_led_on();	
		}
		else
		{
			rescue_led_off();	
		}

        OS_EXIT_CRITICAL();
        OSWait(K_TMO,12);
    }    
}

//任务6
void Task6(void)
{
    static uint8 i;
    while (1)
    {
        OS_ENTER_CRITICAL();
		
		//任务代码
		i+=1;
		if ( i == 20 )
		{
			special_led_on();
			OSTaskDel(6);		//当运行20次(也就是灯闪烁10次)后让灯常量,并且删除任务自己
			break;
		}

		if ( i % 2 == 0 ) 
		{
			special_led_on();	
		}
		else
		{
			special_led_off();	
		}

        OS_EXIT_CRITICAL();
        OSWait(K_TMO,14);
    }    
}

//任务7
void Task7(void)
{
    static uint8 i;
    while (1)
    {
        OS_ENTER_CRITICAL();
		
		//任务代码
		i+=1;
		if ( i % 2 == 0 ) 
		{
			checkcode_led_on();	
		}
		else
		{
			checkcode_led_off();	
		}

        OS_EXIT_CRITICAL();
        OSWait(K_TMO,16);
    }    
}

//任务8
void Task8(void)
{
    static uint8 i;
    while (1)
    {
        OS_ENTER_CRITICAL();
		
		//任务代码
		i+=1;
		if ( i % 2 == 0 ) 
		{
			linedown_led_on();	
		}
		else
		{
			linedown_led_off();	
		}

        OS_EXIT_CRITICAL();
        OSWait(K_TMO,18);
    }    
}

//任务9
void Task9(void)
{
    static uint8 i;
    while (1)
    {
        OS_ENTER_CRITICAL();
		
		//任务代码
		i+=1;
		if ( i % 2 == 0 ) 
		{
			reserved_led_on();	
		}
		else
		{
			reserved_led_off();	
		}

        OS_EXIT_CRITICAL();
        OSWait(K_TMO,20);
    }    
}



/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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