利用18B20测量室内温度

实验目的

1. 利用所学知识,解决实际问题。培养发现问题解决、问题的能力。

2. 学会如何利用误差理论处理测得的数据。

                           实验器材

HC6800单片机开发仪,KENKO牌KK-82MS型科学计算器

实验原理

1.HC6800中的18B20模块以及18B20电路图

        


 

 

 

 

 

 

 

18B20驱动程序

#include<reg52.H>

#include<intrins.h>

 

sbit    D18B20=P3^7;

#define  NOP()  _nop_()   /* 定义空指令*/

#define  _Nop() _nop_()   /*定义空指令*/

 

voidTempDelay (unsigned char idata us);

voidInit18b20 (void);

voidWriteByte (unsigned char idata wr);  //单字节写入

voidread_bytes (unsigned char idata j);

unsignedchar CRC (unsigned char j);

voidGemTemp (void);

voidConfig18b20 (void);

voidReadID (void);

voidTemperatuerResult(void);

 

 

bit  flag;

unsignedint  idata Temperature;

unsignedchar idata temp_buff[9]; //存储读取的字节,read scratchpad为字节,read rom ID为字节

unsignedchar idata id_buff[8];

unsignedchar idata *p;

externunsigned int xdata TIM;

unsignedchar idata crc_data;

 

 

unsignedchar code CrcTable [256]={

0,  94, 188, 226,  97,  63, 221,  131,  194, 156,  126,  32, 163,  253,  31, 65,

157,  195, 33,  127,  252, 162,  64,  30, 95,  1,  227, 189,  62,  96, 130,  220,

35,  125, 159,  193,  66, 28,  254,  160, 225,  191,  93,  3,  128,  222,  60, 98,

190,  224, 2,  92,  223, 129,  99,  61, 124,  34,  192, 158,  29,  67, 161,  255,

70,  24, 250,  164,  39, 121,  155,  197, 132,  218,  56, 102,  229,  187, 89,  7,

219,  133, 103, 57,  186,  228, 6,  88,  25, 71,  165,  251, 120,  38,  196, 154,

101,  59, 217, 135,  4,  90, 184,  230,  167, 249,  27,  69, 198,  152,  122, 36,

248,  166, 68, 26,  153,  199, 37,  123,  58, 100,  134,  216, 91,  5,  231, 185,

140,  210, 48, 110,  237,  179, 81,  15,  78, 16,  242,  172, 47,  113,  147, 205,

17,  79, 173,  243,  112, 46,  204,  146, 211,  141,  111, 49,  178,  236, 14,  80,

175,  241, 19, 77,  206,  144, 114,  44,  109, 51,  209,  143, 12,  82,  176, 238,

50,  108, 142,  208,  83, 13,  239,  177, 240,  174,  76, 18,  145,  207, 45,  115,

202,  148, 118, 40,  171,  245, 23,  73,  8, 86,  180,  234, 105,  55,  213, 139,

87,  9, 235,  181,  54, 104,  138,  212, 149,  203,  41, 119,  244,  170, 72,  22,

233,  183, 85,  11,  136, 214,  52,  106,  43,  117, 151,  201,  74, 20,  246,  168,

116,  42, 200,  150,  21, 75,  169,  247, 182,  232,  10, 84,  215,  137, 107,  53};

//

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

*Function:延时处理

*parameter:

*Return:

*Modify:

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

voidTempDelay (unsigned char idata us)

{

    while(us--);

}

 

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

*Function:18B20初始化

*parameter:

*Return:

*Modify:

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

voidInit18b20 (void)

{

    D18B20=1;

    _nop_();

    D18B20=0;

    TempDelay(80);   //delay 530 uS//80

    _nop_();

    D18B20=1;

    TempDelay(14);   //delay 100 uS//14

    _nop_();

    _nop_();

    _nop_();

   

    if(D18B20==0)

        flag = 1;   //detect 1820 success!

    else

        flag = 0;    //detect 1820 fail!

    TempDelay(20);       //20

    _nop_();

    _nop_();

    D18B20 = 1;

}

 

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

*Function:向B20写入一个字节

*parameter:

*Return:

*Modify:

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

voidWriteByte (unsigned char idata wr)  //单字节写入

{

    unsigned char idata i;

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

    {

        D18B20 = 0;

        _nop_();

        D18B20=wr&0x01;

        TempDelay(3);   //delay 45 uS //5

        _nop_();

        _nop_();

        D18B20=1;

        wr >>= 1;

    }

}

 

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

*Function:读B

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值