中易网

单片机的多个延时用定时器如何处理?

答案:5  悬赏:40  
解决时间 2021-02-12 10:24
单片机的多个延时用定时器如何处理?
最佳答案
用定时器,定时1ms,每当到了、中断,就把 n1、n2、n3,分别加一,然后退出中断。

在主函数中,分别检测n1、n2、n3是否到了50、30、60,到了,就该干什么就干什么去。

用一个定时器,基本就可以满足所有的定时需求。
追问:你好!这种方法,三个延时是同时起步的吧?我想分开起步呢?请问大虾,可以么?本人也是刚起步,问的不妥的地方敬请大虾理解。
追答:这种方法,怎么就是同时起步?
n1、n2、n3,这些变量,开始时都是几,不是由你自己随便定吗?
怎样起步,要看你是怎么控制它们的。
你设定成相同的值,就是同时起步。
和这种方法有什么关系?
全部回答
建立一个数组,表示不同步骤里面延时长度参数,
用一个标志变量A表示当前步骤,在定时中断函数中,每次重新设置定时参数时,先判断A的值,选择不同的时间参数设置。类似于有限状态机。
例子:

#include<reg51.h>
sbit LED1=P1^2;
sbit LED2=P1^6;
sbit KEY=P3^7;
unsigned int time;
unsigned char program;
void Delayms(unsigned int ms)
{
unsigned int i=1000;
for(;ms>0;ms--)
for(i=500;i>0;i--);
}
void t0()interrupt 1 using 1
{
if(program==0)//mie
{
LED1=LED2=1;
}
else if(program==1)//KUAI
{
time++; //10ms加1
if(time>25) //250ms
{
time=0;
LED1=LED2=!LED1;
}
}
else if(program==2)//man
{
time++;//10ms加1
if(time>50)//500ms
{
time=0;
LED1=LED2=!LED1;
}

}
else if(program==3)//liang
{
LED1=LED2=0;
}

TH0=216;//TH0=(65536-10240)/256 10ms中断1次
}
void main()
{
bit keyflag=0; //标志位 1按下 0放开
TMOD=0x11;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if((KEY==0)&&(keyflag)==0)
{
Delayms(10);
if(program<3)program++;//按下次数
else program=0;
keyflag=1;
}
else if(KEY)
{
keyflag=0;
Delayms(10);
}

}
}

void time1()interrupt 3 using 2
{
TH1=(65536-10000)/256;//10ms
TL1=(65536-10000)%256;
num1++;
num2++;
num3++;
if(num1>=30)//30ms
{
num1=0;
flag2=1;
}
else if(num2>=50)//50ms
{
num2=0;
flag1=1;
}
else if(num3>=60)//60ms
{
num3=0;
flag3=1;
}
}
//执行第1个命令...
if(flag1==1)...清零num1,num2,num3
//执行第2个命令...
else if(flag2==1) ... 清零num1,num2,num3
//执行第3个命令...
elseif(flag3==1) ...清零num1,num2,num3
那就设置定时器每10ms中断一次。三个命令假设分别为FA、FB、FC,各自的时间计数器是CA、CB、CC。在定时器中断中让每个计数器加1,即:
timer_irq()
{
CA++;
CB++;
CC++;
}
在主程序中不断检查三个计数器是否符合要求,符合要求时就执行,并且将对应的计数器清零
{
if(CA==5) //等到时间
{FA();CA=0;}//执行,并清除CA计数器。
if(CB==3){FB();CB=0;}
if(CC==6){FC();CC=0;}
//如果不满足上述条件,执行其他程序。
。。。。
}
追问:你好!这种方法,三个延时是同时起步的吧?我想分开起步呢?请问大虾,可以么?本人也是刚起步,问的不妥的地方敬请大虾理解。
我学的51系列单片机,可以定义多个定时器,分别控制延时
但是程序是顺序执行的,你的要求是多进程同时发展,每个进程有独立程序段和独立的定时器
你要看看你学的单片机是不是支持多进程
然后按照多进程编程,就能实现要求
比如现在的计算机都是多进程,你电影播放器暂停,但是播歌曲的不受影响,上网不受影响
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
中考化学实验加试中试剂瓶上的标签是汉字吗
劳务派遣工离职要多久
连云港市繁富水泥有限公司在什么地方啊,我要
华为手机的内存优化级别在哪里
求几个耐玩的即时动作手游 最好是3d 特效好点
颐呈大酒店地址有知道的么?有点事想过去
鉴赏《滁州西涧》
鸣顺超市在哪里啊,我有事要去这个地方
肛周脓肿术后13天出院想回家自己擦药,谁告诉
自家房子的正后面一排房子有几间倒塌的,对自
御香聚熟食地址在什么地方,想过去办事
为什么我没有自己的圈子自己的生活呢?
一个男生暗恋一个女生,女生发了暗恋说说,男
做大脑伤残鉴定要花多少钱呢
邮局包裹快递哪种最快
推荐资讯
我要一篇日记 4年级的 400字以上 急需! 快点
东风路一段地址有知道的么?有点事想过去
大S推荐的CREME HAIR BLEACH(漂胡剂)的原理
破店地址好找么,我有些事要过去
汽车保养和新车三年质保有没有关系?比如我在
丽水到宜昌东有动车吗
I5处理器参数
为什么我自己写的这个strcpy 函数是错误的 显
乡巴老商标有注册吗
于颖超藏头诗,谢谢
胆碱酯酶高出1200怎么回事
清水河城建监察大队在哪里啊,我有事要去这个
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?