修改.c

来自「利用单片机与18B20温度测试芯片」· C语言 代码 · 共 110 行

C
110
字号
#include    "reg51.h"
#include    "intrins.h"
#include    "static.c"
#include    "del_us.c"
#define     uint    unsigned int
#define     uchar   unsigned char
sbit    DQ = P3^4;
bit     FLAG; 
void    Rest_1820(void)
{
    uchar i;
    FLAG = 0;
    DQ = 1;
    _nop_();
    DQ = 0;
    Delay_300us();       //建立的时间在480-960us
    Delay_300us();
    DQ = 1;
    for(i=4;i>0;i--)
    {
        Delay_15us();    //等待的时间在15-60us
        if(DQ==0)   
        {
            FLAG = 1;    //表示DS1820存在
            break;
        }
        else
        {
            FLAG = 0;
        }           
    }
    if(FLAG==1)
    {
        Delay_60us();   //延时240us 
        Delay_60us();
        Delay_60us();
        Delay_60us();       
    }
    Delay_300us();        //延时300us准备主机接收存在信号
}

void    Write_1820(uchar    value)
{
    uchar   i;
    for(i=8;i>0;i--)
    {
        DQ = 1;
        _nop_();
        DQ = 0;
        Delay_15us();    //延时15us
        DQ = value&0x01;
        Delay_60us();     //延时60us
        DQ = 1;
        value>>=1;
    }
}

uint   Read_1820(void)
{
    uchar   i;
    uint   value = 0;
    for(i=16;i>0;i--)
    {
        value>>=1;
        DQ = 1;
        _nop_();
        DQ = 0;
        _nop_();
        DQ = 1;
        Delay_15us();
        if(DQ) value |= 0x8000;
        else   value &= 0x7fff;       
        Delay_60us();    //采样后需要延时60us
    }
    DQ = 1;
    return(value);
}

void    main(void) 
{
    uchar   i;
    uint    temp;
    float   t;
    while(1)
    {
        Rest_1820();        //初始化
        if(FLAG==1)
        {
            Write_1820(0xcc);   //写入跳过序列号命令字 Skip Rom
            Write_1820(0x44);   //写入温度转换命令字 Convert T
            for(i=20;i>0;i--)
            {
                Delay_300us();
                Delay_300us();
                Delay_300us();
            }
            Rest_1820();        //初始化
            if(FLAG==1)
            {
                Write_1820(0xcc);   //写入跳过序列号命令字 Skip Rom
                Write_1820(0xbe);   //写入读取数据命令字 Read Scratchpad
                temp = Read_1820();  //读出温度
                t = temp*0.0625;
                temp = t*100;
                Static_Disp(temp);
                //while(1);
            }
        }
    }   
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?