历史上的今天
返回首页

历史上的今天

今天是:2025年02月22日(星期六)

2020年02月22日 | 基于STM8的DS18B20检测

2020-02-22 来源:eefocus

最近要鼓捣出5V的ds18b20用stm8采集,网上一搜发现大部分都是把数据端直接接到3.3的引脚,我也这么做的。


用的DS18B20为淘宝外面有钢管的那种,系统板为STM8L051,第一次接触stm8先去找的库函数,以附件形式粘贴到下面。用IAR建工程一搜一大把。


单总线协议因为只有一条线,时序很重要,肯定要使用延时函数,用的原子哥的延时函数,,照搬原子哥的代码:http://www.openedv.com/posts/list/17347/htm


记得定义头文件时加上 #include "stm8l15x_conf.h",不然会报错


#include "delay.h"

 

volatile u8 fac_us=0;

 

void delay_init(u8 clk)

{

  if(clk>16)fac_us=(16-4)/4;

  else if(clk>4)fac_us=(clk-4)/4;

  else fac_us=1;

}

 

void delay_us(u16 nus)

{

  __asm(

"PUSH A          n"    //1T,压栈

"DELAY_XUS:      n"

"LD A,fac_us     n"    //1T,fac_us加载到累加器A

"DELAY_US_1:     n"

"NOP             n"    //1T,nop延时

"DEC A           n"    //1T,A--

"JRNE DELAY_US_1 n"    //不等于0,则跳转(2T)到DELAY_US_1继续执行,若等于0,则不跳转(1T).

"NOP             n"    //1T,nop延时

"DECW X          n"    //1T,x--

"JRNE DELAY_XUS  n"    //不等于0,则跳转(2T)到DELAY_XUS继续执行,若等于0,则不跳转(1T).

"POP A           n"    //1T,出栈

);

}

 

void delay_ms(u32 nms)

{

  u8 t;

  if(nms>65)

  {

    t=nms/65;

    while(t--)delay_us(65000);

    nms=nms%65;

  }

  delay_us(nms*1000);

}

因为我没有显示的东西,只能用printf,在参考大佬「C_Aya」的文章,原文链接:https://blog.csdn.net/baweiyaoji/article/details/72812045  成功弄出来后,可以正常打印字符串,但一遇到带参数的printf立马内存爆炸,然后又在参考大佬「Dancer__Sky」的文章,原文链接:https://blog.csdn.net/Dancer__Sky/article/details/82284961得以成功打印。记得自己的头文件不要定义成这个名字"stdarg.h",我都不记得C有这个头文件了,不然你无法调用C的stdarg.h,将会出现错误。


现在就到了最关键的时候了,这一部分我参考的大佬石破天开 https://blog.csdn.net/u012166958/article/details/84872480


// 复位,主机给从机发送复位脉冲

void DS18B20_Rst(void)

{

  DS18B20_Mode_Out();

  delay_us(2);

  DS18B20_DQ_OUT_Low; // 产生至少480us的低电平复位信号

  delay_us(700);

  DS18B20_DQ_OUT_High; // 在产生复位信号后,需将总线拉高

  delay_us(3);

}

 

// 写1字节到DS18B20

void DS18B20_Write_Byte(u8 dat)

