打印
[应用方案]

温度传感器的读写代码

[复制链接]
1061|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kkzz|  楼主 | 2024-2-17 23:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*单总线初始化时序*/
bit ds_init()
{
        bit i;
        DS = 1;
        _nop_();
        DS = 0;
        Delay_us(75); //拉低总线499.45us 挂接在总线上的18B20将会全部被复位
        DS = 1; //释放总线
        Delay_us(4); //延时37.95us 等待18B20发回存在信号
        i = DS;
        Delay_us(20); //141.95us
        DS = 1;
        _nop_();
        return (i);
}
/*写一个字节*/
void write_byte(uchar dat)
{
        uchar i;
        for(i=0;i<8;i++)
        {
                DS = 0;
                _nop_();//产生些时序
                DS = dat & 0x01;
                Delay_us(10);//76.95us
                DS = 1; //释放总线准备下一次数据写入
                _nop_();
                dat >>= 1;
        }
}

uchar read_byte()
{
        uchar i, j, dat;
        for(i=0;i<8;i++)
        {
                DS = 0;
                _nop_();//产生读时序
                DS = 1;
                _nop_();//释放总线
                j = DS;
                Delay_us(10);//76.95us
                DS = 1;
                _nop_();
                dat = (j<<7)|(dat>>1);       
        }
        return (dat);
}
void main()
{
        uint i;
        uchar L, M;
/*        ds_init();//初始化DS18B20
        write_byte(0xcc);//发送跳跃ROM指令
        write_byte(0x4e);//写暂存器指令
        write_byte(0x7f);
        write_byte(0xf7);
        write_byte(0x1f);//配置工作在9位模式下
        ds_init();//初始化DS18B20
        write_byte(0xcc);//发送跳跃ROM指令
        write_byte(0x48);*/
        while(1)
        {
                ds_init();//初始化DS18B20
                write_byte(0xcc);//发送跳跃ROM指令
                write_byte(0x44);//发送温度转换指令
                ds_init();//初始化DS18B20
                write_byte(0xcc);//发送跳跃ROM指令
                write_byte(0xbe);//读取DS18B20暂存器值
                L = read_byte();
                M = read_byte();
                i = M;
                i <<= 8;
                i |= L;                                               
                i = i * 0.0625 * 10 + 0.5;
                Display(i);
        }
}


使用特权

评论回复
沙发
Minggod| | 2024-3-14 19:46 | 只看该作者
请问作者,为什么我的时序不行。#include <STC15F2K60S2.H>
#include <Delay.H>


sbit onewire_DQ = P3^7;



bit onewire_Init()
{
        bit AckBit = 1;
       
        onewire_DQ = 1;                                        //reset
        //work
        onewire_DQ = 0;                                        //master low
        Delay500us();                                                //master Delay
        onewire_DQ = 1;
        Delay100us();                                          // master high
        AckBit = onewire_DQ;
        Delay500us();                                                //master Delay
        return AckBit;
}




/*
void OneWire_SendBit(unsigned char dat)
{
       
}
*/

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

317

主题

10898

帖子

13

粉丝