STM8S - DS18B20

发布者:雅意盎然最新更新时间:2016-10-14 来源: eefocus关键字:STM8S  DS18B20 手机看文章 扫描二维码
随时随地手机看文章
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->/******** STM8S-Discovery DS18B20 Test ********
* 版本.........: 1.0
* 目标.........: STM8S105C6T6
* 文件名.......: main.c
* 开发环境.....: IAR for STM8 V1.1
***********************************************/
 
#include
#include
 
#define BAUD_RATE     9600         //波特率
#define F_MASTER      16000000     //主频率
 
#define DS18B20_DQ_OUT          PG_DDR_DDR0 = 1   //输出
#define DS18B20_DQ_IN           PG_DDR_DDR0 = 0   //输入
#define DS18B20_DQ_HIGH         PG_ODR_ODR0 = 1   //拉高
#define DS18B20_DQ_LOW          PG_ODR_ODR0 = 0   //拉低
#define DS18B20_DQ_PULL_UP      PG_CR1_C10  = 1   //上拉
#define DS18B20_DQ_FLOATING     PG_CR1_C10  = 0   //浮空
#define DS18B20_DQ_PUSH_PULL    PG_CR1_C10  = 1   //推挽
#define DS18B20_DQ_OPEN_DRAIN   PG_CR1_C10  = 0   //开漏
#define DS18B20_DQ_VALUE        PG_IDR_IDR0       //DQ值
 
//串口配置
//数据位:8
//停止位:1
//校验位:None
void UART_Init(void)
{
    UART2_CR2_TEN = 1;
    UART2_CR2_REN = 1;
    UART2_CR2_RIEN = 1;
    UART2_BRR2 = ((unsigned char)((F_MASTER / BAUD_RATE) & 0x0f)) + (((unsigned char)((F_MASTER / BAUD_RATE) >> 8)) & 0xf0);
    UART2_BRR1 = ((unsigned char)((F_MASTER / BAUD_RATE) >> 4));
}
 
void UART_TxByte(unsigned char _data)
{
    while (UART2_SR_TXE == 0);
    UART2_DR = _data;
}
 
int putchar(int c)
{
    UART_TxByte(c);
    return c;
}
 
void _delay_us(unsigned int i)
{
    i *= 3; 
    while(--i);
}
 
void _delay_ms(unsigned int i)
{
    while(i--)
    {
        _delay_us(1000);
    }
}
 
void DS18B20_Init(void)
{
    DS18B20_DQ_OUT;   
    DS18B20_DQ_PUSH_PULL;    
    DS18B20_DQ_HIGH;   
    _delay_us(10);
    DS18B20_DQ_LOW;   
    _delay_us(600);     //复位脉冲
    
    DS18B20_DQ_IN;   
    DS18B20_DQ_PULL_UP;    
    _delay_us(100);     
    while(DS18B20_DQ_VALUE == 1);
    _delay_us(400);
}
 
void DS18B20_WriteByte(unsigned char _data)
{
    unsigned char i = 0;
 
    DS18B20_DQ_OUT;
    for (i = 0; i < 8; i++)
    {
        DS18B20_DQ_LOW;
        _delay_us(2);
        if (_data & 0x01)
        {
            DS18B20_DQ_HIGH;
        }
        _data >>= 1;
        _delay_us(60);
        DS18B20_DQ_HIGH;
    }
}
 
unsigned char DS18B20_ReadByte(void)
{
    unsigned char i = 0, _data = 0;
 
    for (i = 0; i < 8; i++)
    {
        DS18B20_DQ_OUT;
        DS18B20_DQ_LOW;
        _delay_us(5);
        _data >>= 1;
        DS18B20_DQ_HIGH;
        DS18B20_DQ_IN;
        if (DS18B20_DQ_VALUE)
        {
            _data |= 0x80;
        }
        DS18B20_DQ_OUT; 
        DS18B20_DQ_HIGH;
        _delay_us(60);
    }
 
    return _data;
}
 
float DS18B20_ReadTemperature(void)
{
    unsigned char temp = 0;
    float t = 0;
    
    DS18B20_Init();
    DS18B20_WriteByte(0xcc);
    DS18B20_WriteByte(0x44);
 
    DS18B20_Init();
    DS18B20_WriteByte(0xcc);
    DS18B20_WriteByte(0xbe);
 
    temp = DS18B20_ReadByte();
    t = (((temp & 0xf0) >> 4) + (temp & 0x07) * 0.125); 
    temp = DS18B20_ReadByte();
    t += ((temp & 0x0f) << 4);
    
    return t;
}
 
int main(void)
{  
    CLK_SWCR_SWEN = 1;
    CLK_SWR = 0xB4;    //HSE selected as master clock source
    
    UART_Init();
    printf("********* STM8S-Discovery DS18B20 Test *********\r\n");
    printf("Build: %s  %s\r\n", __DATE__, __TIME__);
    
    asm("rim");
    
    while(1)
    {
        _delay_ms(1000);
        printf("%.3f ", DS18B20_ReadTemperature());
    }
}
 
#pragma vector = UART2_R_RXNE_vector
__interrupt void UART2_IRQHandler(void)
{
    if (UART2_SR_RXNE == 1)
    {
        UART_TxByte(UART2_DR);
    }
}
关键字:STM8S  DS18B20 引用地址:STM8S - DS18B20

上一篇:单片机中的结构体运用
下一篇:IAR FOR STM8精确延时函数

