北京赛车pk10开奖

STM8L 151G6U6 驱动RW1820温度传感器

2019-11-13来源: eefocus关键字:STM8L  151G6U6  驱动RW1820  温度传感器

兼容DS18B20以及RW1820(VDD=2.8V)版本



#define RW1820_DQ_OUT  GPIO_Init(GPIOC, GPIO_PIN_2,GPIO_Mode_Out_OD_HiZ_Slow); //输出

#define RW1820_DQ_IN   GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_Mode_In_PU_No_IT);     //输入

#define RW1820_DQ_HIGH          GPIO_SetBits(GPIOC, GPIO_PIN_2); //拉高

#define RW1820_DQ_LOW           GPIO_ResetBits(GPIOC, GPIO_PIN_2);  //拉低

#define RW1820_DQ_PULL_UP

北京赛车pk10开奖          GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_Mode_In_PU_No_IT);     //上拉

#define RW1820_DQ_FLOATING

        GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_Mode_In_FL_No_IT);       //浮空

#define RW1820_DQ_PUSH_PULL

          GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_Mode_Out_PP_Low_Fast); //推挽



北京赛车pk10开奖#define RW1820_DQ_VALUE        GPIO_ReadInputDataBit(GPIOC, GPIO_PIN_2) //DQ值

 

北京赛车pk10开奖void _delay_us(uint16_t nCount)

{

    nCount *= 3; 

    while(--nCount);

}

/**

  * @brief _delay_ms

  * @param nCount

  * @retval None

  */

void _delay_ms(uint16_t nCount)

{

    while(nCount--)

北京赛车pk10开奖    {

北京赛车pk10开奖        _delay_us(1000);

北京赛车pk10开奖    }

}

北京赛车pk10开奖//-----------------------------------------------------------------------------//



void RW1820_Init(void)

{

    uint8_t retry=0;    

RW1820_DQ_OUT;   //置为输出口    

RW1820_DQ_HIGH;  //总线拉高

_delay_us(1);

RW1820_DQ_LOW;   //总线产生下降沿,初始化开始

_delay_us(700);  //复位脉冲 总线保持低电平在480 - 960微秒之间

RW1820_DQ_HIGH;  //总线拉高

_delay_us(100);          //100 

        RW1820_DQ_IN;    //置为输入,主机释放总线,准备接收DS18B20的应答脉冲



while(RW1820_DQ_VALUE==1&& (retry<100) )//等待DS18B20发出应答脉冲

        {

          retry++;

北京赛车pk10开奖          _delay_us(1);

        }

        RW1820_DQ_HIGH;  //总线拉高

北京赛车pk10开奖_delay_us(400);  //持续60-400us

}

//-------------从DS18B20写1个字节函数

void RW1820_WriteByte(unsigned char _data)

{

int i = 0;



RW1820_DQ_OUT;                   //置为输出口

        delay_us(10);

for (i = 0; i < 8; i++)

{

RW1820_DQ_LOW;          //总线拉低,启动“写时间片”

北京赛车pk10开奖_delay_us(2);           //大于1微妙

if (_data & 0x01)

{

                    RW1820_DQ_HIGH;     //总线拉高

}

                else RW1820_DQ_LOW;    //总线拉低

                _delay_us(60);          //60

                RW1820_DQ_HIGH;         //总线拉高,释放总线,准备启动下一个“写时间片”

_data = _data >> 1;

}

}

//-------------从DS18B20读1个字节函数

unsigned char RW1820_ReadByte(void)

{

int i = 0, _data = 0;

        delay_us(10);

for (i = 0; i < 8; i++)

{

                RW1820_DQ_OUT;  //置为输出口

                RW1820_DQ_LOW;  //总线拉低,启动读“时间片”

                _data >>= 1;

_delay_us(2);   //大于1微妙

                RW1820_DQ_HIGH; //主机释放总线,接下来(2~15)us内读有效 

RW1820_DQ_IN;   //引脚设定为输入口,准备读取

if(RW1820_DQ_VALUE)

{

                    _data |= 0x80;

}

                _delay_us(60);  //60us后读完成

}

return _data;

}



int RW1820_ReadTemperature(void)//读取并计算要输出的温度

{

unsigned char temp;

unsigned int t;


RW1820_Init();          //复位

RW1820_WriteByte(0xcc);//发跳过序列号检测命令

RW1820_WriteByte(0x44);//命令Ds18b20开始转换温度

         _delay_us(10);

RW1820_Init();

RW1820_WriteByte(0xcc);//发跳过序列号检测命令

RW1820_WriteByte(0xbe);//读暂存器



temp = RW1820_ReadByte();

t = (int)(((temp & 0xf0) >> 4) + (temp & 0x07) * 0.125); 

temp = RW1820_ReadByte();

t += ((temp & 0x0f) << 4);


return t;

}


