日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言for循环 wdtcn,MSP430F149的DS18B20C语言程序

發布時間:2023/12/31 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言for循环 wdtcn,MSP430F149的DS18B20C语言程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#include ? ? ? ? ?"msp430x14x.h" ? ? ? ? ? ?// Standard Equations

//-------------------------I/O口定義------------------------------------

#define DS_DIR ? P6DIR

#define DS_OUT ? P6OUT

#define DS_IN ? ?P6IN

#define DS18B20 ?BIT4

#define W18BUS_1 {DS_DIR |= DS18B20;DS_OUT |= DS18B20;_NOP();DS_DIR &= ~DS18B20;}

//DS18B20總線寫"1"

#define W18BUS_0 {DS_DIR |= DS18B20;DS_OUT &= ~DS18B20;_NOP();}

//DS18B20總線寫"0"

#define SF18BUS (DS_DIR &= ~DS18B20) ? ? ? ? //釋放DS18B20總線

#define R18BUS ?(DS_IN & DS18B20)

#define FLAG_TEMP_RET ?0x01 ? ? ? ? ? ? //DS18B20復位OK

#define FLAG_TEMP_OK ? 0x02 ? ? ? ? ? ? ?//DS18B20 傳感器OK

#define FLAG_TEMP_OVER 0x04 ? ? ? ? ? //搜索DS18B20結束

#define WDT_CLR (WDTCTL = WDTPW + WDTCNTCL + WDTSSEL + WDTIS0) ? ?//看門狗清零

//----------------------------------------------------------------------

void Delay(unsigned int x); ? ? ? ?//延時程序

void Temp(void);

//-----------------------全局變量定義------------------------------

unsigned char ID[5][8]; ? ? ? ? ? ? ? ? ? ? //ID[5][8]為檢索到的地址

unsigned char TEMP_NUMBER; ? ? ? ? ? ? ? ? ?//溫度傳感器數量

unsigned int ?TEMP[5]; ? ? ? ? ? ? ? ? ? ? ?//溫度值

float ? ?fT[5];

//-----------------------軟件標志定義------------------------------

unsigned int FLAG; ? ?//軟件標志

//FLAG.0--DS18B20復位OK ?FLAG.1--溫度傳感器OK ?FLAG.2--搜索溫度結束

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

//模塊名:Init_DS18B20

//描述: ?初試化DS18B20子程序。

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

void Init_DS18B20(void)

{

DS_DIR = DS18B20;

DS_OUT = 0;

}

void main(void)

{

unsigned int iq0;

WDTCTL = WDTPW +WDTHOLD; ? ? //停看門狗

//---------------------------系統時鐘定義---------------------

BCSCTL1&=~XT2OFF; ? ? ? ? ? ? ? ? ? ? ? //打開XT2振蕩器

do

{

IFG1 &= ~OFIFG; ? ? ? ? ? ? ? ? ? ? // 清除振蕩器失效標志

for (iq0 = 0xFF; iq0 > 0; iq0--); ? // 延時,等待XT2起振

}

while ((IFG1 & OFIFG) != 0); ? ? ? ? ? ?// 判斷XT2是否起振

BCSCTL2 =SELM_2+DIVS_0+SELS; ? ? ? ? ? ?//選擇MCLK、SMCLK為XT2

Init_DS18B20();

_EINT();

while (1)

{

Temp();

for (iq0 = 5; iq0 != 0; iq0--)

{

fT[iq0-1] = 0.0625 * TEMP[iq0-1];

}

_NOP();

}

}

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

//模塊名:Rst_DS18B20

//描述: ?復位溫度傳感器DS18B20子程序。

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

void Rst_DS18B20(void)

{

unsigned int I;

FLAG |= FLAG_TEMP_RET; ? ? ?//預設ds18b20復位OK

W18BUS_0; ? ? ? ? ? ? ? ? ? //拉低總線

Delay(960); ? ? ? ? ? ? ? ? ?//延時480uS

SF18BUS; ? ? ? ? ? ? ? ? ? ?//釋放總線

Delay(50); ? ? ? ? ? ? ? ? ?//延時15-60uS

I = 890;

while (/*(R18BUS) && */(I != 0)) I--; ? ? //循環條件:ds18b20總線不為“0”

//并且延時總時間不夠4mS

if (I != 0)

{

_NOP();

while(!(R18BUS));

}

else

{

FLAG &= ~FLAG_TEMP_RET;

}

}

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

//模塊名:Read_BUS_bit

//描述: ?從單總線讀一位數據子程序。

//功能: ?DATA右移一位,從單總線讀一位數據到DATA的最高位,

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

unsigned char Read_BUS_bit (unsigned char DATA)

{

unsigned char I;

DATA >>= 1;

SF18BUS; ? ? ? ? ? ? ? ? ? ? ? //釋放總線

I = 30;

while (I != 0) I--;

_DINT();

W18BUS_0; ? ? ? ? ? ? ? ? ? ? ?//拉低總線2uS

_NOP();

_NOP();

_NOP();

_NOP();

_NOP();

W18BUS_1; ? ? ? ? ? ? ? ? ? ? ?//拉高總線

I = 20;

while (I != 0) I--;

if (R18BUS != 0)

DATA |= 0X80;

_NOP();

_EINT();

I = 25; ? ? ? ? ? ? ? ? ? ? ? ? //延時45uS

while (I != 0) I--;

return (DATA);

}

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

//模塊名:Write_BUS_bit

//描述: ?向單總線寫一位數據子程序。

//功能: ?把DATA的最低一位數據寫到單總線上,DATA右移一位

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

unsigned char Write_BUS_bit (unsigned char DATA)

{

unsigned char I;

_DINT();

W18BUS_1;

if (DATA&0X01)

{

DS_DIR |= ?DS18B20;

DS_OUT &= ~DS18B20;

_NOP();

_NOP();

DS_OUT |= ?DS18B20;

}

else

{

W18BUS_0;

}

_EINT();

I = 16; ? ? ? ? ? ? ? ? ? ? ? ? //延時15uS

while (I != 0) I--;

DATA >>= 1;

I = 80;

while (I != 0) I--;

W18BUS_1;

_NOP();

_NOP();

return (DATA);

}

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

//模塊名:Read_BUS_Byte

//描述: ?從單總線讀一個字節數據子程序。

//功能: ?返回從單總線讀出的一個字節數據,調用了Read_BUS_bit

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

unsigned char Read_BUS_Byte (void)

{

unsigned char I;

unsigned char DATA;

for (I = 8;I != 0;I--)

{

DATA = Read_BUS_bit(DATA);

}

return (DATA);

}

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

//模塊名:Write_BUS_Byte

//描述: ?向單總線寫一個字節數據子程序。

//功能: ?調用Write_BUS_bit,把DATA數據寫到單總線上

[1] [2] [3]

總結

以上是生活随笔為你收集整理的c语言for循环 wdtcn,MSP430F149的DS18B20C语言程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。