标题: 单片机高效率代码读取18B20 显示在LCD1602上 [打印本页]

作者: GL510171877    时间: 2020-8-5 21:02
标题: 单片机高效率代码读取18B20 显示在LCD1602上
#include <STC89C5xRC.H>
#include <intrins.h>

sbit DATA_IO = P3^2;


/* 软件延时函数,延时时间(t*10)us */
void DelayX10us(unsigned char t)
{
    do {
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
    } while (--t);
}

bit GetACK()
{
        bit ack;
        EA = 0;
        DATA_IO = 0;
        DelayX10us(60);
        DATA_IO = 1;
        DelayX10us(6);
        ack = DATA_IO;
        while(!DATA_IO);
        EA = 1;
        return ack;
}

void DS18B20_Write(unsigned char dat)
{
        unsigned char mask;
        EA = 0;
        for(mask=0x01;mask!=0;mask<<=1)
        {
                DATA_IO = 0;
                _nop_();
                _nop_();
                if((dat&mask)!= 0)
                        DATA_IO = 1;
                else
                        DATA_IO = 0;
                DelayX10us(6);
                DATA_IO = 1;
        }
        EA = 1;
}
unsigned char DS18B20_Read()
{
        unsigned char dat;
        unsigned char mask;
        EA = 0;
        for(mask=0x01;mask!=0;mask<<=1)
        {
                DATA_IO = 0;
                _nop_();
                _nop_();
                DATA_IO = 1;
                _nop_();
                _nop_();
                if(!DATA_IO)
                        dat &= ~(mask);
                else
                        dat |= mask;
                DelayX10us(6);
        }
        EA = 1;
        return dat;
}

bit DS18B20_Start()
{
        bit ack;
        ack = GetACK();
        if(ack == 0)
        {
                DS18B20_Write(0xCC);
                DS18B20_Write(0x44);
        }
        return ~ack;
}

bit GetTemp(int *temp)
{
        bit ack;
        unsigned char LSB,MSB;
        ack = GetACK();
        if(ack==0)
        {
                DS18B20_Write(0xCC);
                DS18B20_Write(0xBE);
                LSB = DS18B20_Read();
                MSB = DS18B20_Read();
        }
        *temp = ((int)MSB<<8) + LSB;
        return ~ack;
}

IMG_3558.JPG (2.46 MB, 下载次数: 44)

IMG_3558.JPG

18B20.zip

60.46 KB, 下载次数: 21, 下载积分: 黑币 -5


作者: 19011250    时间: 2020-8-11 23:02
没有注释的程序,无论程序写得怎么样,都不能称为合格的程序
作者: rsx9583    时间: 2020-8-13 14:53
19011250 发表于 2020-8-11 23:02
没有注释的程序,无论程序写得怎么样,都不能称为合格的程序

哈哈,我刚还看了好一会,你这么一说,我才发现这个问题。算了,不看了。
作者: HAPPY3    时间: 2021-11-17 15:21
是,有些不明白
作者: 小刘要加油    时间: 2021-11-19 15:19
19011250 发表于 2020-8-11 23:02
没有注释的程序,无论程序写得怎么样,都不能称为合格的程序

哈哈有道理





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1