关键字:STM8L  151G6U6  驱动RW1820  温度传感器 编辑:什么鱼 引用地址:http://news.2689mr.com/mcu/ic479850.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:PCF8563 时钟芯片驱动程序 (STM8S/STM8L)
下一篇:STM8L EXITB一个端口两个中断的实现

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM8l 进入低功耗之前配置
在做stm8L的小一个项目,由电池供电,当按键长按关机,系统进入停机模式,虽然系统运行的时候有十几毫安的电流消耗(还没使用RTC定时唤醒),但是在停机模式下电流消耗竟然还有1.33ma的电流,花了半天的时间找资料,看文档,在网上看到不少大牛能做到0.4ua,自己无论如何设置IO,外设都无补于事,停机模式下电流最低还有1ma。 最后只能将开机初始化的外设函数一个一个注释掉,包括ADC,DMA,beep,以及TIM4,最后发现只注释掉ADC的初始化函数,再进入停机模式,果然电流接近0,5ua,也就是说可能ADC模块在进入停机模式前的关闭设置不正确,之前的是这样的:void PerCLK_OFF(){  
发表于 2019-11-16
STM8L051低功耗实现
最近项目中需要用到门磁,用的STM8L051芯片。使用纽扣电池自然少不了要求低功耗节能省电。首先看下这款芯片的低功耗能力:halt模式下可以达到350nA,可以说是非常省电了。从Halt模式唤醒的时间也非常快,只需要5us。门磁的功能介绍:就是利用磁铁吸合干簧管之后,给单片机一个脉冲,分开后再产生一个脉冲。然后通过无线发射模块将状态发送出去。非常简单。实现思路:上电后进入Halt模式-->有按键或吸合IO变化,唤醒MCU-->发射状态-->完成后进入Halt模式,如此循环。补充,在进入Halt模式之前,要先做好一些前期设置,否则测量出来的电流会与理想值有偏差。主要是IO口的设置。1.空的引脚全部推挽输出高或低
发表于 2019-11-15
STM8L051低功耗实现
关于串口唤醒STM8L151低功耗HALT模式的方法——外部中断法
以前看到一款xx公司的低功耗产品,用的是STM8L151的MCU,无线模组是LORA或者NB模组,因为我选择用的另一款M0+核的芯片,所有也一直没有太多时间去研究那个产品究竟是怎么用串口唤醒M0核的MCU STM8L151的。M0+核的在低功耗处理上方便太多,串口可直接唤醒。想不明白在HALT模式下功耗为什么如此之低,因为在HALT模式下MCU是不支持串口唤醒的。后来通过试验,发现了其中奥秘:实现这个功能需要绕个弯弯。首先M0定义MCU HLAT时候只能通过外部中断或者RTC自动唤醒,所以一定是串口先设置成为了外部中断唤醒。核心思路是舍弃串口信息的前一段信息。串口唤醒HALT模式下的STM8L步骤如下:在进入HLAT之前,设置串口
发表于 2019-11-15
STM8L051xx Active-Halt mode(活跃停机模式)学习
其实我们说的低功耗,P=I*U,当U即电压一定的时候,当电流很低的时候就是指的功耗很低。在STM8系列的芯片中,STM8L主打低功耗。一、 首先要了解一下,MCU在运行模式耗电的基本情况。  图1 STM8L051xx MCU运行模式下总电流的消耗  图2 STM8L 片上外设电流消耗由上两图可以发现: 1.1 代码执行置为影响运行功耗,代码从RAM中执行时的电源电流在其他条件参数一致的情况下比代码从Flash中执行师的电源电流要小,说明RAM存取速度快,执行效率高。 1.2 时钟源及频率影响运行功耗。在相同频率振荡信号情况下,HSE石英晶体振荡器方式比HSE外部信号输入
发表于 2019-11-15
STM8L051xx Active-Halt mode(活跃停机模式)学习
STM8L调低功耗方法
做低功耗产品主要把握一下几点:1、功能芯片能关电源的,关闭电源。2、能配置低功耗模式的芯片配置成低功耗模式。3、对于外部有上拉下拉电阻的引脚分别推挽输出高电平和低电平,一般电路中上拉电阻比较多(比如IIC的总线外部都有上拉的,按键上拉),没有上拉的引脚都推挽输出低电平。4、最后是关闭CPU指令。
发表于 2019-11-15
STM8L Active-halt模式下的低功耗调试
此模式下的低功耗与halt模式下的低功耗差不多,但Active-halt模式下多了个唤醒,而halt模式下是深睡,主频外设什么的全部都关掉了;Active-halt模式下,一样的首先要将没用到的GPIO全部输出低,其它用到的按要求配置即可,这个低功耗主要的就是GPIO的配置状态,及外设的功耗,其实也很容易就完成。还有最重要的一点,PWR_UltraLowPowerCmd(ENABLE);//超低功耗这句必须得有,不然不会到超低功耗。void RTC_Config(void){    //CLK_LSEConfig(CLK_LSE_ON);    CLK_LSICmd(ENABLE);//使能L
发表于 2019-11-15
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 2689mr.com, Inc. All rights reserved
北京赛车pk10计划 北京赛车 北京赛车pk10计划 北京赛车pk10开奖 微彩彩票投注计划官网 时时彩机器人 天音彩票开奖 我赢彩票注册开户投注 北京赛车 北京赛车pk10开奖