• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > ds18b20匯編程序與c程序

    ds18b20匯編程序與c程序

    作者: 時間:2011-05-01 來源:網絡 收藏

    c

    本文引用地址:http://www.czjhyjcfj.com/article/172838.htm

    //DS1820 C51 子
    //這里以11.0592M晶體為例,不同的晶體速度可能需要調整延時的時間
    //sbit DQ =P2^1;//根據實際情況定義端口

    typedef unsigned char byte;
    typedef unsigned int word;

    //延時
    void delay(word useconds)
    {
    for(;useconds>0;useconds--);
    }

    //復位
    byte ow_reset(void)
    {
    byte presence;
    DQ = 0; //pull DQ line low
    delay(29); // leave it low for 480us
    DQ = 1; // allow line to return high
    delay(3); // wait for presence
    presence = DQ; // get presence signal
    delay(25); // wait for end of timeslot
    return(presence); // presence signal returned
    } // 0=presence, 1 = no part

    //從 1-wire 總線上讀取一個字節
    byte read_byte(void)
    {
    byte i;
    byte value = 0;
    for (i=8;i>0;i--)
    {
    value>>=1;
    DQ = 0; // pull DQ low to start timeslot
    DQ = 1; // then return high
    delay(1); //for (i=0; i3; i++);
    if(DQ)value|=0x80;
    delay(6); // wait for rest of timeslot
    }
    return(value);
    }

    //向 1-WIRE 總線上寫一個字節
    void write_byte(char val)
    {
    byte i;
    for (i=8; i>0; i--) // writes byte, one bit at a time
    {
    DQ = 0; // pull DQ low to start timeslot
    DQ = val0x01;
    delay(5); // hold value for remainder of timeslot
    DQ = 1;
    val=val/2;
    }
    delay(5);
    }

    //讀取溫度
    char Read_Temperature(void)
    {
    union{
    byte c[2];
    int x;
    }temp;

    ow_reset();
    write_byte(0xCC); // Skip ROM
    write_byte(0xBE); // Read Scratch Pad
    temp.c[1]=read_byte();
    temp.c[0]=read_byte();
    ow_reset();
    write_byte(0xCC); //Skip ROM
    write_byte(0x44); // Start Conversion
    return temp.x/2;
    }

    :

    程序僅適合單個DS18B20和51單片機的連接,晶振為12MHZ左右
    DQ:DS18B20的數據總線接腳
    FLAG1:標志位,為1時表示檢測到DS18B20
    TEMPER_NUM:保存讀出的溫度數據
    TEMPER_LEQU36H
    TEMPER_HEQU35H

    DQBITP1.7

    ; DS18B20初始化程序
    ;//*****************************************//
    INIT_1820:
    SETBDQ
    NOP
    CLRDQ
    MOVR0,#06BH
    TSR1:
    DJNZR0,TSR1; 延時
    SETBDQ
    MOVR0,#25H
    TSR2:
    JNBDQ,TSR3
    DJNZR0,TSR2
    LJMPTSR4; 延時
    TSR3:
    SETBFLAG1; 置標志位,表示DS1820存在
    LJMPTSR5
    TSR4:
    CLRFLAG1; 清標志位,表示DS1820不存在
    LJMPTSR7
    TSR5:
    MOVR0,#06BH
    TSR6:
    DJNZR0,TSR6; 延時
    TSR7:
    SETBDQ
    RET
    ;//*****************************************//

    ; 重新寫DS18B20暫存存儲器設定值
    ;//*****************************************//
    RE_CONFIG:
    JBFLAG1,RE_CONFIG1; 若DS18B20存在,轉RE_CONFIG1
    RET
    RE_CONFIG1:
    MOVA,#0CCH; 發SKIP ROM命令
    LCALLWRITE_1820
    MOVA,#4EH; 發寫暫存存儲器命令
    LCALLWRITE_1820
    MOVA,#00H; TH(報警上限)中寫入00H


    上一頁 1 2 3 下一頁

    關鍵詞: 程序 匯編 ds18b20

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 金溪县| 大宁县| 错那县| 阳信县| 房产| 灵武市| 大姚县| 昔阳县| 三门县| 嵩明县| 时尚| 金昌市| 灯塔市| 开远市| 怀安县| 若尔盖县| 达尔| 合川市| 罗山县| 多伦县| 西城区| 固安县| 南陵县| 彩票| 廊坊市| 延庆县| 桓仁| 阿克| 新丰县| 阜阳市| 尉犁县| 万年县| 固始县| 连江县| 临颍县| 湖北省| 湖州市| 瑞昌市| 水城县| 拉孜县| 吴桥县|