历史上的今天
返回首页

历史上的今天

今天是:2025年01月31日(星期五)

2019年01月31日 | PIC16F877A DS18B20数字温度计实验

2019-01-31 来源:eefocus

main.c


#include

#include

#include "def.h"

#include "ds18b20.h"

 

__CONFIG(0xFF32);

 

void Delay_ms(u16 xms)

{

  int i,j;

  for(i=0;i

  { for(j=0;j<71;j++) ; }

}

 

void uart_init(void)

{

    TXSTA=0x24; //开启发射使能位、高波特率,TRMT初始值可0可1

    RCSTA=0x80;

    SPBRG=0x19; //4M晶振,波特率9600,则SPBRG初值为25

}

 

//printf函数重定向

void putch(u8 c)

{

    TXREG = c;

    while(TRMT==0);

}

 

short temperature;

 

void main()

{

uart_init();

Delay_ms(5);

printf("ds18b20 demo\n");

while(1)

{

if(Init_18B20()==0)

{

printf("init ok1!\n");

Skip();

Convert();

Delay_ms(750);

if(Init_18B20()==0)

{

printf("init ok2!\n");

Skip();

Read_SP();

RomCode[0]=Read_18B20();

RomCode[1]=Read_18B20(); 

temperature=ReadTemp(RomCode);

temperature=CalcTemp(temperature);

printf("code=%02x%02x\t->\t%d.%d℃\n",RomCode[0],RomCode[1],temperature/10,temperature%10);

}

}

Delay_ms(3000);

}

}

ds18b20.h


#include

#include "def.h"

 

#ifndef __ds1820_h

#define __ds1820_h

 

extern u8 RomCode[2];

 

#define DQ1     RC1=1

#define DQ0     RC1=0

#define DQ_in   TRISC1=1

#define DQ_out  TRISC1=0

#define DQ_val  RC1

 

#define _DINT() di()

#define _EINT() ei()

#define _NOP() asm("nop")

 

 

u8 Init_18B20(void);

short CalcTemp(short a);

void Skip(void);

void Convert(void);

void Read_SP(void);

u8 Read_18B20(void);

short ReadTemp(u8 *r);

 

#endif

ds18b20.c


/*********************************

PIC16F877A@4MHz

*********************************/

#include "ds18b20.h"

#include "def.h"

 

u8 RomCode[2];

 

#define DelayNus _delay

 

u8 Init_18B20(void)

{

  u8 Error;

  

  DQ_out;

  _DINT();

  DQ0;

  DelayNus(500); //延迟至少480us

  DQ1;

  DelayNus(55);  //释放DQ后延时120us(60~240)后再读数

  DQ_in;

  _NOP();

  if(DQ_val)      

    Error = 1;   //初始化失败

  else

    Error = 0;   //初始化成功

  DQ_out;

  DQ1;

  _EINT();

  

  DelayNus(400);

  

  return Error;

}

 

void Write_18B20(u8 wdata)

{

  u8 i;

  

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

  {

    _DINT();

    DQ0;

    //DelayNus(6);     //延时2us

    _NOP();

    _NOP();

    _NOP();

    _NOP();

    _NOP();

    _NOP();

    _NOP();

    _NOP();

    if(wdata & 0X01)    

    DQ1;

    else                

    DQ0;

    wdata >>= 1;

    

    DelayNus(70);     //延时91us 

    DQ1;

    _EINT();

    _NOP();

  } 

}

 

 

u8 Read_18B20(void)

{

  u8 i;

  u8 temp = 0;   

  

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

  {

    temp >>= 1;

    _DINT();   

    DQ0;

    _NOP();

    _NOP();

    _NOP();

    _NOP();

 

    DQ1;

    //DelayNus(8);            //延时9us

    DQ_in;

    //DelayNus(25);           //延时45us

    if(DQ_val)   

      temp |= 0x80;    

    DQ_out;

    DQ1;

    DelayNus(70);           //延时10us

    _EINT();

    _NOP();

  }      

  return  temp;

}

 

void Skip(void)

{

    Write_18B20(0xcc);

}

 

void Convert(void)

{

    Write_18B20(0x44);

}

 

void Read_SP(void)

{

    Write_18B20(0xbe);

}

 

short ReadTemp(u8 *r)

{

    u8 temp_low;

    short temp;

    

    temp_low = r[0];      //读低位

    temp = r[1];          //读高位

    temp = (temp<<8) | temp_low;

    return  temp;

}

 

const u8 dottab[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};

//优化读数算法

short CalcTemp(short a)

{

  u8 b;

  

  if(a<0)

  {

    a=~a;

    a++; 

    b=a;

    a>>=4;

    a*=-10;

    a-=dottab[b&0x0f];    

  }

  else

  {

    b=a;

    a>>=4;

    a*=10;

    a+=dottab[b&0x0f];       

  }

 

  return a;

}

 

 

def.h


#ifndef __DEF__H_

#define __DEF__H_

 

#define u8 unsigned char

#define u16 unsigned int

 

#endif

 

推荐阅读

史海拾趣

FERYSTER公司的发展小趣事

在全球环保意识日益增强的背景下,FERYSTER公司积极响应环保号召,推动企业的绿色转型。公司采用环保材料替代传统材料,优化生产工艺减少能源消耗和废弃物排放。此外,公司还积极推广绿色电子产品,引导消费者关注环保问题。这些努力不仅提升了公司的社会形象,也为公司带来了更多的商业机会。

Hei Inc Optoelectronic Division公司的发展小趣事
通过电子元件实现精确控制,可以更加灵活地调整加热时间、温度等参数,以适应不同材料和工艺的需求。
FUJI公司的发展小趣事
无触点操作减少了机械动作产生的噪音,并降低了电磁干扰,对工作环境和周边设备更为友好。
GHz Technology ( Microsemi )公司的发展小趣事
无触点控制电路减少了机械触点的使用,避免了因触点磨损、氧化或接触不良导致的故障,从而提高了设备的整体可靠性和稳定性。
Cermetek Microelectronics公司的发展小趣事

在追求经济效益的同时,Cermetek Microelectronics公司也积极履行社会责任。公司注重环保和可持续发展,采用环保材料和生产工艺,减少对环境的影响。此外,公司还积极参与社会公益事业,为社会做出贡献。这种负责任的态度不仅赢得了社会各界的认可,也为公司的长远发展注入了正能量。

这五个故事展示了Cermetek Microelectronics公司在电子行业中的发展历程和取得的成就。通过技术积累、品质管理、持续创新、国际化战略和社会责任等方面的努力,公司逐渐在微电子领域树立起了自己的品牌形象和市场地位。

友盟(AP)公司的发展小趣事

在追求商业成功的同时,友盟(AP)公司也积极履行社会责任,致力于可持续发展。公司关注环境保护、公益事业等方面的问题,积极参与相关活动和项目。同时,友盟还通过技术创新和产品优化,推动电子行业的绿色发展和数字化转型。这些努力不仅提升了公司的社会形象,也为其未来的发展注入了新的动力。

以上是关于电子行业里友盟(AP)公司发展起来的5个相关故事。这些故事从不同角度展现了友盟在技术创新、合作伙伴关系、市场拓展、人才团队建设以及社会责任等方面的努力和成就。当然,每个公司的发展都是一个复杂而多元的过程,这些故事只是其中的一部分。

问答坊 | AI 解惑

机器人触须传感器的设计

提出了一种利用触须来识别物体表面轮廓的新方法.传感器采用了二维PSD作为敏感元件,实时地测量由于与物体接触在触须根部所产生的微小位移量.介绍了机器人触须传感器具体的结构及工作原理.由实验数据可知,触须根部位移量的大小与接触的距离成反比,且 ...…

查看全部问答>

PID参数调整问题

PID参数调整疑问????? 最近学习PID,和同学一起准备做一个简单的PID水温控制小系统。我们在网上也下了不少的资料看了看。于是开始了简单的实验,实验条件限制。我们就用了一个18b20温度传感器将它包好放在水里,然后用一个热得快 ...…

查看全部问答>

单片机键盘

我用单片机做的一个键盘,在工控机启动的时候,按DEL进不了BIOS,启动之后键盘正常,能检测到DEL键,我这里有三款工控机,有一款会出现上面的情况,各位大侠有没见过这种情况?我的程序里是只有发送没有接收的…

查看全部问答>

软件开发,上海

著名通信企业招聘嵌入式软件开发(高级)工程师 有意者请将简历发送至:chengqi2010@163.com 岗位描述: 一.岗位名称:软件设计高级工程师 工作地:上海 主要职责: 1.负责终端产品软件架构设计、总体方案设计 2.指导产品的软件设计开发过程 ...…

查看全部问答>

SES5VD923-2B资料 TVS管的选择

SES5VD923-2B资料 TVS管的选择 替换型号;PVS05A-0402 SES5VD923-2B WE05D9-B  Feature 100 Watts peak pulse power (tp = 8/20μs) Transient protection for data lines to IEC 61000-4-2 (ESD) ±25kV (air), ...…

查看全部问答>

求助:关于93C46的问题

下面是我编写关于93C46的读写代码,P0引脚连接的是8个LED,目的是通过读写93C46实现LED闪烁的效果。 现在程序运行时,DO引脚始终是高电平,LED常亮,检查好几遍时序设置,也没有发现问题,请各位高手帮我分析一下到底问题出现在哪了,谢谢! #inc ...…

查看全部问答>

提取微弱小信号的锁相放大器试制

为实现低成本小体积的模拟式锁相放大器,来采集TDS中的差分探头产生的THz信号。通过核心器件AD630(平衡调制解调器)做锁相放大,以提取被噪声淹没的微弱THz信号,要求其动态范围宽,达到100db以上,能检测300pA以上的信号。最终采集的信噪比需满足 ...…

查看全部问答>

请问32KB+256B Flash Memory,这个256B干嘛用的?

MSP430 Datasheet中一般出现这句话:32KB + 256B Flash Memory 512B RAM 问1,这个256B是什么意思? 问2,假如我的程序大小为12KB,那么剩下的20KB Flash Memory是否可以当做EEPROM来使用?…

查看全部问答>

51单片机实现红外编码检测

51单片机实现红外编码检测 通过51 单片机及外围电路实现对接受信号的处理(通过外部中断和计数器)获得信号的01编码,设备显示。 有关红外传感的一些资料 红外传感基础知识:v 红外发光管:红外发光二极管通常使用砷化镓(GaAs)、砷铝化镓(GaAlA ...…

查看全部问答>

关于beaglebone 的LCD扩展!

给beaglebone扩展的群创LCD,是AT070TN92,电路设计是这样的: 但是会出现比较严重的色差现象: 上图的颜色过渡明显有问题,换成整图的话,这种问题会更明显!! 我尝试去掉此电平转换芯片,显示效果倒是正常了: 但是又有了新的 ...…

查看全部问答>