#include "STC12C5A.H"





#define TIMER_RELOAD()  {TL0=0x00;TH0=0xC4;}//使能T/C
 初始10ms





#define MAX_TASKS 8 //任务槽最大个数.

unsigned char idata task_stack[MAX_TASKS][2];//任务堆栈.  PC指针为16位,需2个字节。

unsigned char idata task_time[MAX_TASKS]; //定时时间

unsigned char task_id=0; //当前活动任务号





void rtos_wait(unsigned char time)

{





//保存当前任务时间

task_time[task_id]=time;





//保存当前断点 并把SP=SP-2,任务切换到下一任务;

task_stack[task_id][1] =*((unsigned char *)(SP));

SP--;

task_stack[task_id][0] =*((unsigned char *)(SP));

SP--;







//任务号

if(++task_id == MAX_TASKS)

task_id = 0;

}

unsigned char a=0;

unsigned char b=0;

void task_test()

{

while(1)

{

a++;

rtos_wait(100);
//运行完后,记录下一步地址,返回

a++;





}

}

void task_test2()

{

while(1)

{

b++;

rtos_wait(10);
//运行完后,记录下一步地址,返回

b++;

}

}

void Timer0Init() //@18.432MHz

{

AUXR &= 0x7F;
//定时器时钟12T模式

TMOD &= 0xF0;
//设置定时器模式

TMOD |= 0x01;
//设置定时器模式

TL0 = 0x00;
//设置定时初值

TH0 =0xC4;
//设置定时初值 10ms

TF0 = 0;
//清除TF0标志

TR0 = 1;
//定时器0開始计时





ET0=1;

EA=1;

}

void main()

{

Timer0Init();

task_test();

task_test2();

while(1);

}

void rwcl() //任务时间是否到,任务时间到 实时切换回

{

//从把定时时间减1 ,找看哪个任务到
,任务时间到 实时切换回

unsigned char i;

for(i=0;i<MAX_TASKS;i++)

{

if(task_time[i])

{

task_time[i]--;

if(task_time[i]==0)

SP=task_stack[i]+1;


}

}

}

void tm0_isr() interrupt 1 using 1

{

  //定时时间重载

TIMER_RELOAD();





rwcl();
//任务时间是否到,任务时间到 实时切换回

}

最新文章

  1. video.js-H5视频播放库
  2. 深入理解JPEG图像格式Jphide隐写
  3. HTML5系列一(属性概述)
  4. [LeetCode] Rotate Image
  5. Sqoop-1.4.6.bin__hadoop-2.0.4-alpha 环境搭建
  6. 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
  7. Careercup - Facebook面试题 - 23869663
  8. EntityFramework 和 linq 判断是否在指定时间段内的方法
  9. Poj 3580-SuperMemo Splay
  10. iOS开发总结-UIWebView 集成 浏览器
  11. 手机root初体验
  12. Visual Studio 2015 Professional 破解
  13. Kia&#39;s Calculation hdu4726
  14. 让intellij idea 14 支持ES6语法
  15. char数组中除去某个元素
  16. Spring boot 源码分析(一)SpringApplication.run(上)
  17. EXCE 表格导入导出遇到问题(easypoi)
  18. oracl遇到的问题
  19. winform的水印TextBox
  20. Dynamic CRM 2016 的备份/恢复/重新部署

热门文章

  1. C语言深度剖析-----内存管理的艺术
  2. POJ 2402 Palindrome Numbers(LA 2889) 回文数
  3. UVA 10340 - All in All 水~
  4. 10.13 android输入系统_多点触摸驱动理论与框架
  5. 2015第30周四Java日志组件
  6. POJ 2387 Til the Cows Come Home (Dijkstra)
  7. 【编程】常见概念的理解 —— inplace、vanity url、vanilla(code/software)、编译、链接、build、(delegate、proxy)
  8. Centos6.5 VNC 配置
  9. Matlab图像处理系列4———图像傅立叶变换与反变换
  10. [RxJSv&amp; Javascript] forkJoin (reactive Promise.all) &amp; Map