日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

多個(gè)共總線

ds18b20.h



#ifndef __ds18b20

#define __ds18b20


#include "msp430g2553.h"

#include

#include

#include


#define DQ_1 P2OUT |= BIT0

#define DQ_0 P2OUT &= ~BIT0

#define DQ_in   P2DIR &= ~BIT0

#define DQ_out  P2DIR |= BIT0

#define DQ_val  (P2IN & BIT0)


void read_rom(unsigned char rom[]);

void WRITE_ROM(unsigned char T_H, unsigned char T_L, unsigned char CONFIG1);


unsigned int get_one_temperature(unsigned char ch);

unsigned char DS18B20_SearchRomId(unsigned char (*pID)[8], unsigned char Num);//沒用到


#endif


ds18b20.c


#include "ds18b20.h"


#define CPU_F ( (double) 8000000)

#define delay_us( x )   __delay_cycles( (long) (CPU_F * (double) x / 1000000.0) )

#define delay_ms( x )   __delay_cycles( (long) (CPU_F * (double) x / 1000.0) )


unsigned char ds18b20_rom1[8] = { 0x80, 0x3C, 0x01, 0xA8, 0x16, 0x8D, 0xB7, 0x28 }; /* 八個(gè)DS18B20的64位ROM地址 */

unsigned char ds18b20_rom2[8] = { 0xB4, 0x3C, 0x01, 0xA8, 0x16, 0x1C, 0x9C, 0x28 };

unsigned char ds18b20_rom3[8] = { 0x6E, 0x3C, 0x01, 0xA8, 0x16, 0x8E, 0x3A, 0x28 };

unsigned char ds18b20_rom4[8] = { 0x9F, 0x3C, 0x01, 0xA8, 0x16, 0x75, 0xA3, 0x28 };


/************************************************

 ** 函數(shù)名稱 : void reset(void)

 ** 函數(shù)功能 : ds18b20復(fù)位函數(shù)

 ** 輸    入 : 無

 ** 輸    出 : 無

 ** 說    明 :

 ************************************************/

void reset(void)

{


    DQ_out; /* 先設(shè)為輸入口 */

    DQ_0; /* 主機(jī)發(fā)送復(fù)位脈沖,強(qiáng)制拉DQ至低電平 */

    delay_us(750); /* 延時(shí)500vs */

    DQ_1;

    delay_us(15);


//    DQ_in; /* 設(shè)為輸入口,釋放DQ線 */

//    while (DQ_val == 1)

//        ; /* 等待器件DS18B20應(yīng)答(如果有低電平出現(xiàn)說明總線上有器件作出應(yīng)答) */

//    delay_us(50); /* 延時(shí) */

}

//等待DS18B20的回應(yīng)

//返回1:未檢測到DS18B20的存在

//返回0:存在

unsigned char DS18B20_Check(void)

{

    unsigned char retry = 0;

    DQ_in; //SET PA0 INPUT

    while (DQ_val && retry < 200)

    {

        retry++;

        delay_us(1);

    };

    if (retry >= 200)

        return 1;

    else

        retry = 0;

    while (!DQ_val && retry < 240)

    {

        retry++;

        delay_us(1);

    };

    if (retry >= 240)

        return 1;

    return 0;

}


//從DS18B20讀取一個(gè)位

//返回值:1/0

unsigned char DS18B20_Read_Bit(void)            // read one bit

{

    unsigned char data;

    DQ_out;            //SET PA0 OUTPUT

    DQ_0;

    delay_us(2);

    DQ_1;

    DQ_in;            //SET PA0 INPUT

    delay_us(12);

    if (DQ_val)

        data = 1;

    else

        data = 0;

    delay_us(50);

    return data;

}

//從DS18B20讀取一個(gè)字節(jié)

//返回值:讀到的數(shù)據(jù)

unsigned char DS18B20_Read_Byte(void)    // read one byte

{

    unsigned char i, j, dat;

    dat = 0;

    for (i = 1; i <= 8; i++)

    {

        j = DS18B20_Read_Bit();

        dat = (j << 7) | (dat >> 1);

    }

    return dat;

}

//寫一個(gè)字節(jié)到DS18B20

