切换到宽版
  • 5079阅读
  • 34回复

[C51]这样的单片机定时动作如何实现? [复制链接]

上一主题 下一主题
离线zhonsir
 

发帖
394
M币
2321
专家
2
粉丝
12
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2014-02-12

         坛里的高手总是如云,虽然我的这个问题可能很简单,但我自己想不出一个好的方案,所以就还是要请求坛里高手给点解决思路。

        我想问一下,用STC89c52写一个定时程序,有类似设定多组闹钟的功能,但闹钟只是简单的驱动蜂鸣器这一动作而已。具体的说,就是有多种行为动作,动作一,日期时间定时,时间到了驱动IO口1(如p2^1)指定时长后自动关闭;动作二,日期时间定时,时间到了驱动IO口2(如p2^2)指定时长后自动关闭……。动作可能有不同类型的四五种,但可以自行选择,不一定每一动作都设定了要执行,而且也不一定是动作一的定时时间一定比动作二的定时时间早,还有要注意的就是,动作交叉的情况,就是说,可能动作一执行的时候,还没有到关闭时,动作二的定时执行时间来了,或者还有的时候,动作一动作二甚至动作三都相继执行了,都还未到关闭动作时,动作四的定时时间也来了。不知道这样描述大家看明白了没?(读书的时候,小说看少了,语文实在是差啊

      定时设置的数据结构我准备这样规定:
struct DateTime
{
  unsigned char second;
  unsigned char min;
  unsigned char hour;
  ...
}

struct forRunTime
{
  unsigned char actionID;            动作编号
        DateTime actionDate;         动作执行时间:年月日时分秒20140213093000数据类型float或自定或就用字符数组
    unsigned int actionHowLong;  动作执行多久,单位分钟
                 sbit actionIO;              动作驱动的IO口
                  bit actionRepeat;       动作是否重复
  unsigned int RepeatMode;        动作重复模式:0不重复;1按小时重复;2按天重复;3按周重复;4按月重复(及下一月同一日期执行)
  unsigned int RepeatNum;         上面重复模式单位下的数值,如此数值为2时,重复模式为1时表示下一动作在此设定动作的下2小时执行,重复模式为3时,表示2周后执行。
}

将要执行的动作加入到执行定时时间表,执行到每一动作后,如果此动作属不重复的,就自动从动作表中删除,如需要重复的,就改动动作执行时间再投入定时监听列表中。执行定时时间表保存在外接的AT24CXX I2C接口EEPROM存储模块中

假设当前设定的动作定时表如下
actionID   actionDate   actionHowLong actionIO  actionRepeat  RepeatMode  RepeatNum
    3     20140302080500      20               P2^5                1                  2                  15
    1     20140215091000      15               P2^2                1                  1                  12
    4     20140214063000      30               P2^3                1                  3                   1
    2     20140215133000      60               P2^1                1                  4                  15
    5     20140217101000      25               P2^4                0                  0                   0

请问各们大侠,这种定时中断如何编程实现?感谢大家提供参考方案或程序代码,有可行的代码的话我将送50M币表示感谢!

离线oscillator

发帖
3995
M币
948
专家
24
粉丝
112
只看该作者 1楼 发表于: 2014-02-13
请登录后查看
本帖最近打赏记录:共2条打赏M币+8
离线jun4664
发帖
640
M币
724
专家
1
粉丝
20
只看该作者 2楼 发表于: 2014-02-13
请登录后查看
本帖最近打赏记录:共2条打赏M币+6
离线zhonsir

发帖
394
M币
2321
专家
2
粉丝
12
只看该作者 3楼 发表于: 2014-02-13
回 nick_raynor 的帖子
请登录后查看
本帖最近打赏记录:共1条打赏M币+5
离线zhonsir

发帖
394
M币
2321
专家
2
粉丝
12
只看该作者 4楼 发表于: 2014-02-13
回 jun4664 的帖子
请登录后查看
离线oscillator

发帖
3995
M币
948
专家
24
粉丝
112
只看该作者 5楼 发表于: 2014-02-13
请登录后查看
本帖最近打赏记录:共1条打赏M币+5
离线oscillator

发帖
3995
M币
948
专家
24
粉丝
112
只看该作者 6楼 发表于: 2014-02-13
回 zhonsir 的帖子
请登录后查看
本帖最近打赏记录:共1条打赏M币+5
离线oscillator

发帖
3995
M币
948
专家
24
粉丝
112
只看该作者 7楼 发表于: 2014-02-13
回 zhonsir 的帖子
请登录后查看
本帖最近打赏记录:共2条打赏M币+7
离线蓝_猫

发帖
15149
M币
0
专家
11
粉丝
1220
只看该作者 8楼 发表于: 2014-02-13
请登录后查看
离线benli

发帖
33704
M币
6633
专家
91
粉丝
488
只看该作者 9楼 发表于: 2014-02-13
回 zhonsir 的帖子
请登录后查看
快速回复
限80 字节
温馨提示:欢迎交流讨论,请勿发布纯表情、纯引用等灌水帖子;以免被删除
 
上一个 下一个