发新帖本帖赏金 3.00元(功能说明)我要提问
123
返回列表
打印

论Keil C51下如何实现模块驱动文件复用

[复制链接]
楼主: 幸福至上
手机看帖
扫描二维码
随时随地手机跟帖
41
幸福至上|  楼主 | 2016-1-27 10:39 | 只看该作者 回帖奖励 |倒序浏览
kk118a 发表于 2016-1-26 22:10
用一个P口,一位定为数据口,剩下的扩展一个多路开关,

呃,好吧。这种方式其实也很不错的。驱动程序就和单个的一样,通过多路开关来选中要操作的器件。居然没考虑到过。:dizzy:

使用特权

评论回复
42
幸福至上|  楼主 | 2016-1-27 10:43 | 只看该作者
picasso101 发表于 2016-1-27 09:44
我觉得18B20既然给了序列号,其实多路采集用单总线是比较好的方式,简化了外部布线,同时也减少了你的代码 ...

你好。谢谢回复。对于美信的单总线通信协议我大体看了一下,如果只用一条数据总线,我暂时没看明白如何明确每个传感器所对应的位置。举个例子这样说:比如我现在有8个DS18B20,分别布置在机器里的不同位置,进行温度检测,这种情况如果采用单总线方式的话,要如何才能知道哪个传感器对应的是哪个位置呢?我看网上的说法是一个一个位置地添加上去,并读取保存序列号,不知是否如此?请指正。

使用特权

评论回复
43
picasso101| | 2016-1-27 14:52 | 只看该作者
幸福至上 发表于 2016-1-27 10:43
你好。谢谢回复。对于美信的单总线通信协议我大体看了一下,如果只用一条数据总线,我暂时没看明白如何明 ...

对,每个传感器都有一个固定的ID,用的时候可以自己先贴上编号,再布线

使用特权

评论回复
44
幸福至上|  楼主 | 2016-1-27 18:33 | 只看该作者
picasso101 发表于 2016-1-27 14:52
对,每个传感器都有一个固定的ID,用的时候可以自己先贴上编号,再布线

哦。这样的话,比较适合布线距离比较长的情况,比如说一个较宽的场合,只需要拉一根数据总线即可。我这儿是用于机器内部测温,如果每次装配都要一个一个安上去并调试,有些过于麻烦啊。而且每台都要这么做,相比较之下,我还是觉得多条数据总线,复用驱动的方式比较适合我现在这种情况点。;P

使用特权

评论回复
45
picasso101| | 2016-1-27 20:11 | 只看该作者
幸福至上 发表于 2016-1-27 18:33
哦。这样的话,比较适合布线距离比较长的情况,比如说一个较宽的场合,只需要拉一根数据总线即可。我这儿 ...

这样也简单,看你咯

使用特权

评论回复
46
幸福至上|  楼主 | 2016-1-28 15:02 | 只看该作者
picasso101 发表于 2016-1-27 20:11
这样也简单,看你咯

还是很感谢,至少让我确实清晰了单总线方式的操作。;P

使用特权

评论回复
47
lxj19901115| | 2016-1-29 11:53 | 只看该作者
这类的话,最好做个几个表格,比如,传感器操作的对应的IO端口,这是一个表,另外就是个就是传感器对应的某个端口上的具体IO,用表格的方式去运作,这样方便管理,相应的代码量会少点,
如 gpio_port ds18b20_hal_port[]={...GPIOA,GPIOB,,,};
gpio_pin ds18b20_hal_pin[]={..gpio_pin_0,gpio_pin_1};
这样的方式去隐射,不要用具体的宏定义,也是11对应的关系的,
在数据采集和通信上,具体IO操作是同样的,

使用特权

评论回复
48
lxj19901115| | 2016-1-29 11:54 | 只看该作者
#define oled_io_mask_cs                                GPIO_Pin_15
#define oled_io_mask_res                        GPIO_Pin_14
#define oled_io_mask_dc                                GPIO_Pin_6
#define oled_io_mask_sck                        GPIO_Pin_7
#define oled_io_mask_do                                GPIO_Pin_0


#define oled_io_port_to_cs                GPIOB
#define oled_io_port_to_res                GPIOB
#define oled_io_port_to_dc                GPIOA
#define oled_io_port_to_sck                GPIOA
#define oled_io_port_to_do                GPIOB




#define RST_ResetBit                (oled_io_port_to_res->ODR &=~ oled_io_mask_res)
#define RST_SetBit                        (oled_io_port_to_res->ODR |= oled_io_mask_res)



#define Handler_SPI_CS_Low      (oled_io_port_to_cs->ODR &=~oled_io_mask_cs)
//#define Handler_SPI_CS_Low      (GPIOA->ODR &=~oled_io_mask_cs)
#define Handler_SPI_CS_High     (oled_io_port_to_cs->ODR |=oled_io_mask_cs)
#define Handler_SPI_SCK_Low     (oled_io_port_to_sck->ODR &=~oled_io_mask_sck)
#define Handler_SPI_SCK_High    (oled_io_port_to_sck->ODR |=oled_io_mask_sck)
#define Handler_SPI_MOSI_Low    (oled_io_port_to_do->ODR &=~oled_io_mask_do)
#define Handler_SPI_MOSI_High   (oled_io_port_to_do->ODR |=oled_io_mask_do)
#define Handler_SPI_MISO_DC_Low (oled_io_port_to_dc->ODR &=~oled_io_mask_dc)
#define Handler_SPI_MISO_DC_High (oled_io_port_to_dc->ODR |=oled_io_mask_dc)

使用特权

评论回复
49
幸福至上|  楼主 | 2016-1-29 23:48 | 只看该作者
lxj19901115 发表于 2016-1-29 11:53
这类的话,最好做个几个表格,比如,传感器操作的对应的IO端口,这是一个表,另外就是个就是传感器对应的某 ...

位定义数组方式我去试一下看能行不,你下面贴的例子主要是说把控制端口用宏定义隐藏起来以便重修改和有意义化吗?这个在正式程序里会这样的,这儿直接用p0,p1举个例子啦

使用特权

评论回复
50
nejor| | 2016-2-14 22:29 | 只看该作者
好东西,值得学习

使用特权

评论回复
51
pang7| | 2016-2-16 09:46 | 只看该作者
楼主具有匠人精神 值得学习 后生可畏。学到好多知识,谢谢各位大牛的精彩点评。

使用特权

评论回复
52
mega1702| | 2016-3-28 14:16 | 只看该作者
感谢楼主分享!!!

使用特权

评论回复
发新帖 本帖赏金 3.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则