完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各位大佬,问个51单片机的问题,DS18B20温度传感器,是一个单总线通信的传感器,目前使用一个IO口来通信,并且正常工作。 现在我想同时读取5个DS18B20的温度,使用5个IO口模拟,但是我想使用同一份18B20通信代码,该怎么实现。能否把51 单片机的IO作为参数传递进去,这样就能传入不同的IO口实现不同18B20温度读取。 |
|
相关推荐
4个回答
|
|
实现起来应该不难,设计一个接口类似:
int get_DS18B20_value(int pin_no); 这样的,就可以了。 值得注意的是,函数接口内容操作IO时,就必须以pin_no为目标对象了,需要做好IO口的映射关系。 |
|
|
|
/*
关键我如何实现这51单片机的IO作为对象传入进函数。 现在 第一个传感器IO 是DS18B20_DQ 后面还有四个传感器 DS18B20_DQ2 DS18B20_DQ3 DS18B20_DQ4 DS18B20_DQ5。 如何使用同一份DS18B20_Write_Byte函数。而不用复制5份。 */ #include "stc12ca60s2.h" sbit DS18B20_DQ = P2^0; void DS18B20_Write_Byte( unsigned char dat) { unsigned char i; for( i = 0 ; i < 8 ; i++ ) { DS18B20_DQ = 0; _nop_(); //延时>1us _nop_(); DS18B20_DQ = dat&0x01; //先写低位 dat >>= 1; DS18B20_Delay(70); //延时60~120us DS18B20_DQ = 1; //释放总线 _nop_(); //延时>1us _nop_(); } } |
|
|
|
void SetDq(u8 id)
{ switch (id) case 0 : DQ0 = 1; break case 1 : DQ1 = 1; break; ..... } void ResetDq(u8 id) { } u8 ReadDq(u8 id) { } |
|
|
|
可以把IO所在地址做到一个数组中,把数组下标作为参数传递给通讯函数,在通讯函数中,利用参数从指定的数组中取得IO口地址,对地址进行赋值1/0,实现通讯。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-初识设备树之设备组织架构
734 浏览 0 评论
582 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-初识设备树之设备树组成和结构
840 浏览 0 评论
【敏矽微ME32G070开发板免费体验】点亮WS2812B灯板
1039 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-Linux内核移植之内核启动流程
937 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12167 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-12 16:27 , Processed in 0.660774 second(s), Total 47, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号