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復(fù)位OK
#define FLAG_TEMP_OK ? 0x02 ? ? ? ? ? ? ?//DS18B20 傳感器OK
#define FLAG_TEMP_OVER 0x04 ? ? ? ? ? //搜索DS18B20結(jié)束
#define WDT_CLR (WDTCTL = WDTPW + WDTCNTCL + WDTSSEL + WDTIS0) ? ?//看門狗清零
//----------------------------------------------------------------------
void Delay(unsigned int x); ? ? ? ?//延時(shí)程序
void Temp(void);
//-----------------------全局變量定義------------------------------
unsigned char ID[5][8]; ? ? ? ? ? ? ? ? ? ? //ID[5][8]為檢索到的地址
unsigned char TEMP_NUMBER; ? ? ? ? ? ? ? ? ?//溫度傳感器數(shù)量
unsigned int ?TEMP[5]; ? ? ? ? ? ? ? ? ? ? ?//溫度值
float ? ?fT[5];
//-----------------------軟件標(biāo)志定義------------------------------
unsigned int FLAG; ? ?//軟件標(biāo)志
//FLAG.0--DS18B20復(fù)位OK ?FLAG.1--溫度傳感器OK ?FLAG.2--搜索溫度結(jié)束
//****************************************************************************
//模塊名:Init_DS18B20
//描述: ?初試化DS18B20子程序。
//****************************************************************************
void Init_DS18B20(void)
{
DS_DIR = DS18B20;
DS_OUT = 0;
}
void main(void)
{
unsigned int iq0;
WDTCTL = WDTPW +WDTHOLD; ? ? //停看門狗
//---------------------------系統(tǒng)時(shí)鐘定義---------------------
BCSCTL1&=~XT2OFF; ? ? ? ? ? ? ? ? ? ? ? //打開XT2振蕩器
do
{
IFG1 &= ~OFIFG; ? ? ? ? ? ? ? ? ? ? // 清除振蕩器失效標(biāo)志
for (iq0 = 0xFF; iq0 > 0; iq0--); ? // 延時(shí),等待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
//描述: ?復(fù)位溫度傳感器DS18B20子程序。
//****************************************************************************
void Rst_DS18B20(void)
{
unsigned int I;
FLAG |= FLAG_TEMP_RET; ? ? ?//預(yù)設(shè)ds18b20復(fù)位OK
W18BUS_0; ? ? ? ? ? ? ? ? ? //拉低總線
Delay(960); ? ? ? ? ? ? ? ? ?//延時(shí)480uS
SF18BUS; ? ? ? ? ? ? ? ? ? ?//釋放總線
Delay(50); ? ? ? ? ? ? ? ? ?//延時(shí)15-60uS
I = 890;
while (/*(R18BUS) && */(I != 0)) I--; ? ? //循環(huán)條件:ds18b20總線不為“0”
//并且延時(shí)總時(shí)間不夠4mS
if (I != 0)
{
_NOP();
while(!(R18BUS));
}
else
{
FLAG &= ~FLAG_TEMP_RET;
}
}
//****************************************************************************
//模塊名:Read_BUS_bit
//描述: ?從單總線讀一位數(shù)據(jù)子程序。
//功能: ?DATA右移一位,從單總線讀一位數(shù)據(jù)到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; ? ? ? ? ? ? ? ? ? ? ? ? //延時(shí)45uS
while (I != 0) I--;
return (DATA);
}
//****************************************************************************
//模塊名:Write_BUS_bit
//描述: ?向單總線寫一位數(shù)據(jù)子程序。
//功能: ?把DATA的最低一位數(shù)據(jù)寫到單總線上,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; ? ? ? ? ? ? ? ? ? ? ? ? //延時(shí)15uS
while (I != 0) I--;
DATA >>= 1;
I = 80;
while (I != 0) I--;
W18BUS_1;
_NOP();
_NOP();
return (DATA);
}
//****************************************************************************
//模塊名:Read_BUS_Byte
//描述: ?從單總線讀一個(gè)字節(jié)數(shù)據(jù)子程序。
//功能: ?返回從單總線讀出的一個(gè)字節(jié)數(shù)據(jù),調(diào)用了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
//描述: ?向單總線寫一個(gè)字節(jié)數(shù)據(jù)子程序。
//功能: ?調(diào)用Write_BUS_bit,把DATA數(shù)據(jù)寫到單總線上
[1] [2] [3]
總結(jié)
以上是生活随笔為你收集整理的c语言for循环 wdtcn,MSP430F149的DS18B20C语言程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在AE中安装脚本? ae脚本安装图文
- 下一篇: i9-13900k性能如何 i9-139