久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

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

main.zip

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

我的程序

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

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

硬件資料

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

使用道具 舉報

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,注意移動之后移掉
那位補 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;
}
回復

使用道具 舉報

地板
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(); // 復位
    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());
    }
}
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区三区免费观看 | 欧美成人aaa级毛片在线视频 | 欧美一级片在线 | 日韩国产黄色片 | 成人精品一区二区户外勾搭野战 | 视频一区中文字幕 | 国产欧美精品区一区二区三区 | 国产伦精品一区二区三毛 | 免费黄色录像视频 | 午夜在线视频 | 一区二区日本 | 综合久久综合久久 | 婷婷五月色综合香五月 | 色视频网站免费 | 久久成人精品 | 一区二区三区在线播放视频 | 成人久久久久久久久 | 毛片大全 | 久久久精品一区二区三区 | 免费av一区二区三区 | 狠狠综合网 | 精品国产aⅴ | 日韩精品久久 | 天堂在线www | 国产色婷婷久久99精品91 | 夜夜草视频 | 超碰一区二区 | 欧美日韩电影一区二区 | 久久精品亚洲欧美日韩久久 | 久久网亚洲| 国产极品91| 91xxx在线观看| 日韩精品一区二区三区视频播放 | 国产免费一区 | 色综合天天天天做夜夜夜夜做 | 一区二区三区四区在线视频 | 中文字幕一区在线 | 日本大香伊一区二区三区 | 日韩欧美一区二区三区免费观看 | 国产成人精品999在线观看 | 国产片侵犯亲女视频播放 |