由于公共电脑不方便发实物演示图。
程序如下:
//功能:RTX51_TNY开关点灯
/*******************************************************
task1 : LED0每 1s改变一次状态
task2 :LED1每0.7s改变一次状态
task3 :LED2每0.4s改变一次状态
task4 :LED3每0.2s改变一次状态
*******************************************************/
#include <rtx51tny.h>
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
//typedef unsigned char uchar;
//typedef unsigned int uint;
sbit LED0 = P0^0;
sbit LED1 = P0^1;
sbit LED2 = P0^2;
sbit LED3 = P0^3;
sbit KEY0 = P1^0;
sbit KEY1=P1^1;
void job0(void) _task_ 0
{
LED0 = 1;
LED1 = 1;
LED2 = 1;
LED3 = 1; //关闭四个LED
os_create_task(1); //创建任务1
os_create_task(2); //创建任务2
os_delete_task(0); //删除自己(task0),使task0退出任务链表
}
void job1(void) _task_ 1 //按键开启任务
{
while(1)
{
if(KEY1==0)
{ //判断按键是否按下
while(!KEY1);
os_create_task (4); //按键开启LED3,
os_create_task (3);
os_create_task (5);
os_create_task (6);
}
}
}
void job2(void) _task_ 2 //按键关闭任务
{
while(1)
{
if(KEY0==0)
{ //判断按键是否按下
while(!KEY0);//等待取反
LED0 = 1;LED1 = 1;LED2 = 1;LED3 = 1;
os_delete_task(4); //按键关闭任务3。4。5。6。
os_delete_task(3);
os_delete_task(5);
os_delete_task(6);
}
}
}
//以下是各任务
void job3(void) _task_ 3
{
while(1){
LED0 = !LED0;
os_wait(K_TMO, 100, 0); //等待100个时钟滴答(ticks),即1s
//配置文件ConfTny.A51中INT_CLOCK EQU 10000; default is 10000 cycles
//意思是时钟滴答为10000个机器周期,即10000*1uS=10ms
}
}
void job4(void) _task_ 4
{
while(1){
LED1 = !LED1;
os_wait(K_TMO, 70, 0); //等待(延时)0.7s
}
}
void job5(void) _task_ 5
{
while(1){
LED2 = !LED2;
os_wait(K_TMO, 40, 0); //等待(延时)0.4s
}
}
void job6(void) _task_ 6
{
while(1){
LED3 = !LED3;
os_wait(K_TMO, 20, 0); //等待(延时)0.2s
}
}
望大家共同探讨。谢谢!
|