用单片机不同 IO 脚输出 1Hz,5Hz,10Hz,20Hz 方波信号 关键字:单片机 C语言 51 多任务

for(i=0;i<MAX_TASK;i++)task_delay=0;for(i=0;i<MAX_TASK;i++)if(task_delay)task_delay--... for(i=0;i<MAX_TASK;i++) task_delay=0;
for(i=0;i<MAX_TASK;i++) if(task_delay) task_delay--;
这两处 task_delay不是数组吗 这里是怎么用的?
怎么实现4个任务分别计数的?
(task0到4省略了)
任务要求:用单片机不同 IO 脚输出 1Hz,5Hz,10Hz,20Hz 方波信号
#include "reg51.h"
#define TIME_PER_SEC 200 //定义任务时钟频率,200Hz
#define CLOCK 22118400 //定义时钟晶振,单位Hz
#define MAX_TASK 4 //定义任务数量

extern void task0(void); //任务声明
extern void task1(void);
extern void task2(void);
extern void task3(void);

sbit f1Hz = P1^0; //端口定义
sbit f5Hz = P1^1;
sbit f10Hz = P1^2;
sbit f20Hz = P1^3;

unsigned char task_delay[4]; //任务延时变量定义

//定时器0初始化
void timer0_init(void)
{
unsigned char i;
for(i=0;i<MAX_TASK;i++) task_delay=0; //任务延时量清零
TMOD = (TMOD & 0XF0) | 0X01; //定时器 0工作在模式 1, 16Bit定时器模

TH0 = 255-CLOCK/TIME_PER_SEC/12/256;
TL0 = 255-CLOCK/TIME_PER_SEC/12%256;
TR0 =1;
ET0 =1; //开启定时器和中断
}

// 系统 OS定时中断服务
void timer0(void) interrupt 1
{
unsigned char i;
TH0 = 255-CLOCK/TIME_PER_SEC/12/256;
TL0 = 255-CLOCK/TIME_PER_SEC/12%256;
for(i=0;i<MAX_TASK;i++) if(task_delay) task_delay--;
//每节拍对任务延时变量减1 ,减至 0 后,任务就绪。
}
void main(void)
{
timer0_init();
EA=1;//开总中断
while(1)
{
if(task_delay[0]==0) {task0(); task_delay[0] = TIME_PER_SEC/ 2;}
//要产生 1hz 信号,翻转周期就是 2Hz,以下同
if(task_delay[1]==0) {task1(); task_delay[1] = TIME_PER_SEC/10;}
if(task_delay[2]==0) {task2(); task_delay[2] = TIME_PER_SEC/20;}
if(task_delay[3]==0) {task3(); task_delay[3] = TIME_PER_SEC/40;}
}
}
展开
 我来答
做而论道
高能答主

2013-05-30 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部
task_delay,

都应该是:
task_delay[i]。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式