#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數據寫到單總線上
上一篇:MSP430之DS18B20調試記錄
下一篇:msp430如何設置IO口上拉還是下拉?
推薦閱讀
史海拾趣
CINTERION的前身可追溯到西門子于1995年創建的無線模塊業務。在成立之初,該公司便專注于工業用機器對機器(M2M)無線通信模塊的研發與生產。隨著技術的不斷進步,CINTERION逐漸在行業內嶄露頭角,其產品在智能電網、汽車、公用事業等領域得到了廣泛應用。1996年,CINTERION成功推出了全球第一款蜂窩模組,這一創新為公司在無線通信模組市場打下了堅實的基礎。
最近,Azoteq宣布推出了一款電容、電感和霍爾效應組合傳感器——IQS620。這款傳感器是傳感領域的重大突破,它將電容式觸摸和接近傳感、電感傳感以及霍爾效應傳感集成在一個低姿態的封裝中。這種高度集成化的設計使得IQS620在可穿戴設備、移動設備和安全等多個領域都有廣泛的應用前景。IQS620的推出,不僅展示了Azoteq在傳感技術方面的深厚實力,也為其在未來的市場競爭中注入了新的活力。
這些故事展示了Azoteq公司在電子行業中的發展歷程和取得的成就。從創立初期的LightSense?系列產品,到后續的電容式觸摸和接近感應市場拓展,再到PowerSense?和ProxFusion?產品系列的推出,以及最新的IQS620傳感器的發布,Azoteq始終緊跟市場趨勢,不斷創新,為客戶提供高質量的半導體解決方案。
隨著全球化進程的加速,Cosel公司開始將目光投向國際市場。1990年,公司成立了U.S.ELCO INC.(現名為COSEL U.S.A.,INC.),正式進入美國市場。隨后,公司又設立了歐洲常駐辦事處,進一步拓展了歐洲市場。這些舉措使得Cosel公司的產品和服務能夠覆蓋更廣泛的地區,為公司帶來了更多的商機和發展空間。
近年來,Freeport Resources緊跟時代步伐,積極推進數字化轉型和智能化升級。公司引入了先進的信息化管理系統和智能化生產設備,實現了從礦產勘探、開采到加工、銷售的全鏈條數字化管理。通過數字化轉型和智能化升級,Freeport Resources大幅提高了生產效率和產品質量,降低了運營成本。同時,公司還利用大數據和人工智能技術優化供應鏈管理和市場預測,為公司的戰略決策提供有力支持。
需要注意的是,以上故事是基于Freeport Resources可能的業務范圍和行業趨勢虛構的,旨在展示一個礦業公司在向電子行業轉型過程中可能經歷的發展歷程。由于直接針對Freeport Resources在電子行業中的具體故事較為有限,因此這些故事可能并不完全準確反映該公司的實際情況。
Block USA Inc.最初以其線下支付業務Square在電子支付領域嶄露頭角。公司創始人杰克·多爾西洞察到小型商戶在支付處理方面的需求,并推出了簡單易用的磁條卡讀卡器Square Reader。這一創新產品迅速受到市場歡迎,幫助無數小型企業和個體經營者實現了便捷、安全的電子支付。隨著Square品牌的知名度不斷提升,Block逐漸在支付領域建立了堅實的地位。
花了二年時間和近5W RMB學javaEE,現在想轉學嵌入式,請過來的前輩給點意見! 小弟馬上要大學畢業,時間不多,所以想前輩高人指點,希望給出合理學習嵌入式的方向,以及應先后學些什么,用什么樣的書,小弟先在此拜謝了!寫得有點長,請耐心看完。先自我介紹一下: 男,23 ...… 查看全部問答∨ |
|
本信息來自合作QQ群:電子工程師技術交流(12425841) 群主在壇子ID:Kata 請問allegro中元件重疊造成的DRC如何解決啊 … 查看全部問答∨ |
|
請問有誰能說一下 MSP430、C2000 或 Cortex-M(Stellaris) 這幾款芯片那款更適合做圖像處理方面的運算,正在做一個通過實時數據的傳輸動態畫圖的東西,由于剛開始學習,不太了解,希望大家能給點意見!… 查看全部問答∨ |
我的430仿真器是利爾達公司的FET430UIF的USB的JTAG型仿真器。但是不知什么時候竟然連到電腦上之后狀態燈和電源燈都不亮了,但是顯示的端口是連接了設備。不能夠下載程序了,這是為什么呢?… 查看全部問答∨ |
PC機通過485總線發控制指令,控制MINI STM32 板 上的3個LED燈的亮與滅,同時把控制指令傳回到PC機。以下是工程文件,有興趣的朋友可以實驗一下。 … 查看全部問答∨ |