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-中文手册

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值