//dat:要寫入的字節(jié)

void DS18B20_Write_Byte(unsigned char dat)

{

    unsigned char j;

    unsigned char testb;

    DQ_out;    //SET PA0 OUTPUT;

    for (j = 1; j <= 8; j++)

    {

        testb = dat & 0x01;

        dat = dat >> 1;

        if (testb)

        {

            DQ_0;    // Write 1

            delay_us(2);

            DQ_1;

            delay_us(60);

        }

        else

        {

            DQ_0;    // Write 0

            delay_us(60);

            DQ_1;

            delay_us(2);

        }

    }

}

//開始溫度轉(zhuǎn)換

void DS18B20_Start(void)    // ds1820 start convert

{

    reset();

    DS18B20_Check();

    DS18B20_Write_Byte(0xcc);    // skip rom

    DS18B20_Write_Byte(0x44);    // convert

}


/************************************************

 ** 函數(shù)名稱 : void read_rom(unsigned char rom[])

 ** 函數(shù)功能 : 從ds18b20中讀出64位序列號(hào)

 ** 輸    入 : 無

 ** 輸    出 : 無

 ** 說    明 :

 ************************************************/

void read_rom(unsigned char rom[])

{

    unsigned char i;

    reset();

    DS18B20_Check();

    DS18B20_Write_Byte(0x33);

    for (i = 8; i > 0; i--)

    {

        rom[i - 1] = DS18B20_Read_Byte();

    }

}


/************************************************

 ** 函數(shù)名稱 : bit match_rom(uchar *rom)

 ** 函數(shù)功能 : 64位的ROM序列號(hào)匹配

 ** 輸    入 : 無

 ** 輸    出 : 無

 ** 說    明 :

 ************************************************/

char match_rom(unsigned char *rom)

{

    unsigned char i;

    reset();

    DS18B20_Check();

    DS18B20_Write_Byte(0x55);

    for (i = 8; i > 0; i--)

    {

        DS18B20_Write_Byte(*(rom + i - 1));

    }

    return (1);

}

//寫入配置 分辨率多少位 默認(rèn)12位

void WRITE_ROM(unsigned char T_H, unsigned char T_L, unsigned char CONFIG1)

{

    reset(); /*復(fù)位 */

    DS18B20_Write_Byte(0xCC); /* SKIP ROM */

    DS18B20_Write_Byte(0x4E); /* 寫RAM命令 */

    DS18B20_Write_Byte(T_H); /* 溫度報(bào)警高限值 */

    DS18B20_Write_Byte(T_L); /* 溫度報(bào)警低限值 */

    DS18B20_Write_Byte(CONFIG1); /* 配置位 */

    reset(); /* 重新復(fù)位 */

    DS18B20_Write_Byte(0xCC); /* SKIP ROM */

    DS18B20_Write_Byte(0x48); /* 將RAM拷貝到EEPROM */

    delay_ms(12); /* 耗時(shí)約10MS */

}


/* 讀取溫度 */

unsigned int get_one_temperature(unsigned char ch)

{

    unsigned int Temp_l = 0, Temp_h = 0, Temp = 0;

    float f_temp;


    switch (ch)

    {

    case 1:

        match_rom(ds18b20_rom1);

        break;

    case 2:

        match_rom(ds18b20_rom2);

        break;

    case 3:

        match_rom(ds18b20_rom3);

        break;

    case 4:

        match_rom(ds18b20_rom4);

        break;

    }

    DS18B20_Write_Byte(0xbe);                    // convert

    Temp_l = DS18B20_Read_Byte(); // LSB

    Temp_h = DS18B20_Read_Byte(); // MSB


    DS18B20_Start();                    // ds1820 start convert


    Temp_h <<= 8;

    Temp = Temp_h + Temp_l;

    f_temp = Temp * 0.0625; /* 18b20的分辨率是0.0625 */

    Temp = f_temp * 10 + 0.5; /* 乘以10表示小數(shù)點(diǎn)后面取一位,加0.5是四舍五入 */

    return (Temp); /* Temp是整型 */

}


