温度传感器DS1820
生活随笔
收集整理的這篇文章主要介紹了
温度传感器DS1820
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、初始化時序:
首先,DSPORT保持低電平480到960微秒之間,然后將其拉高以產生復位脈沖,若產生復位脈沖,則表示初始化成功。復位脈沖:產生60~240微秒的低電平后釋放總線。防止while語句產生死循環,設置當5毫秒后仍然沒有產生低電平(復位脈沖)。則跳出while循環,初始化失敗。2、寫時序:
若寫0時序,則DSPORT一直是低電平若寫1時序,則DSPORT由低電平到高電平因此可以看出應該用“與”邏輯。綜上,思路為先將DSPORT置為低電平,然后寫入數據(采用與邏輯),而后需要釋放總線(DSPORT為1)3、讀時序:
根據寫時序,在寫入時序之前,DSPORT先低后高,所以在讀數據之前,也應將其置為先底后高。讀取數據之后,需要延時50微秒。4、溫度的讀取過程:
復位(初始化時序)——發出SKIP ROM(0xcc,具體見ROM指令表)——發出開始轉換命令(0x44,具體見RAM指令表)復位(初始化時序)——發出SKIP ROM(0xcc,具體見ROM指令表)——發出開始存儲命令(0xbe,具體見RAM指令表)連續讀出兩個字節的命令(即溫度),先讀低8位,后讀高8位。
5、將溫度轉換成10進制數,用數碼管顯示出來
若溫度為負數,則將其轉換為補碼,然后進行轉換。
uint change_date(int temp) {float tp;if(temp<0){disp_num[0] = 0x40;//負數符號數碼管的編碼temp = temp - 1;//轉化為補碼temp = ~temp;tp = temp;temp = tp*0.0625*100+0.5;//溫度擴大100倍,0.5則是提高精度,四舍五入法的應用}else{disp_num[0] = 0x00;tp = temp;temp = tp*0.0625*100+0.5;}return temp; }原代碼:
uchar Init() {uchar i;DSPORT = 0;i= 70;while(i--);DSPORT = 1;i = 0;while(DSPORT){i++;delay1ms(1);if(i>5)return 0;}return 1; } void write_byte(uchar date) {uchar i,j;for(i=0;i<8;i++){DSPORT = 0;j++;DSPORT |= date&0x01;j= 6;while(j--);DSPORT = 1;date >>= 1;} } uchar read_byte() {uchar i,j;uchar bi,byte;for(i=0;i<8;i++){DSPORT = 0;//根據時序圖先將總線拉低10微秒左右j++; //時序圖為最少1微妙,但單片機的一個指令周期最少為10微秒左右DSPORT = 1;//釋放總線j++; //保持數據穩定bi = DSPORT;byte = (byte>>1)|(bi<<7);j=4; //寫入數據后,需要延時50微妙左右while(j--);}return byte; } void ChangeTemp() {Init();delay1ms(1);write_byte(0xcc);//Skip ROM,該命令允許總線64位ROM編碼,而直接訪問存儲空間,從而節約時間,適合用于單點系統write_byte(0x44); //啟動溫度傳感器 } void ReadTemp_command() {Init();delay1ms(1);write_byte(0xcc);write_byte(0xbe);//讀取溫度傳感器中的溫度 } int ReadTempture() {uchar th,tl;uint date;ChangeTemp();ReadTemp_command();tl = read_byte();//選讀低8位,后讀高8位th = read_byte();date |= th;date<<=8;date = tl;return date; }總結
以上是生活随笔為你收集整理的温度传感器DS1820的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ES6 for..in 和 for...
- 下一篇: 半导封装测试流程_江苏半导体封装测试服务