找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 10661|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

用DS18B20制作數(shù)字溫度計(jì)詳解 匯編 有實(shí)物圖

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:85192 發(fā)表于 2015-7-9 23:22 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
DALLAS最新單線數(shù)字溫度傳感器DS18B20簡(jiǎn)介
新的“一線器件”體積更小、適用電壓更寬、更經(jīng)濟(jì) Dallas 半導(dǎo)體公司的數(shù)字化溫度傳感器DS1820是世界上第一片支持 “一線總線”接口的溫度傳感器。一線總線獨(dú)特而且經(jīng)濟(jì)的特點(diǎn),使用戶可輕松地組建傳感器網(wǎng)絡(luò),為測(cè)量系統(tǒng)的構(gòu)建引入全新概念。DS18B20、 DS1822 “一線總線”數(shù)字化溫度傳感器 DS1820一樣,DS18B20 支持“一線總線”接口,測(cè)量溫度范圍為 -55°C~+125°C,在-10~+85°C范圍內(nèi),精度為±0.5°C。DS1822的精度較差為± 2°C �,F(xiàn)場(chǎng)溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場(chǎng)溫度測(cè)量,如:環(huán)境控制、設(shè)備或過(guò)程控制、測(cè)溫類消費(fèi)電子產(chǎn)品等。與前一代產(chǎn)品不同,新的產(chǎn)品支持3V~5.5V的電壓范圍,使系統(tǒng)設(shè)計(jì)更靈活、方便。而且新一代產(chǎn)品更便宜,體積更小。 DS18B20 DS1822 的特性 DS18B20可以程序設(shè)定9~12位的分辨率,精度為±0.5°C。可選更小的封裝方式,更寬的電壓適用范圍。分辨率設(shè)定,及用戶設(shè)定的報(bào)警溫度存儲(chǔ)在EEPROM中,掉電后依然保存。DS18B20的性能是新一代產(chǎn)品中最好的!性能價(jià)格比也非常出色! DS1822 DS18B20軟件兼容,是DS18B20的簡(jiǎn)化版本。省略了存儲(chǔ)用戶定義報(bào)警溫度、分辨率參數(shù)的EEPROM,精度降低為±2°C,適用于對(duì)性能要求不高,成本控制嚴(yán)格的應(yīng)用,是經(jīng)濟(jì)型產(chǎn)品。 繼“一線總線”的早期產(chǎn)品后,DS1820開(kāi)辟了溫度傳感器技術(shù)的新概念。DS18B20DS1822使電壓、特性及封裝有更多的選擇,讓我們可以構(gòu)建適合自己的經(jīng)濟(jì)的測(cè)溫系統(tǒng)。
DS18B20的內(nèi)部結(jié)構(gòu)
      DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器THTL、配置寄存器。DS18B20的管腳排列如下:
      DQ為數(shù)字信號(hào)輸入/輸出端;GND為電源地;VDD為外接供電電源輸入端(在寄生電源接線方式時(shí)接地)。
       光刻ROM中的64位序列號(hào)是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開(kāi)始8位(28H)是產(chǎn)品類型標(biāo)號(hào),接著的48位是該DS18B20自身的序列號(hào),最后8位是前面56位的循環(huán)冗余校驗(yàn)碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個(gè)DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)DS18B20的目的。
      DS18B20中的溫度傳感器可完成對(duì)溫度的測(cè)量,以12位轉(zhuǎn)化為例:16位符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625/LSB形式表達(dá),其中S為符號(hào)位。
      這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在18B20的兩個(gè)8比特的RAM中,二進(jìn)制中的前面5位是符號(hào)位,如果測(cè)得的溫度大于0,這5位為0,只要將測(cè)到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測(cè)到的數(shù)值需要取反加1再乘于0.0625即可得到實(shí)際溫度。
       例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H。
DS18B20溫度傳感器的存儲(chǔ)器
       DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的E2RAM,后者存放高溫度和低溫度觸發(fā)器TH、TL和結(jié)構(gòu)寄存器。
       暫存存儲(chǔ)器包含了8個(gè)連續(xù)字節(jié),前兩個(gè)字節(jié)是測(cè)得的溫度信息,第一個(gè)字節(jié)的內(nèi)容是溫度的低八位,第二個(gè)字節(jié)是溫度的高八位。第三個(gè)和第四個(gè)字節(jié)是TH、TL的易失性拷貝,第五個(gè)字節(jié)是結(jié)構(gòu)寄存器的易失性拷貝,這三個(gè)字節(jié)的內(nèi)容在每一次上電復(fù)位時(shí)被刷新。第六、七、八個(gè)字節(jié)用于內(nèi)部計(jì)算。第九個(gè)字節(jié)是冗余檢驗(yàn)字節(jié)。
