欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2260|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

求大佬看看我的51單片機(jī)獲取DS18B02溫度傳感器代碼哪里出錯了

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:915152 發(fā)表于 2021-5-3 04:23 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
看了文檔和官方教程視頻后自己寫了一個,但是一直出錯,代碼和官方的逐行分析了沒發(fā)現(xiàn)錯誤的地方, 獲取的數(shù)據(jù)tmp一直為1593不變。想了一天楞是沒有想出來,欲哭無淚,,,求大神指點(diǎn)一下小小白,不勝感激!

main.zip

1.05 KB, 下載次數(shù): 4

我的程序

普中51單片機(jī)開發(fā)攻略--A2-splitted.pdf

812.59 KB, 下載次數(shù): 5

硬件資料

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:96682 發(fā)表于 2021-5-3 09:06 來自觸屏版 | 只看該作者
把代碼帖出來不是更好么,這樣無需解壓臺式機(jī) 手機(jī)版都能看到
回復(fù)

使用道具 舉報(bào)

板凳
ID:390416 發(fā)表于 2021-5-3 12:23 | 只看該作者
看我的貼子 參考
回復(fù)

使用道具 舉報(bào)

地板
ID:77840 發(fā)表于 2021-5-3 14:25 | 只看該作者
幫樓主貼出來代碼如下:
#include <reg52.h>
#include <intrins.h>

typedef unsigned char u8;
typedef unsigned int u16;
#define Led P0

sbit Line = P3 ^ 7;
sbit L1 = P2 ^ 2;
sbit L2 = P2 ^ 3;
sbit L3 = P2 ^ 4;
u8 zifu[16] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
               0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};

void delay(u16 i)
{
    while (i--)
        ;
}

void delay_10us()
{
    u8 a, b;
    for (a = 1; a > 0; a--)
        for (b = 1; b > 0; b--)
            ;
}

void delay_100us()
{
    u8 a, b;
    for (a = 10; a > 0; a--)
        for (b = 10; b > 0; b--)
            ;
}

u8 init() //初始化時序
{
    u8 i = 0;
    Line = 0;
    delay_100us();
    delay_100us();
    delay_100us();
    delay_100us();
    delay_100us();
    Line = 1;
    delay_10us();
    delay_10us();
    delay_10us();
    delay_10us();
    while (Line)
    {
        delay_10us();
        delay_10us();
        delay_10us();
        i++;
        if (i > 16)
            return 0;
    }
    return 1;
}

void sendbyte(u8 dat)   //寫時序
{
    u8 i;
    for (i = 0; i < 8; i++)
    {
        Line = 0;
        _nop_();
        _nop_();
        Line = dat & 0x01;
        delay_10us();
        delay_10us();
        delay_10us();
        delay_10us();
        delay_10us();
        delay_10us();
        Line = 1;
        _nop_();
        _nop_();
        dat >>= 1;
    }
}

u8 readbyte()   //讀時序
{
    u8 i = 0, dat = 0;
    for (i = 0; i < 8; i++)
    {
        Line = 0;
        _nop_();
        _nop_();
        Line = 1;
        _nop_();
        _nop_();
        delay_10us();
        dat <<= 1;
        dat |= Line;
        delay_10us();
        delay_10us();
        delay_10us();
        delay_10us();
        delay_10us();
    }
    return dat;
}

u16 gettemp()   //轉(zhuǎn)化為具體的溫度數(shù)字
{
    u16 tmp = 0;
    u16 c = 2047;

    u8 tl, th;

    init(); // 復(fù)位
    sendbyte(0xcc); //skip rom
    sendbyte(0x44); //轉(zhuǎn)換命令
    delay_10us();

    init(); //
    sendbyte(0xcc);//
    sendbyte(0xbe);//讀存儲器命令
    delay_10us();
   
    tl = readbyte();
    th = readbyte();
   
  //以下是數(shù)據(jù)處理,我用官方的程序比對過了,沒有問題,出問題的在上面與 ds18b20 通信上  
    tmp = th;
    tmp << 8;
    tmp |= tl;
    tmp &= c;
    tmp *= 6.25;
    return tmp;
}

void printled(u16 dat)
{
    u8 q = dat / 1000;
    u8 b = dat % 1000 / 100;
    u8 s = dat % 100 / 10;
    u8 g = dat % 10;
    L1 = L2 = L3 = 1;
    Led = zifu[q];
    delay(100);
    Led = 0;
    L3 = L2 = 1;
    L1 = 0;
    Led = zifu[b];
    delay(100);
    Led = 0;
    L3 = L1 = 1;
    L2 = 0;
    Led = zifu[s];
    delay(100);
    Led = 0;
    L3 = 1;
    L2 = L1 = 0;
    Led = zifu[g];
    delay(100);
    Led = 0;
}

void main()
{
    L1 = L2 = L3 = 1;
    Led = zifu[8];
    while (1)
    {
        printled(gettemp());
    }
}
回復(fù)

使用道具 舉報(bào)

5#
ID:77840 發(fā)表于 2021-5-3 14:30 | 只看該作者
對比一下文檔和樓主程序部分,我覺得是讀的時候不一樣* 函 數(shù) 名 : Ds18b20ReadByte
* 函數(shù)功能 : 讀取一個字節(jié)
* 輸 入 : 無
* 輸 出 : 無
*****************************************************************
**************/
uchar Ds18b20ReadByte()
{
uchar byte, bi;
uint i, j;
for(j=8; j>0; j--)
{
DSPORT = 0;//先將總線拉低 1us
i++;
DSPORT = 1;//然后釋放總線
i++;
i++;//延時 6us 等待數(shù)據(jù)穩(wěn)定
bi = DSPORT; //讀取數(shù)據(jù),從最低位開始讀取
/*將 byte 左移一位,然后與上右移 7 位后的 bi,注意移動之后移掉
那位補(bǔ) 0。*/
byte = (byte >> 1) | (bi << 7);
i = 4; //讀取完之后等待 48us 再接著讀取下一個數(shù)
while(i--);
}
return byte;
}
**********下面是樓主的代碼
u8 readbyte()   //讀時序
{
    u8 i = 0, dat = 0;
    for (i = 0; i < 8; i++)
    {
        Line = 0;
        _nop_();
        _nop_();
        Line = 1;
        _nop_();
        _nop_();
        delay_10us();
        dat <<= 1;
        dat |= Line;
        delay_10us();
        delay_10us();
        delay_10us();
        delay_10us();
        delay_10us();
    }
    return dat;
}
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表