久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5946|回復: 2
打印 上一主題 下一主題
收起左側

C語言寫的單片機定時器回調函數

[復制鏈接]
跳轉到指定樓層
樓主
C語言寫的定時器回調函數,可以移植到任何有定時器的單片機上,只要設置單片機定時器1ms中斷,這樣在主循環中定時時間到了就會調用相應的函數,這樣我們就有了無數個軟件定時器使用,軟件定時器可以啟動,停止,一次性的。從別的網站下載的,分享給大家。具體參考附件程序。


單片機源程序如下:
  1. /*
  2. *                   multi_timer.c
  3. *
  4. *      Created on: 20161229
  5. *      @Author   : 曉宇 <karaxiaoyu@gmail.com>
  6. *                @id       : 芯片之家
  7. *      @version  :V1.0.0
  8. */

  9. #include "multi_timer.h"

  10. //timer handle list head.
  11. static struct Timer* head_handle = NULL;

  12. //Timer ticks
  13. static uint32_t _timer_ticks = 0;

  14. /**
  15.   * @brief  Initializes the timer struct handle.
  16.   * @param  handle: the timer handle strcut.
  17.   * @param  timeout_cb: timeout callback.
  18.   * @param  repeat: repeat interval time.
  19.   * @retval None
  20.   */
  21. void timer_init(struct Timer* handle, void(*timeout_cb)(), uint32_t timeout, uint32_t repeat)
  22. {
  23.         // memset(handle, sizeof(struct Timer), 0);
  24.         handle->timeout_cb = timeout_cb;
  25.         handle->timeout = _timer_ticks + timeout;
  26.         handle->repeat = repeat;
  27. }

  28. /**
  29.   * @brief  Start the timer work, add the handle into work list.
  30.   * @param  btn: target handle strcut.
  31.   * @retval 0: succeed. -1: already exist.
  32.   */
  33. int timer_start(struct Timer* handle)
  34. {
  35.         struct Timer* target = head_handle;
  36.         while(target) {
  37.                 if(target == handle) return -1;        //already exist.
  38.                 target = target->next;
  39.         }
  40.         handle->next = head_handle;
  41.         head_handle = handle;
  42.         return 0;
  43. }

  44. /**
  45.   * @brief  Stop the timer work, remove the handle off work list.
  46.   * @param  handle: target handle strcut.
  47.   * @retval None
  48.   */
  49. void timer_stop(struct Timer* handle)
  50. {
  51.         struct Timer** curr;
  52.         for(curr = &head_handle; *curr; ) {
  53.                 struct Timer* entry = *curr;
  54.                 if (entry == handle) {
  55.                         *curr = entry->next;
  56. //                        free(entry);
  57.                 } else
  58.                         curr = &entry->next;
  59.         }
  60. }

  61. /**
  62.   * @brief  main loop.
  63.   * @param  None.
  64.   * @retval None
  65.   */
  66. void timer_loop()
  67. {
  68.         struct Timer* target;
  69.         for(target=head_handle; target; target=target->next) {
  70.                 if(_timer_ticks >= target->timeout) {
  71.                         if(target->repeat == 0) {
  72.                                 timer_stop(target);
  73.                         } else {
  74.                                 target->timeout = _timer_ticks + target->repeat;
  75.                         }
  76.                         target->timeout_cb();
  77.                 }
  78.         }
  79. }

  80. /**
  81.   * @brief  background ticks, timer repeat invoking interval 1ms.
  82.   * @param  None.
  83.   * @retval None.
  84.   */
  85. void timer_ticks()
  86. {
  87.         _timer_ticks++;
  88. }
復制代碼

所有資料51hei提供下載:
MultiTimer.rar (2.14 KB, 下載次數: 64)


評分

參與人數 1黑幣 +90 收起 理由
admin + 90 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:135781 發表于 2020-4-20 08:35 | 只看該作者
時鐘_timer_ticks不清零,timeout一直累加,這樣會出問題的
回復

使用道具 舉報

板凳
ID:135781 發表于 2020-4-20 09:30 | 只看該作者
這個程序里面會出現一個問題,就是數據溢出的問題,把判斷條件改下就行了
if(_timer_ticks >= target->timeout)改為 if(_timer_ticks == target->timeout)
這樣就不會在數據溢出后從零開始出現的誤判問題
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲午夜小视频 | 国产精品美女久久久久久久久久久 | 国产精品久久久久久久久久了 | av在线一区二区三区 | 欧美精品1区2区 | 欧美日韩电影一区二区 | 亚洲成人免费在线观看 | 91免费在线视频 | 欧美99久久精品乱码影视 | 久久久久电影 | 成人网av | 国产精品日韩欧美一区二区三区 | 成人国产精品一级毛片视频毛片 | 国产成在线观看免费视频 | 免费观看www | 国产成人一区 | 五月激情综合网 | 少妇黄色 | 成人国产精品色哟哟 | 久久久精品| 国产精品精品视频一区二区三区 | 亚洲精品一区二区三区中文字幕 | 成人精品一区二区三区 | 99精品国自产在线 | 色综合久久久久 | www四虎影视 | 国产一区三区在线 | 91麻豆精品国产91久久久更新资源速度超快 | 在线观看中文字幕一区二区 | 精品视频在线播放 | 国产精品久久久久久久一区二区 | 午夜视频在线播放 | 亚洲一区二区在线视频 | 亚洲一区二区三区免费在线观看 | 日本久久精品视频 | 日韩欧美中文在线 | 日本亚洲精品成人欧美一区 | 一区二区三区四区在线视频 | 在线免费观看黄色 | 免费一区二区三区 | 日本精品视频一区二区 |