51也能多线程

89c51\51\RC系列也能实现多线程(伪并行)

目录

89c51\51\RC系列也能实现多线程(伪并行)

一、思路简介

二、示例

1首先开发环境配置

 2主程序


一、思路简介

进行移植实时操作系统即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是一个黑块,其实它只是变换太频繁了,毕竟是个呼吸灯。。。

不是教程,教程请移步

RTX51-tiny-中文手册

posted @ 2022-01-14 17:45  缘佒  阅读(59)  评论(0编辑  收藏  举报