該字節(jié)各位的意義如下:
TM R1 R0 1 1 1 1 1
低五位一直都是1 ,TM是測(cè)試模式位,用于設(shè)置DS18B20在工作模式還是在測(cè)試模式。在DS18B20出廠時(shí)該位被設(shè)置為0,用戶不要去改動(dòng)。R1R0用來(lái)設(shè)置分辨率,如下表所示:(DS18B20出廠時(shí)被設(shè)置為12位)
分辨率設(shè)置表:
R1 R0 分辨率 溫度最大轉(zhuǎn)換時(shí)間
0 0 9 93.75ms
0 1 10 187.5ms
1 0 11 375ms
1 1 12 750ms
       根據(jù)DS18B20的通訊協(xié)議,主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過(guò)三個(gè)步驟:每一次讀寫(xiě)之前都要對(duì)DS18B20進(jìn)行復(fù)位,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對(duì)DS18B20進(jìn)行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,DS18B20收到信號(hào)后等待1660微秒左右,后發(fā)出60240微秒的存在低脈沖,主CPU收到此信號(hào)表示復(fù)位成功。
DS1820使用中注意事項(xiàng)
  DS1820雖然具有測(cè)溫系統(tǒng)簡(jiǎn)單、測(cè)溫精度高、連接方便、占用口線少等優(yōu)點(diǎn),但在實(shí)際應(yīng)用中也應(yīng)注意以下幾方面的問(wèn)題:
  (1)較小的硬件開(kāi)銷需要相對(duì)復(fù)雜的軟件進(jìn)行補(bǔ)償,由于DS1820與微處理器間采用串行數(shù)據(jù)傳送,因此,在對(duì)DS1820進(jìn)行讀寫(xiě)編程時(shí),必須嚴(yán)格的保證讀寫(xiě)時(shí)序,否則將無(wú)法讀取測(cè)溫結(jié)果。在使用PL/MC等高級(jí)語(yǔ)言進(jìn)行系統(tǒng)程序設(shè)計(jì)時(shí),對(duì)DS1820操作部分最好采用匯編語(yǔ)言實(shí)現(xiàn)。
  (2)DS1820的有關(guān)資料中均未提及單總線上所掛DS1820數(shù)量問(wèn)題,容易使人誤認(rèn)為可以掛任意多個(gè)DS1820,在實(shí)際應(yīng)用中并非如此。當(dāng)單總線上所掛DS1820超過(guò)8個(gè)時(shí),就需要解決微處理器的總線驅(qū)動(dòng)問(wèn)題,這一點(diǎn)在進(jìn)行多點(diǎn)測(cè)溫系統(tǒng)設(shè)計(jì)時(shí)要加以注意。
  (3)連接DS1820的總線電纜是有長(zhǎng)度限制的。試驗(yàn)中,當(dāng)采用普通信號(hào)電纜傳輸長(zhǎng)度超過(guò)50m時(shí),讀取的測(cè)溫?cái)?shù)據(jù)將發(fā)生錯(cuò)誤。當(dāng)將總線電纜改為雙絞線帶屏蔽電纜時(shí),正常通訊距離可達(dá)150m,當(dāng)采用每米絞合次數(shù)更多的雙絞線帶屏蔽電纜時(shí),正常通訊距離進(jìn)一步加長(zhǎng)。這種情況主要是由總線分布電容使信號(hào)波形產(chǎn)生畸變?cè)斐傻摹R虼�,在�?font face="Times New Roman">DS1820進(jìn)行長(zhǎng)距離測(cè)溫系統(tǒng)設(shè)計(jì)時(shí)要充分考慮總線分布電容和阻抗匹配問(wèn)題。
  (4)DS1820測(cè)溫程序設(shè)計(jì)中,向DS1820發(fā)出溫度轉(zhuǎn)換命令后,程序總要等待DS1820的返回信號(hào),一旦某個(gè)DS1820接觸不好或斷線,當(dāng)程序讀該DS1820時(shí),將沒(méi)有返回信號(hào),程序進(jìn)入死循環(huán)。這一點(diǎn)在進(jìn)行DS1820硬件連接和軟件設(shè)計(jì)時(shí)也要給予一定的重視。
