由于公共電腦不方便發(fā)實物演示圖。
程序如下:
//功能:RTX51_TNY開關(guān)點燈
/*******************************************************
task1 : LED0每 1s改變一次狀態(tài)
task2 :LED1每0.7s改變一次狀態(tài)
task3 :LED2每0.4s改變一次狀態(tài)
task4 :LED3每0.2s改變一次狀態(tài)
*******************************************************/
#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; //關(guān)閉四個LED
os_create_task(1); //創(chuàng)建任務(wù)1
os_create_task(2); //創(chuàng)建任務(wù)2
os_delete_task(0); //刪除自己(task0),使task0退出任務(wù)鏈表
}
void job1(void) _task_ 1 //按鍵開啟任務(wù)
{
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 //按鍵關(guān)閉任務(wù)
{
while(1)
{
if(KEY0==0)
{ //判斷按鍵是否按下
while(!KEY0);//等待取反
LED0 = 1;LED1 = 1;LED2 = 1;LED3 = 1;
os_delete_task(4); //按鍵關(guān)閉任務(wù)3。4。5。6。
os_delete_task(3);
os_delete_task(5);
os_delete_task(6);
}
}
}
//以下是各任務(wù)
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
}
}
望大家共同探討。謝謝!
|