DS18B20专题二

DS18B20专题二

这是我编写DS18B20驱动程序时,遇到的问题,仅供自己以后少踩坑,踩同样的坑。

(1)怎样打印16进制的数据

// 打印搜索到的DS18B20的ROM  16进制数显示
os_printf("%2X ",DS18B20_ID_Buff[DS18B20_I][DS18B20_J]);

(2)搜索ROM

//中的参数Num不能去掉,会报错。
u8  DS18B20_SearchROM(u8 (*pID)[8],u8 Num);

(3)数组的下标不能为变量

//中数组的下标不能为变量。
unsigned char BUFFER[DS18B20_NUM-1]={0};

(4)搜出来的ROM是一样

u8 DS18B20_SearchROM(u8 (*pID)[8],u8 Num)  
{   
    unsigned char k,l=0,ConflictBit,m,n,i;  
    unsigned char BUFFER[MAXNUM-1]={0};  //****初始化栈顶值为0,这样就可以保证循环的判断****或者在循环外对 BUFFER[0]=0;
    unsigned char ss[64];
                unsigned char s=0;  
    u8 num = 0; 
    ...
    ...
    ...

(5)添加延时可以解决85℃的问题,但是会影响程序的执行,所以我屏蔽了。

 s16 ICACHE_FLASH_ATTR DS18B20_ReadDesignateTemper(u8 pID[8])
{
	u8 th, tl;
	s16 data;

	if(DS18B20_Reset() == FALSE)
	{
		return 0xffff;				//返回错误
	}

	DS18B20_WriteByte(0xcc);		//跳过读序列号
	DS18B20_WriteByte(0x44);		//启动温度转换
	delay_ms(750);//我自己添加的解决85摄氏度

(6)消除85℃,我就是利用的方法二

	//DS18B20开始
	os_printf("\r\n=================================================\r\n");
	DS18B20_Search_Num=DS18B20_SearchROM(DS18B20_ID_Buff,DS18B20_NUM);
	os_printf("总线上实际挂载DS18B20数量:%d\r\n",DS18B20_NUM);
	os_printf("总线上搜素到的DS18B20数量:%d\r\n",DS18B20_Search_Num);

	for(DS18B20_I = 0;DS18B20_I < DS18B20_Search_Num;DS18B20_I++)
	{
		os_printf("\r\n DS18B20 No%d ID: ",DS18B20_I);
		for(DS18B20_J = 0;DS18B20_J < 8;DS18B20_J ++)
		{
			os_printf("%2X ",DS18B20_ID_Buff[DS18B20_I][DS18B20_J]);//打印搜索到的DS18B20的ROM ,16进制数显示
		}
	}

	//消除85℃开始
	DS18B20_Reset();
	DS18B20_WriteByte(0xcc);		//跳过读序列号
	DS18B20_WriteByte(0x44);		//启动温度转换
	//消除85℃结束
	os_printf("\r\n=================================================\r\n");
	//DS18B20结束

(7)方便移植

//根据电路板上的DS18B20实际连接情况修改的内容(开始)
#define SET_DS18B20_PIN_OUTPUT PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_GPIO13)//设置DS18B20为输出
#define SET_DS18B20_PIN_OUTPUT_LEVEL_1 GPIO_OUTPUT_SET(GPIO_ID_PIN(13), 1)//DS18B20引脚输出高电平
#define SET_DS18B20_PIN_OUTPUT_LEVEL_0 GPIO_OUTPUT_SET(GPIO_ID_PIN(13), 0)//DS18B20引脚输出低电平
#define SET_DS18B20_PIN_INPUT PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_GPIO13)//设置DS18B20引脚为输入
#define GET_DS18B20_PIN_LEVEL GPIO_INPUT_GET(GPIO_ID_PIN(13))//获得DS18B20引脚的电平
#define SET_DS18B20_PIN_OUTPUT_LEVE(bit) GPIO_OUTPUT_SET(GPIO_ID_PIN(13), bit & 0x01)//写入最低位
#define DELAY_FUNC(x) os_delay_us(x)//微秒时间
//根据电路板上的DS18B20实际连接情况修改的内容(结束)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随与博主沟通,博主会及解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随与博主沟通,博主会及解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随与博主沟通,博主会及解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随与博主沟通,博主会及解答。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值