推荐阅读最新更新时间:2024-03-16 15:15

STM8S专题之ADC数据转换
简介 数字信号是一种离散的信号,模拟信号是一种连续的信号,如果数字电路需要处理模拟信号,则需要一种信号转换系统,相反,模拟电路要处理数字信号也需要进行信号转换。 A/D与D/A 转换器就是两种信号进行处理的桥梁。 常见的A/D转换器有并联比较型、逐次逼近型、V-F型、双积分型等。 常见的D/A转换器有权电阻网络型、倒T型电阻网络型、权电容网络型、权电流型、开关树结构型等。 原理 系统框架 STM8S单片机型号不同,ADC的资源也不同。以ADC2为例,ADC2为10位逐次逼近型A/D转换器,可以提供16个输入通道。 上图是A/D转换的结构图,左边是信号输入,中间是信号转换,右边是信号输出。核心部分是中间信号转换,
[单片机]
<font color='red'>STM8S</font>专题之ADC数据转换
51单片机做的智能时钟具有闹钟功能(DS1302+DS18B20+LCD1602)
本贴针对学完单片机并且有读懂代码的非新手同学。本人目前放寒假,这个是本人在上个学期的单片机课上要求做的综合实验,现在重新修改了下增加了菜单目前测试毫无问题可以完美使用。有志向做闹钟的同学可以参考一下,原码上由本人写的大量注释可以方便看懂。 使用了LCD1602、DS1302、DS18B20用来测试温度、内部含闹钟系统但本人没有做EEPROM有需要的同学可以自行添加。 单片机源程序如下: #include reg52.h #include key.h #include LCD1602.h #include DS1302.h #include music.h #include DS18B20.H #define no
[单片机]
基于DS18B20与TMS320LF2407A的温度测量系统
  前 言   DS18B2普遍都是和单片机配合使用,很少有关于 DSP 与DS18B20的连接的接口报道,所以此文详细介绍了TMS320LF2407与 DS18B20的连接方法,并且很详细的介绍了如何用C语言完成精确的软件延时,从而完成DS18B20与TMS320LF2407之间的基于单线总线协议的数据通讯。   1 DS18B20的时序   1. 1 复位时序   复位使用DS18B20时,首先需将其复位,然后才能执行其它命令。复位时,主机将数据线拉为低电平并保持480us~960us,然后释放数据线,再由上拉电阻将数据线拉高15~60us,等待DS18B20发出存在脉冲,存在脉冲有效时间为60~240us,这
[单片机]
基于<font color='red'>DS18B20</font>与TMS320LF2407A的温度测量系统
DS18B20的使用程序PIC单片机
#include pic.h __CONFIG(0x1832); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 #define uch unsigned char //给unsigned char起别名 uch # define DQ RA2 //定义18B20数据端口 # define DQ_DIR TRISA2 //定义18B20D口方向寄存器 # define DQ_HIGH() DQ_DIR =1 //设置数据口为输入 # define DQ_LOW() DQ = 0; D
[单片机]
STM8S之STVD问题解决47 can't openfile crtsi0.sm8
用STVD+COSMIC编译工程时出现以下错误(加载的别人的工程): #error clnk Debugdemo.lkf:47 can’t openfile crtsi0.sm8 #error clnk Debugdemo.lkf:60 can’t openfile libis0.sm8 #error clnk Debugdemo.lkf:61 can’t openfile libm0.sm8 解决方法: 打开STVD软件,选择Tools- Options - Directories - Show Directories for选择:Libraryfiles 将C:program files(x86)COSMICCXSTM8_
[单片机]
STM8S触摸按键固件库详解
由于刚好有小项目需要用到触摸按键,stm8s可以节约一块触摸按键的片子,并且成本比较低。在某些对成本比较敏感的应用还是有价值的。现将自己网上找到的资料与自己学习的心得记下与大家分析。ST的底层库对滚动条也支持,效果还是不错的 一、原理分析 ST的电容式触摸按键方案通过一个电阻和感应电极的电容CX构成的阻容(RC)网络的充电/放电时间来检测人体触摸所带来的电容变化。 如上图所示,当人手按下时相当于感应电极上并联了一个电容Cx,增加了感应电极上的电容,感应电极进行充放电的时间会增加,从而检测到按键的状态。 先用开关将 Cs(或 Cs+Cx)上的电放尽,然后断开开关,让 R 给 Cs(或 Cs+Cx)充电,当没有手指触摸的时
[单片机]
<font color='red'>STM8S</font>触摸按键固件库详解
STM8S(207)BootLoader制作(在BootLoader和App中都可以使用中断)
最近这段时间使用stm8,要在项目中用到IAP升级,同时还要在BootLoader和App中同时使用中断,花了一些时间查找了很多博客,集合大家的知识,写了一篇文章来总结一下自己的成果。这是我第一次写文章,有错误的地方欢迎大家指出 BootLoader制作分析 1、单片机需要有一个对外的通信接口,一般使用的是单片机自带的串口 2、网上寻找一个稳定的通信协议,保证你的单片机在IAP升级的时,能正确稳定的传输数据。我使用的是 Ymodem协议(如果不知道的可以度娘去了解一下),因为网上有编写好的上位机,比较方便 3、了解stm8的内存分布情况,使用flash读写函数把升级的数据写入单片机的ROM里面 4、重定向中断向量表
[单片机]
<font color='red'>STM8S</font>(207)BootLoader制作(在BootLoader和App中都可以使用中断)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved