#include <16C66.h> ///// 以下为CCS自动生成,确实方便 #FUSES NOWDT // Watch Dog Timer #FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD #FUSES NOPUT //No Power Up Timer #FUSES NOBROWNOUT //No brownout reset #FUSES PROTECT //Code not protected from reading #use delay(clock=4000000) 2、文件名: Ptask.h复制// 最大任务数,要根据主程序的具体任务数来确定 #define MAXTASKS 3 int8 Timers[MAXTASKS]; // 调度开始 #define BEGIN_TASK(TaskName) int8 TaskName(){ static int8 lc; switch(lc){case 0: // 调度结束 #define END_TASK } lc = 0; return 0;} // 任务内延时 #define Wait(Ticks) {lc = __LINE__; return Ticks; } case __LINE__: // 装配任务 #define RunTask(TaskName, TaskID) { if (Timers[TaskID] == 0){ Timers[TaskID] = TaskName(); }} // 调用子程序 #define CallSub(SubTaskName) {lc = __LINE__; case __LINE__:{ int8 subTime = SubTaskName(); if(subTime) return subTime;}} // 调度 #define UpdateTimers() int8 i; for(i = MAXTASKS; i > 0; i--){ if(Timers[i-1]) Timers[i-1]--; } 3、文件名:main.c复制#include "main.h" #include "Ptask.h" // 调度相关的定义 ///// 演示实际效果用的LED ///// #define LED1 PIN_A0 #define LED2 PIN_A1 #define LED3 PIN_A2 void init() { setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); enable_interrupts(INT_TIMER1); enable_interrupts(GLOBAL); } ////// 定时器1中断 ///// #int_TIMER1 void TIMER1_isr(void) { UpdateTimers(); // 任务调度 } ////////// 任务1 ////////// BEGIN_TASK(Task1) static boolean i; i=~i; output_bit(LED1,i); Wait(1); END_TASK ////////// 任务2 ////////// BEGIN_TASK(Task2) static boolean i; i=~i; output_bit(LED2,i); Wait(5); END_TASK ////////// 任务3 ////////// BEGIN_TASK(Task3) static boolean i; i=~i; output_bit(LED3,i); Wait(12); END_TASK void main() { init(); for(;;) { RunTask(task1,0); RunTask(task2,1); RunTask(task3,2); } }
// 最大任务数,要根据主程序的具体任务数来确定 #define MAXTASKS 3 int8 Timers[MAXTASKS]; // 调度开始 #define BEGIN_TASK(TaskName) int8 TaskName(){ static int8 lc; switch(lc){case 0: // 调度结束 #define END_TASK } lc = 0; return 0;} // 任务内延时 #define Wait(Ticks) {lc = __LINE__; return Ticks; } case __LINE__: // 装配任务 #define RunTask(TaskName, TaskID) { if (Timers[TaskID] == 0){ Timers[TaskID] = TaskName(); }} // 调用子程序 #define CallSub(SubTaskName) {lc = __LINE__; case __LINE__:{ int8 subTime = SubTaskName(); if(subTime) return subTime;}} // 调度 #define UpdateTimers() int8 i; for(i = MAXTASKS; i > 0; i--){ if(Timers[i-1]) Timers[i-1]--; } 3、文件名:main.c复制#include "main.h" #include "Ptask.h" // 调度相关的定义 ///// 演示实际效果用的LED ///// #define LED1 PIN_A0 #define LED2 PIN_A1 #define LED3 PIN_A2 void init() { setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); enable_interrupts(INT_TIMER1); enable_interrupts(GLOBAL); } ////// 定时器1中断 ///// #int_TIMER1 void TIMER1_isr(void) { UpdateTimers(); // 任务调度 } ////////// 任务1 ////////// BEGIN_TASK(Task1) static boolean i; i=~i; output_bit(LED1,i); Wait(1); END_TASK ////////// 任务2 ////////// BEGIN_TASK(Task2) static boolean i; i=~i; output_bit(LED2,i); Wait(5); END_TASK ////////// 任务3 ////////// BEGIN_TASK(Task3) static boolean i; i=~i; output_bit(LED3,i); Wait(12); END_TASK void main() { init(); for(;;) { RunTask(task1,0); RunTask(task2,1); RunTask(task3,2); } }
#include "main.h" #include "Ptask.h" // 调度相关的定义 ///// 演示实际效果用的LED ///// #define LED1 PIN_A0 #define LED2 PIN_A1 #define LED3 PIN_A2 void init() { setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); enable_interrupts(INT_TIMER1); enable_interrupts(GLOBAL); } ////// 定时器1中断 ///// #int_TIMER1 void TIMER1_isr(void) { UpdateTimers(); // 任务调度 } ////////// 任务1 ////////// BEGIN_TASK(Task1) static boolean i; i=~i; output_bit(LED1,i); Wait(1); END_TASK ////////// 任务2 ////////// BEGIN_TASK(Task2) static boolean i; i=~i; output_bit(LED2,i); Wait(5); END_TASK ////////// 任务3 ////////// BEGIN_TASK(Task3) static boolean i; i=~i; output_bit(LED3,i); Wait(12); END_TASK void main() { init(); for(;;) { RunTask(task1,0); RunTask(task2,1); RunTask(task3,2); } }
举报
416775364TP 发表于 2013-12-18 19:36 没看到源码
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
等级类勋章
人才类勋章
时间类勋章
发帖类勋章
14
528
2
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号