/*****************************************************************

 * @brief   :DS18B20_WriteBit() 主機(jī)向總線寫1bit 數(shù)據(jù)

 * @param   : bit:要寫入位的值 0或1

 * @retval  :無

 ****************************************************************/

void DS18B20_WriteBit(unsigned char bit)

{

    DQ_out; /* 主機(jī)端口推挽輸出模式 */

    DQ_0; /* Write 0 拉低總線10-15us */

    delay_us(12);


    if (bit & 0x01)

    {


        DQ_1;  // Write 1


    }

    else

    {

        DQ_0;    // Write 0


    }


    delay_us(30); /* 寫入數(shù)據(jù)位,保持20-45us */

    DQ_1; /* 釋放總線 */

    delay_us(5);

}


/*****************************************************************

 * @brief   :DS18B20_Read2Bit() 主機(jī)從總線上讀取2位的數(shù)據(jù)

 * @param   :無

 * @retval  :讀到到的數(shù)據(jù) :00H,01H,10H,11H

 ****************************************************************/

unsigned char DS18B20_Read2Bit(void)

{

    unsigned char i, data = 0;


    for (i = 0; i < 2; i++)

    {

        data <<= 1;

        if (DS18B20_Read_Bit())

            data |= 1;

    }

    return (data);

}

/*****************************************************************

 * @brief   :DS18B20_CRC8() DS18B20 ROMID CRC校驗(yàn)

 * @param   :*pRomId :要校驗(yàn)訴RomID

 * @retval  :返回校驗(yàn)值

 ****************************************************************/

unsigned char DS18B20_CRC8(unsigned char *pRomId)

