这是一个比较简单的 1-wire 总线 C++ 模板库。这个库由 4 个部分组成:
1、1-wire 协议链路层接口类:ow_t
定义了 1-wire 协议的操作集合:reset, enum, touch。但这里没有具体实现这些操作。
2、1-wire 器件枚举类:ow_enum_t
实现了 enum 操作。
3、1-wire 协议链路层实现类:owou_t,owobb_t
在指定的数据链路层上实现了 reset 和 touch 操作。
owou = 1-wire over uart
owobb = 1-wire over bit-banging
4、1-wire 协议物理层类
提供“链路层实现类”所需要的物理操作。
得益于 C++ 的模板编程,这个 1-wire 库是非常灵活而高效的:它可以选择枚举、数据链路、以及实现数据链路的物理方法。
例如示例中的定义:
ds18b20_t<ow_enum_t<owou_t<owou_m48_t>>> ds18b20[8];
表示了以 atmega48 的 uart 数据链路实现的 1-wire 总线,总线具有枚举功能,其上挂有多个 ds18b20 器件。
ds18b20_t<owou_t<owou_m48_t>> ds18b20;
表示了以 atmega48 的 uart 数据链路实现的 1-wire 总线,总线没有枚举功能,其上只有一个 ds18b20 器件。
ds18b20_t<owobb_t<owobb_m48_pd0_t>> ds18b20;
表示了用 atmega48 的 PORTD0 引脚,以 bit-banging 方法实现的 1-wire 总线,总线没有枚举功能,其上只有一个 ds18b20 器件。
定义好后,就可以很方便的操作 1-wire 器件了。
附件为 avrstudio 示例工程(需要 avr-gcc 4.3 以上)。 |