DS18B20专题二
程序员文章站
2022-07-12 10:54:25
...
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实际连接情况修改的内容(结束)
上一篇: DS18B20+STOP模式
下一篇: PyQt5 - 加入线程