{

    unsigned char i, x;

    unsigned char crcbuff;

    unsigned char crc;

    crc = 0;

    for (x = 0; x < 8; x++)

    {

        crcbuff = pRomId[x];

        for (i = 0; i < 8; i++)

        {

            if (((crc ^ crcbuff) & 0x01) == 0)

                crc >>= 1;

            else

            {

                crc ^= 0x18; /* crc=x8+x5+x4+1 */

                crc >>= 1;

                crc |= 0x80;

[1] [2]
關(guān)鍵字:單片機(jī)  MSP430  DS1B20  驅(qū)動(dòng) 引用地址:單片機(jī)MSP430 DS1B20 驅(qū)動(dòng)

上一篇:MSP430 單片機(jī) 讀取 程序 LM75A LM75 溫度傳感器
下一篇:MSP430 DS1302 驅(qū)動(dòng)

推薦閱讀

電子網(wǎng)消息,1月9日,工信部旗下中國信息通信研究院發(fā)布《2017年12月國內(nèi)手機(jī)市場運(yùn)行分析報(bào)告》,報(bào)告顯示, 2017年12月,國內(nèi)手機(jī)市場出貨量4261.2萬部,同比下降32.5%;上市新機(jī)型90款,同比下降28.6%。1-12月,國內(nèi)手機(jī)市場出貨量4.91億部,上市新機(jī)型1054款,同比分別下降12.3%和27.1%。據(jù)中國信息通信研究院此前發(fā)布的報(bào)告顯示,2017年10月,國內(nèi)手...
TCL通訊在CES上發(fā)布了兩款阿爾卡特新機(jī),定位入門級(jí)別,分別是阿爾卡特1X和阿爾卡特1C。  阿爾卡特1X配備四核聯(lián)發(fā)科技系統(tǒng)芯片,2GB內(nèi)存和16GB存儲(chǔ)空間。顯示屏為5.5英寸,分辨率為720x1440像素,頂部和底部有相對(duì)較小的邊框。后置雙攝像頭支持人像模式,前置攝像頭支持和人臉解鎖功能,背面還有一個(gè)指紋傳感器,內(nèi)置3000mAh的電池,帶有耳機(jī)插孔,預(yù)裝A...
繼比亞迪發(fā)布漢的預(yù)告圖后不久,1月9日,比亞迪再次發(fā)布了旗下旗艦中大型轎車漢的官宣圖。(圖片來源:比亞迪官方微信)此次官圖徹底揭開了比亞迪漢的真容,從圖中兩款不同設(shè)計(jì)的車型可以看出,漢將推出EV和DM兩種動(dòng)力版本車型。據(jù)此前報(bào)道的消息來看,新車或?qū)⒂?020年6月正式上市。(圖片來源:比亞迪官方微信公眾號(hào))從官圖來看,最核心的設(shè)計(jì)特點(diǎn),是...
1. 每個(gè)GPIO均有以下寄存器:4個(gè)32位配置寄存器:GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR和GPIOx_PUPDRGPIOx_MODER :配置IO端口方向?yàn)檩斎?輸出/AF/模擬GPIOx_OTYPER :選擇輸出類型:推挽/開漏GPIOx_OSPEEDR :選擇IO速度(與IO端口方向無關(guān))GPIOx_PUPDR :選擇上拉/下拉電阻(與IO端口方向無關(guān))2個(gè)32位數(shù)據(jù)寄存器:GPIOx_IDR、GPIOx_ODR1個(gè)32...

史海拾趣

問答坊 | AI 解惑

請(qǐng)糾錯(cuò)!

http://news.eeworld.com.cn/FPGA [ 本帖最后由 unbj 于 2009-7-5 18:36 編輯 ]…

查看全部問答∨

常用電阻標(biāo)稱值

常見電阻,設(shè)計(jì)電路時(shí)計(jì)算出來的電阻值經(jīng)常會(huì)與電阻的標(biāo)稱值不相符,有時(shí)候需要根據(jù)標(biāo)稱值來修正電路的計(jì)算。下面列出了常用的5%和1%精度電阻的標(biāo)稱值,供大家設(shè)計(jì)時(shí)參考。 …

查看全部問答∨

要把50HZ信號(hào)移相90度,全通濾波器怎么設(shè)計(jì)?

本信息來自合作QQ群:電子工程師技術(shù)交流(12425841) 群主在壇子ID:Kata 請(qǐng)教,要把50HZ信號(hào)移相90度,全通濾波器怎么設(shè)計(jì)?…

查看全部問答∨

請(qǐng)問如何判斷2440已經(jīng)正常工作?

新做的2440板子,什么程序都沒有,如何判斷上電后2440是正常工作的?有沒有一個(gè)頻率輸出腳可以測量?…

查看全部問答∨

wince Dos 下怎樣導(dǎo)入注冊(cè)表文件?

我想象regedit /s name.reg一樣導(dǎo)入注冊(cè)表文件 但ce下沒看見有regedit,我手上有一個(gè)tre,可以導(dǎo)入,但會(huì)出現(xiàn)提示,我不想要提示。 不知tre有沒有參數(shù)可以去掉提示。 要不有沒有別的軟件可以實(shí)現(xiàn)。 謝謝?!?

查看全部問答∨

TMS320VC33 介紹

 TMS320VC33(簡稱VCC)是TI推出的TMS320系列的第三代處理器的升級(jí)產(chǎn)品,32位浮點(diǎn)運(yùn)算的DSP(0.18um技術(shù),144引腳LQFP封裝),主要型號(hào)有:   VC33-120 17ns 單周期指令執(zhí)行時(shí)間,60MIPS(百萬條指令每秒)       & ...…

查看全部問答∨

請(qǐng)各位幫幫忙出出主意,關(guān)于單片機(jī)項(xiàng)目的創(chuàng)新

本人想?yún)⒓訉W(xué)??萍紕?chuàng)新的活動(dòng),想利用單片機(jī)做個(gè)實(shí)用性的東西,這幾天苦思冥想做什么項(xiàng)目,實(shí)在想不出特別有新意的,只想到做一個(gè)智能風(fēng)扇,由于這個(gè)有很多人做過了,所以設(shè)想在原來的自動(dòng)根據(jù)室溫調(diào)整風(fēng)速和定時(shí)開關(guān)的基礎(chǔ)上自己再加些功能上去, ...…

查看全部問答∨

水位自動(dòng)控制程序

水位自動(dòng)控制程序…

查看全部問答∨

MSP430芯片有什么加密方法?

芯片內(nèi)有獨(dú)一無二的ID可以讀取嗎?或者可以燒熔絲阻值非法讀取之類的? 謝謝!…

查看全部問答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved