找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1012|回复: 8
收起左侧

怎么共用一个定时器调用方法?

[复制链接]
ID:686536 发表于 2022-8-7 14:23 | 显示全部楼层 |阅读模式
用一个定时器,一个IO输出定时,5分钟输出高电平,隔1分钟输出低电平,再输出6分钟高电平,请各大侠指教下!
回复

使用道具 举报

ID:155507 发表于 2022-8-7 14:56 | 显示全部楼层
用一个定时器即可,将定时器设置成标准节拍,如1MS。需要多少定时时间,在定时器中断服务程序中计数就可以了。


http://www.51hei.com/bbs/forum.p ... 494&pid=1099428
回复

使用道具 举报

ID:624769 发表于 2022-8-7 14:57 来自手机 | 显示全部楼层
这描述也是无敌了,5分钟输出高电平,隔一分钟输出低电平,那么这隔的一分钟,io什么状态?高阻态?随机乱跳?  
回复

使用道具 举报

ID:1034262 发表于 2022-8-7 15:33 | 显示全部楼层
定时器工作于1ms定时,作为系统节拍。然后再中断里处理各种定时,年月日时分秒,软件定时器,随便整。
回复

使用道具 举报

ID:686536 发表于 2022-8-7 16:36 | 显示全部楼层
188610329 发表于 2022-8-7 14:57
这描述也是无敌了,5分钟输出高电平,隔一分钟输出低电平,那么这隔的一分钟,io什么状态?高阻态?随机乱跳 ...

输出高电平5分钟,再输出1分钟低电平,再输出6分钟高电平!
回复

使用道具 举报

ID:686536 发表于 2022-8-7 20:15 | 显示全部楼层
188610329 发表于 2022-8-7 14:57
这描述也是无敌了,5分钟输出高电平,隔一分钟输出低电平,那么这隔的一分钟,io什么状态?高阻态?随机乱跳 ...

输出高电平5分钟,再输出1分钟低电平,再输出6分钟高电平!
回复

使用道具 举报

ID:123289 发表于 2022-8-7 22:12 | 显示全部楼层
很简单:
在定时中断服务程序中,多设置几个变量用于计数,对应计数1分,5分,6分……,想几个就几个。
计数满则时间到,该干啥干啥。同时复位计数值,继续计数。
回复

使用道具 举报

ID:624769 发表于 2022-8-8 21:52 | 显示全部楼层
c511977 发表于 2022-8-7 20:15
输出高电平5分钟,再输出1分钟低电平,再输出6分钟高电平!

做一个 10ms 的定时中断,中断程序大致如下: 因为你具体也没说清楚,虽然不符合 闭环逻辑,但是该你参考应该足够了。

char        T0_Count,Mode_Count,Mode;

void        T0_INT()        interrupt 1
{
        if(++T0_Count == 100)
        {
                T0_Count = 0;
                switch(Mode)
                {
                        case        0:        //初始状态
                        IO        = 1;
                        Mode++;
                        break;
                        case        1:
                        if(++Mode_Count==5)       
                        {
                                Mode_Count = 0;
                                IO = 0;
                                Mode++;
                        }
                        break;
                        case        2:
                        if(++Mode_Count==1)
                        {
                                Mode_Count = 0;
                                IO = 1;
                                Mode++;
                        }
                        break;
                        case        3:
                        if(++Mode_Count==6)
                        {
                                Mode_Count = 0;       
                                IO = 0;                        //接下来变啥??
                                Mode++;                        //要不要 Mode = 0? 啥时候闭环?
                        }
                        break;
               
                }
               
        }
}

大致这样一个东西。

回复

使用道具 举报

ID:811253 发表于 2022-8-10 16:52 | 显示全部楼层
在定时器里同添加一个变量计时,例如定时器是1MS   假如是500MS低电平  100MS高电平可以这样写
cnt++;
if(cnt>=500){
  高电平;
}else {
  低电平;
}
if(cnt>=600)
     cnt = 0;
              
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表