沈北默 2023-01-09 20:30 采纳率: 50%
浏览 18

定时器驱动DS18B20

使用定时器+中断的方式写DS18B20驱动,中断处理函数尽量简洁,执行几个固定操作最好,状态转移在主函数里实现。有哪位朋友能提点一下,我刚接触单片机,实在想不出来。

  • 写回答

1条回答 默认 最新

  • _leoatliang 2023-01-10 10:14
    关注

    在单片机中使用定时器 + 中断的方式来驱动 DS18B20 温度传感器的步骤如下:

    1. 配置定时器的时钟源和分频因子,并开启定时器中断。

    2. 配置 DS18B20 的引脚,并使用单总线通信协议(One-Wire)读取温度数据。

    3. 在中断处理函数中,读取定时器的计数值,并用它来更新 DS18B20 的温度值。

    4. 在主函数中,使用一个状态机来管理 DS18B20 的驱动程序的状态。

    下面是一个简单的例子,展示了如何使用定时器 + 中断的方式来驱动 DS18B20 温度传感器:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "DS18B20.h"
    
    #define TIMER_PERIOD 1000 // 定时器周期,单位为毫秒
    #define DS18B20_PIN PB1 // DS18B20 的引脚
    
    static volatile uint32_t timer_count = 0; // 定时器计数值
    static volatile uint8_t ds18b20_state = 0; // DS18B20 驱动程序的状态
    static volatile float ds18b20_temp = 0; // DS18B20 的温度值
    
    // 中断处理函数,每当定时器计数值溢出时调用
    void timer_handler(void)
    {
        timer_count++; // 更新定时器计数值
    }
    
    // 主函数
    int main(void)
    {
        // 配置定时器的时钟源和分频因子,并开启定时器中断
      timer_init(TIMER_PERIOD);
      timer_enable_int();
    
        while (1) {
        switch (ds18b20_state) {
            case 0: // 初始化 DS18B20
                ds18b20_init(DS18B20_PIN);
                ds18b20_state = 1;
                break;
            case 1: // 读取 DS18B20 的温度
                if (timer_count >= TIMER_PERIOD) { // 每隔一定时间执行一次
                    timer_count = 0; // 重置定时器计数值
                    ds18b20_read_temp(&ds18b20_temp);
                }
                break;
            default:
                break;
        }
    }
    
    return 0;
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 1月9日

悬赏问题

  • ¥100 栈回溯相关,模块加载后KiExceptionDispatch无法正常回溯了
  • ¥15 麒麟V10桌面版SP1如何配置bonding
  • ¥15 Marscode IDE 如何预览新建的 HTML 文件
  • ¥15 K8S部署二进制集群过程中calico一直报错
  • ¥15 java python或者任何一种编程语言复刻一个网页
  • ¥20 如何通过代码传输视频到亚马逊平台
  • ¥15 php查询mysql数据库并显示至下拉列表中
  • ¥15 freertos下使用外部中断失效
  • ¥15 输入的char字符转为int类型,不是对应的ascall码,如何才能使之转换为对应ascall码?或者使输入的char字符可以正常与其他字符比较?
  • ¥15 devserver配置完 启动服务 无法访问static上的资源