測(cè)溫電纜線建議采用屏蔽4芯雙絞線,其中一對(duì)線接地線與信號(hào)線,另一組接VCC和地線,屏蔽層在源端單點(diǎn)接地。
匯編源程序如下:
ORG 0000H
TEMPER_L EQU 41H ;用于保存讀出溫度的低8      
TEMPER_H EQU 40H ;用于保存讀出溫度的高8
FLAG1 EQU 38H ;是否檢測(cè)到DS18B20標(biāo)志位
A_BIT1 EQU 31H ;數(shù)碼管個(gè)位數(shù)存放內(nèi)存位置
B_BIT1 EQU 32H ;數(shù)碼管十位數(shù)存放內(nèi)存位置
D_BIT1 EQU 35H      ;數(shù)碼管百位數(shù)存放內(nèi)存位置
DQ EQU P3.7 ;30H,31H,32H,33H: X 個(gè)位 十位 X
MOD7: MOV SP,#60H
LCALL GET_TEMPER ;調(diào)用讀溫度子程序
LCALL TEMPCOV
LCALL DISPLAY ;調(diào)用數(shù)碼管顯示子程序
AJMP MOD7
TEMP0: INC A
AJMP TEMP1
TEMPCOV: MOV A,TEMPER_L ;數(shù)據(jù)處理子程序TEMPCOV
MOV B,#16
DIV AB
JB B.3,TEMP0
TEMP1: MOV 34H,A ;TEMPER_L的高四位右移四位,存入34H中(溫度值)
MOV A,B ;TEMPER_L的低四位X10/16得小數(shù)后一位數(shù).
MOV B,#10
MUL AB
MOV B,#16
DIV AB
MOV 30H,A ;將小數(shù)后一位數(shù).存入30H
MOV A,TEMPER_H ;TEMPER_H中存放高8位數(shù),權(quán)重16
MOV B,#16
MUL AB
ADD A,34H ;34H中存入溫度值的整數(shù)部分
MOV B,#10
DIV AB
MOV 31H,B ;個(gè)位存入31H
MOV B,#10 ;
DIV AB ;
MOV 32H,B ;十位存入32H
MOV B,#10 ;
DIV AB ;
MOV 35H,B ;百位存入33H
MOV A,TEMPER_H
MOV 33H,#10H ;
JB ACC.7,EXIT7
MOV 33H,#00H
EXIT7: RET
INIT_1820: ;這是DS18B20復(fù)位初始化子程序
SETB DQ
NOP
CLR DQ ;主機(jī)發(fā)出延時(shí)537微秒的復(fù)位低脈沖
MOV R1,#3
TSR1: MOV R0,#107
DJNZ R0,$
DJNZ R1,TSR1
SETB DQ ;然后拉高數(shù)據(jù)線
NOP
NOP
NOP
MOV R0,#25H
TSR2: JNB DQ,TSR3 ;等待DS18B20回應(yīng)
DJNZ R0,TSR2
LJMP TSR4 ;延時(shí)
TSR3: SETB FLAG1 ;置標(biāo)志位,表示DS1820存在
LJMP TSR5
TSR4: CLR FLAG1 ;清標(biāo)志位,表示DS1820不存在
LJMP TSR7
TSR5: MOV R0,#117
TSR6: DJNZ R0,TSR6 ;時(shí)序要求延時(shí)一段時(shí)間
TSR7: SETB DQ
RET
GET_TEMPER: ;讀出轉(zhuǎn)換后的溫度值
SETB DQ
LCALL INIT_1820 ;先復(fù)位DS18B20
JB FLAG1,TSS2
RET ;判斷DS1820是否存在?DS18B20不存在則返回
TSS2: MOV A,#0CCH ;跳過(guò)ROM匹配
LCALL WRITE_1820
MOV A,#44H ;發(fā)出溫度轉(zhuǎn)換命令
LCALL WRITE_1820
LCALL DISPLAY ;等待AD轉(zhuǎn)換結(jié)束,12位的話750微秒
LCALL INIT_1820 ;準(zhǔn)備讀溫度前先復(fù)位
MOV A,#0CCH ;跳過(guò)ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ;發(fā)出讀溫度命令
LCALL WRITE_1820
LCALL READ_18200 ;將讀出的溫度數(shù)據(jù)保存到35H/36H
RET

