89c51\51\RC系列也能实现多线程(伪并行)
目录
一、思路简介
进行移植实时操作系统即RTOS,可直接使用keil内置内置的RTX51 Tiny,引入RTOS从而实现多线程操作。
二、示例
以RTX51 tiny为例。
1首先开发环境配置
在keil的安装目录中寻找到RTX tiny
在安装目录中找到C51\RtxTiny2\SourceCode找到Conf_tny.A51和RTX51TNY.LIB即可,
添加进工程。
接着添加main程序,先测试一下环境
在魔术棒中找到target选项,system中选中RTX-51 tiny
接着写主程序测试一下
#include "RTX51TNY.h"
void task_create(void) _task_ 0
{
while(1)
{
;
}
}
//测试
2主程序
#include <REGX52.H>
#include "RTX51TNY.h"
sbit ceshi=P1^3;
int x=1;
unsigned int time,i;
void delaya(int x)
¡¢{while(x--);
}
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
void task_create(void) _task_ 0
{
os_create_task(1);
os_create_task(2);
os_delete_task(0);
while(1)
{
;
}
}
void task_1(void) _task_ 1
{
while(1)
{
for(time=0;time<100&&x>0;time++)
{
for(i=0;i<20;i++){
P2_0=0;
delaya(time);
P2_0=1;
delaya(100-time);}
}
for(time=100;time>0&&x>0;time--)
{
for(i=0;i<20;i++){
P2_0=0;
delaya(time);
P2_0=1;
delaya(100-time);}
}
P2_0=1;
delaya(30000);
os_wait2(K_IVL,50);
}
}
void task_2(void) _task_ 2
{
while(1)
{
ceshi=!ceshi;//由于task2是个开关所以单独写一个测试
if(P3_0==0)
{
Delay(20);
while(P3_0==0);
Delay(20);
x=~x;
}
os_wait2(K_IVL,50);
}
}
仿真
可以看出确实是两个进程,
注
别问我为什么仿真P2是一个黑块,其实它只是变换太频繁了,毕竟是个呼吸灯。。。
不是教程,教程请移步