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

單片機(jī)MSP430 DS1B20 驅(qū)動(dòng)

發(fā)布者:RadiantBlossom最新更新時(shí)間:2021-01-10 來源: eefocus關(guān)鍵字:單片機(jī)  MSP430  DS1B20  驅(qū)動(dòng) 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

多個(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位序列號

 ** 輸    入 : 無

 ** 輸    出 : 無

 ** 說    明 :

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

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序列號匹配

 ** 輸    入 : 無

 ** 輸    出 : 無

 ** 說    明 :

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

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)

推薦閱讀最新更新時(shí)間:2025-04-25 08:21

基于MSP430單片機(jī)的電橋平衡自調(diào)節(jié)設(shè)計(jì)
描述 本文設(shè)計(jì)的MSP430F2002單片機(jī)和MAX5402數(shù)字電位器所構(gòu)成的電橋平衡自調(diào)節(jié)電路,具有結(jié)構(gòu)簡單、占用空間小、功耗低、可靠性高等特性,完全符合火炮膛壓測試儀的要求。 1 電橋平衡自調(diào)節(jié)原理 在火炮膛壓測試儀中,考慮到測試儀殼體結(jié)構(gòu)的限制以及低功耗的要求,采用的電橋?yàn)?/4直流源電橋。電橋平衡自調(diào)節(jié)電路如圖1所示。 圖1 電橋平衡自調(diào)節(jié)電路圖 左圖為電橋平衡自調(diào)節(jié)電路工作原理。其中,R1為電阻應(yīng)變計(jì)溫度補(bǔ)償片,R2為電阻應(yīng)變計(jì)工作片,R1=R2=R3=R4=120 Ω,Uo為電橋輸出電壓,Io為恒流源。由電路理論計(jì)算可知: 若R2·R3-R1·R4=0,則電橋保持平衡。測量中電橋初始輸出值一般不為零,這
[單片機(jī)]
基于<font color='red'>MSP430</font><font color='red'>單片機(jī)</font>的電橋平衡自調(diào)節(jié)設(shè)計(jì)
MSP430單片機(jī)控制1602液晶顯示
字符型 LCD1602 通常有 14 條引腳線或 16 條引腳線的 LCD , 多出來的 2 條線是背光電 源線 VCC(15 腳 ) 和地線 GND(16 腳 ) , 其控制原理與 14 腳的 LCD 完全一樣 , 引腳定義如下表 所示: 在這里要特別注意了:MSP430端口輸出電壓是3.3v的,不是5v的,所以2和15腳要另找5伏電壓接上,否則雖然能顯示但不清楚而且會(huì)出現(xiàn)亂碼。 2腳相當(dāng)于清晰度調(diào)節(jié),一般接地就可以,但最好接上可變電阻調(diào)節(jié)一下。 下面是端口連接: 不多解釋了,接上線就行了,下面是C語言程序: #include msp430x14x.h /* 必要操作:正確連接1602
[單片機(jī)]
<font color='red'>MSP430</font><font color='red'>單片機(jī)</font>控制1602液晶顯示
基于MSP430單片機(jī)的嵌入式手持?jǐn)?shù)據(jù)采集系統(tǒng)
簡介:uC/OS在手持?jǐn)?shù)據(jù)采集系統(tǒng)的成功應(yīng)用為手持設(shè)備軟件系統(tǒng)的設(shè)計(jì)探索了一條新的道路。使用uC/OS設(shè)計(jì)嵌入式軟件克服了傳統(tǒng)的前后臺式的軟件設(shè)計(jì)方法的弊端,提高了系統(tǒng)的實(shí)時(shí)性和穩(wěn)定性,使得軟件系統(tǒng)代碼模塊化,更進(jìn)一步增強(qiáng)了系統(tǒng)升級擴(kuò)展的能力。未來,在嵌入式系統(tǒng)軟件設(shè)計(jì)中uC/OS的應(yīng)用領(lǐng)域必將變得更加的廣泛。 本數(shù)據(jù)采集系統(tǒng)主要是使用TI公司的MSP430單片機(jī)與嵌入式系統(tǒng)uC/OS相結(jié)合而設(shè)計(jì)的,uC/OS在手持?jǐn)?shù)據(jù)采集系統(tǒng)的成功應(yīng)用為手持設(shè)備軟件系統(tǒng)的設(shè)計(jì)探索了一條新的道路。使用uC/OS設(shè)計(jì)嵌入式軟件克服了傳統(tǒng)的前后臺式的軟件設(shè)計(jì)方法的弊端,提高了系統(tǒng)的實(shí)時(shí)性和穩(wěn)定性,使得軟件系統(tǒng)代碼模塊化,更進(jìn)一步增強(qiáng)了系統(tǒng)升級擴(kuò)展
[單片機(jī)]
基于<font color='red'>MSP430</font><font color='red'>單片機(jī)</font>的嵌入式手持?jǐn)?shù)據(jù)采集系統(tǒng)
MSP430單片機(jī)幾種輸出模式
1 輸出模式0 輸出模式:輸出信號OUTx由每個(gè)捕獲/比較模塊的控制寄存器CCTLx中的OUTx位定義,并在寫入該寄存器后立即更新。最終位OUTx直通。 2 輸出模式1 置位模式:輸出信號在TAR等于CCRx時(shí)置位,并保持置位到定時(shí)器復(fù)位或選擇另一種輸出模式為止。 3 輸出模式2 PWM翻轉(zhuǎn)/復(fù)位模式:輸出在TAR的值等于CCRx時(shí)翻轉(zhuǎn),當(dāng)TAR的值等于CCR0時(shí)復(fù)位。 4 輸出模式3 PWM置位/復(fù)位模式:輸出在TAR的值等于CCRx時(shí)置位,當(dāng)TAR的值等于CCR0時(shí)復(fù)位。 5 輸出模式4 翻轉(zhuǎn)模式:輸出電平在TAR的值等于CCRx時(shí)翻轉(zhuǎn),輸出周期是定時(shí)器周期的2倍。 6 輸出模式5 復(fù)位模式:輸出在TAR的
[單片機(jī)]
MSP430G2553與MSP430F5336系列單片機(jī)總結(jié)[3]——看門狗定時(shí)器
看門狗定時(shí)器的作用是進(jìn)行基本定時(shí),當(dāng)程序發(fā)生錯(cuò)誤時(shí)執(zhí)行一個(gè)受控的系統(tǒng)重啟動(dòng),這是在工業(yè)現(xiàn)場為了防止程序跑飛而設(shè)計(jì)的定時(shí)器,在看門狗定時(shí)使用,時(shí)間達(dá)到時(shí),會(huì)產(chǎn)生系統(tǒng)復(fù)位,使CPU重新運(yùn)行系統(tǒng)程序。實(shí)際上,看門狗定時(shí)器可以設(shè)置為看門狗使用,即到達(dá)時(shí)間后系統(tǒng)復(fù)位,也可以當(dāng)做普通的定時(shí)器使用。在默認(rèn)情況下看門狗定時(shí)器被配置為SMCLK作為參考信號,復(fù)位時(shí)間間隔為32ms并工作在看門狗模式,所以如果我們不要用到看門狗,一開始就需要關(guān)閉看門狗,這也是為什么之前我們的那么多程序有第一句關(guān)看門狗指令的原因??撮T狗定時(shí)器和普通定時(shí)器功能很類似,所以使用也很簡單,主要的控制寄存器是WDTCTL。弄懂這個(gè)寄存器各個(gè)位的意思就能夠很好地設(shè)置看門狗定時(shí)器。
[單片機(jī)]
MSP430單片機(jī)流水燈程序
/*************************************************** 程序功能:控制8個(gè)LED閃爍, 測試說明:觀察LED閃爍 ***************************************************/ #include msp430x14x.h unsigned int i = 0; unsigned int flag = 0 ,speed = 0; /****************主函數(shù)****************/ void main(void) { WDTCTL = WDTPW + WDTHOLD; //關(guān)閉看門狗 CCTL0 =
[單片機(jī)]
基于MSP430G2微控制器閃爍LED:使用數(shù)字讀/寫引腳
這是一系列教程的第二篇教程,我們正在使用Energia IDE學(xué)習(xí)德州儀器的MSP430G2 LaunchPad開發(fā)板。在上一篇 閃爍LED 教程中,我們將介紹了使用Energia IDE開發(fā)LaunchPad開發(fā)板,同時(shí)我們還上傳了第一個(gè)程序,在固定的時(shí)間周期內(nèi)閃爍板上的LED。 在本教程中,我們將學(xué)習(xí)如何使用數(shù)字讀取和數(shù)字寫入選項(xiàng)讀取輸入設(shè)備(如開關(guān))的狀態(tài),并控制LED等多個(gè)輸出。在本教程結(jié)束時(shí),您將學(xué)會(huì)如何使用數(shù)字輸入和輸出,這些輸入可用于連接諸如紅外傳感器、PIR傳感器等許多數(shù)字傳感器,以及點(diǎn)亮或熄滅LED、蜂鳴器等輸出。聽起來很有趣,對不對?。??讓我們開始吧。 所需材料 ● MSP430G2 Launc
[單片機(jī)]
基于<font color='red'>MSP430</font>G2<font color='red'>微控制器</font>閃爍LED:使用數(shù)字讀/寫引腳
msp430fr2311單片機(jī)adc序列通道采樣詳細(xì)說明
使用P1.2、P1.3、P1.4、P1.5為采樣通道,以demo的msp430fr231x_adc10_10.c文件為例。 1、將上述4個(gè)管腳配置為ADC模式: P1SEL0 |= BIT2 + BIT3 + BIT4 + BIT5; P1SEL1 |= BIT2 + BIT3 + BIT4 + BIT5; 2、查看資料可知,有4種adc采樣模式,單通道單次,序列通道單次,單通道多次,序列通道多次; 本例選擇序列通道單次,將ADCCT寄存器設(shè)為L1ADCCONSEQ_1;430讀取通道數(shù)據(jù)時(shí)是由最高通道開始,直至A0,因此將ADCMCTL0設(shè)置為ADCINCH_5(通道5), ADCMCTL0 |= ADC
[單片機(jī)]
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

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

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