;寫(xiě)DS18B20的子程序(有具體的時(shí)序要求)
WRITE_1820: MOV R2,#8 ;一共8位數(shù)據(jù)
CLR C
WR1: CLR DQ
MOV R3,#6
DJNZ R3,$
RRC A
MOV DQ,C
MOV R3,#23
DJNZ R3,$
SETB DQ
NOP
DJNZ R2,WR1
SETB DQ
RET
;DS18B20的程序,DS18B20中讀出兩個(gè)字節(jié)的溫度數(shù)據(jù)
READ_18200: MOV R4,#2 ;將溫度高位和低位從DS18B20中讀出
MOV R1,#TEMPER_L ;低位存入TEMPER_L(TEMPER_L),高位存入(TEMPER_H)
RE00: MOV R2,#8 ;數(shù)據(jù)一共有8
RE01: CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#9
RE10: DJNZ R3,RE10
MOV C,DQ
MOV R3,#23
RE20: DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
;顯示子程序
DISPLAY: MOV DPTR,#TABLE ;指定查表啟始地址
MOV R0,#4
DPL1: MOV R1,#250 ;顯示1000
DPLOP: MOV A,A_BIT1 ;取個(gè)位數(shù)
MOVC A,@A+DPTR ;查個(gè)位數(shù)的7段代碼
MOV P0,A ;送出個(gè)位的7段代碼
CLR P2.0 ;開(kāi)個(gè)位顯示
ACALL D1MS ;顯示1MS
SETB P2.0
MOV A,B_BIT1 ;取十位數(shù)
MOVC A,@A+DPTR ;查十位數(shù)的7段代碼
MOV P0,A ;送出十位的7段代碼
CLR P2.1 ;開(kāi)十位顯示
ACALL D1MS ;顯示1MS
SETB P2.1
MOV A,D_BIT1 ;取百位數(shù)
MOVC A,@A+DPTR ;查百位數(shù)的7段代碼
MOV P0,A ;送出百位的7段代碼
CLR P2.2;開(kāi)百位顯示
ACALL D1MS ;顯示1MS
SETB P2.2
MOV P0,#00H
DJNZ R1,DPLOP ;100次沒(méi)完循環(huán)
DJNZ R0,DPL1 ;4個(gè)100次沒(méi)完循環(huán)
RET
;1MS延時(shí)(12MHZ)
D1MS: MOV R7,#0FFH
DJNZ R7,$
RET
;7段數(shù)碼管09數(shù)字的共陽(yáng)顯示代碼
TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H
      DB 92H,82H,0F8H,80H,90H
     END
注:晶振12MHZ。
本程序已通過(guò)實(shí)踐驗(yàn)證!��!












評(píng)分

參與人數(shù) 2威望 +2 黑幣 +7 收起 理由
1424603412 + 5 贊一個(gè)!
lshhjx + 2 + 2 很給力!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:45963 發(fā)表于 2015-7-14 16:17 | 只看該作者
點(diǎn)個(gè)贊,加不了分
回復(fù)

使用道具 舉報(bào)

板凳
ID:85702 發(fā)表于 2015-7-14 23:56 | 只看該作者
匯編的。不容易懂呀
回復(fù)

使用道具 舉報(bào)

地板
ID:86421 發(fā)表于 2015-7-21 23:07 | 只看該作者
點(diǎn)個(gè)贊
回復(fù)

使用道具 舉報(bào)

5#
ID:85847 發(fā)表于 2015-7-24 19:08 | 只看該作者
如果有C語(yǔ)言版本的就更好了。
回復(fù)

使用道具 舉報(bào)

6#
ID:87141 發(fā)表于 2015-7-29 09:57 | 只看該作者
點(diǎn)贊,不錯(cuò)。
回復(fù)

使用道具 舉報(bào)

7#
ID:59827 發(fā)表于 2015-8-15 11:26 | 只看該作者
這個(gè)匯編語(yǔ)言的,值得學(xué)習(xí)�。�
回復(fù)

使用道具 舉報(bào)

8#
ID:89071 發(fā)表于 2015-9-1 15:00 | 只看該作者
贊  期待C語(yǔ)言版本的 還有多路版本
回復(fù)

使用道具 舉報(bào)

9#
ID:517951 發(fā)表于 2020-11-15 07:54 | 只看該作者

這個(gè)匯編語(yǔ)言的牛,18B20的資料很詳細(xì)值得學(xué)習(xí)��!
回復(fù)

使用道具 舉報(bào)

10#
ID:61140 發(fā)表于 2022-4-3 14:28 | 只看該作者
無(wú)圖無(wú)真相,只有個(gè)黑圖,點(diǎn)亮的圖呢?
回復(fù)

使用道具 舉報(bào)

11#
ID:72088 發(fā)表于 2022-4-5 12:31 | 只看該作者
這匯編咋和我的一樣呢,定義符號(hào)也一樣,難道真是巧合?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表