{

  u8 j;

  u8 testb;

  DS18B20_Mode_Out();

  for (j = 1; j <= 8; j++)

  {

    testb = dat & 0x01;

    dat = dat >> 1;

    if (testb)

    {

      DS18B20_DQ_OUT_Low;// 写1

      delay_us(2);

      DS18B20_DQ_OUT_High;

      delay_us(80);

    }

    else

    {

      DS18B20_DQ_OUT_Low;// 写0

      delay_us(78);

      DS18B20_DQ_OUT_High;// 释放总线

      delay_us(2);

    }

}

这两部分延时不太一样,贴出来大家可以试一试。注意引脚输入不要弄错成浮空输入。


最后大体是这个效果

推荐阅读

史海拾趣

CoolerMaster公司的发展小趣事

1992年,台北的一间出租屋内,林仁政凭借对电脑硬件的深厚理解与直觉,创立了讯凯国际股份有限公司,即现今广为人知的Cooler Master。初期,公司以生产个人电脑用散热器起家,目标明确——提供业界最好的散热方案。在没有资金、没有支持的情况下,林仁政独自完成了品牌的创建、日常事务的处理以及工作进程的管理。他的坚持与努力,使得Cooler Master逐渐在市场中站稳脚跟,开启了其在散热领域的传奇之旅。

AND Displays公司的发展小趣事

随着公司规模的扩大和实力的增强,AND Displays开始实施国际化战略。公司在全球范围内设立了多个研发中心和生产基地,以便更好地满足不同地区客户的需求。同时,公司还加强了与国际同行的交流与合作,共同推动显示技术的创新与发展。通过全球布局和资源整合,AND Displays逐渐成为了全球显示行业的领军企业之一。

以上五个故事从不同角度展示了AND Displays公司在电子行业中的发展历程和成就。这些故事不仅反映了公司的技术实力和市场竞争力,也体现了公司对环保、可持续发展等社会责任的关注和担当。

EMC Technology RF Labs公司的发展小趣事

RF Labs非常重视产品质量和品质保证。他们建立了完善的质量管理体系,从原材料采购到生产、检测、包装等各个环节都进行严格的质量控制。同时,RF Labs还引进了先进的生产设备和技术,确保产品的质量和性能达到国际先进水平。这些举措使得RF Labs的产品在市场上享有很高的声誉和口碑。

Bourns公司的发展小趣事

Bourns公司一直以来都注重技术研发与创新。不论是自行研发的产品,还是通过并购或特许所取得的技术,Bourns都持续投入于开发新产品。例如,Bourns推出的最新型旋转式电位器,具备绝缘塑料轴、高额定旋转周期以及宽泛的工作温度范围等特性,这些创新产品在市场上取得了良好的反响。

Aavid Thermalloy公司的发展小趣事

Bourns公司的卓越表现得到了全球知名代理商TTI, Inc.的认可。Bourns连续多年获得TTI全球运营卓越奖,这一奖项是对Bourns全球绩效的最高认可。这一成就不仅彰显了Bourns在全球电子组件市场的领导地位,也反映了其持续提供优质产品和服务的承诺。

洲光源(Chau Light)公司的发展小趣事

在洲光源公司的发展历程中,品质一直是其核心竞争力之一。公司始终坚持严格的质量控制标准,从原材料采购到产品生产、检测的每一个环节都严格把关。同时,洲光源还注重品牌塑造和市场推广,通过参加各种行业展会、举办技术交流会等方式,不断提升品牌知名度和影响力。这些努力使得洲光源的红外LED产品逐渐在市场上脱颖而出,成为众多客户的首选品牌。

问答坊 | AI 解惑

简易红外无线耳机

夜间收看电视节目或播放碟片时,为避免干扰他人休息通常改用耳机听音,此时若用导线将耳机连接至电视机,不但不雅观,而且影响人的活动。若采用本文介绍的红外线无线耳机即可避免上述弊端。 该红外线无 ...…

查看全部问答>

TI28335的参考资料集锦

28335片内FLASH插件安装方法 http://www.hellodsp.com/bbs/viewthread.php?tid=7487 28335的ADC_DMA例程 http://www.hellodsp.com/bbs/viewthread.php?tid=7488 SEED_DEC28335用户指南 http://www.hellodsp.com/bbs/viewthread.php?tid=7489 ...…

查看全部问答>

求助

大家好:    我买了一张Protel DXP 2004 简体中文破解版的光盘,但里面没有安装说明,我安装了两次,还是没有成功,请大家帮忙指点一下,谢谢!…

查看全部问答>

]经典LED知识介绍!

replyreload += \',\' + 378446;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

WINCE 分区如何隐藏

eboot 分了 4个分区, 1个binfs 3个fatfs 3个fatfs在pc上都是别出来了, 现在遇到以下问题: 1). 我想隐藏其中2个fatfs分区, 因为 我要放 应用程序 用 所以需要隐藏起来 2). 现在分区的路径名是按默认的名字, 比如默认是 disk, 那么 后面几 ...…

查看全部问答>

关于ui和菜单,急!

大家好:   谁对UI比较熟,还有就是做菜单的技术,菜单就像是彩屏手机里的菜单或是数字电视里的菜单等,这项技术如何实现,我开发过程中要用到,挺急的,请大家帮忙给我点建议或资料吧。先谢谢了。…

查看全部问答>

关于XILINX芯片IO管脚的上拉电阻的疑问

XILINX的每个IO脚都有一个可选的可配上拉电阻功能,现在我在配置文件的UCF里使用了这个上拉电阻:语法如下:NET\"I_key_data\"        LOC = \"C11\"          | ...…

查看全部问答>

ucgui中button上怎么显示彩色位图啊?

各位高手ucgui中button上怎么显示彩色位图啊?…

查看全部问答>

ADC12多通道程序(2)

使用的是数码管显示相应的电压 #include \"delay.h\" #define   Num_of_Results   32 uint results[Num_of_Results]; uchar d[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; uchar d1[11]={0xbf,0x86, ...…

查看全部问答>

关于430系列A/D采样问题...

现在做实验需要一个430系列的单片机 主要就是A/D采样要达到16位的位宽,且最好AD是单端输入不要差分输入的, 430有能满足这个需求的型号吗? 请各位给推荐几个比较主流的型号,谢谢。…

查看全部问答>