




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、單片機課程設計報告 課題內容 基于80c31的數(shù)字溫度計設計 專業(yè)班級 05電子1班 姓名 時 間 16 周 18 周 指導教師 2008 年 1月17日1 設計要求基本范圍-50-110精度誤差小于0.5led數(shù)碼直讀顯示2 擴展功能實現(xiàn)語音報數(shù)可以任意設定溫度的上下限報警功能數(shù)字溫度計摘要:隨著時代的進步和發(fā)展,單片機技術已經(jīng)普及到我們生活,工作,科研,各個領域,已經(jīng)成為一種比較成熟的技術,本文將介紹一種基于單片機控制的數(shù)字溫度計,本溫度計屬于多功能溫度計,可以設置上下報警溫度,當溫度不在設置范圍內時,可以報警。 關鍵詞:單片機,數(shù)字控制,溫度計, ds18b20,80c31,74ls37
2、31 引言隨著人們生活水平的不斷提高,單片機控制無疑是人們追求的目標之一,它所給人帶來的方便也是不可否定的,其中數(shù)字溫度計就是一個典型的例子,但人們對它的要求越來越高,要為現(xiàn)代人工作、科研、生活、提供更好的更方便的設施就需要從數(shù)單片機技術入手,一切向著數(shù)字化控制,智能化控制方向發(fā)展。本設計所介紹的數(shù)字溫度計與傳統(tǒng)的溫度計相比,具有讀數(shù)方便,測溫范圍廣,測溫準確,其輸出溫度采用數(shù)字顯示,主要用于對測溫比較準確的場所,或科研實驗室使用,該設計控制器使用單片機80c31,測溫傳感器使用ds18b20,用3位共陽極led數(shù)碼管以串口傳送數(shù)據(jù),實現(xiàn)溫度顯示,能準確達到以上要求。2 總體設計方案2.1數(shù)字
3、溫度計設計方案論證2.1.1方案一由于本設計是測溫電路,可以使用熱敏電阻之類的器件利用其感溫效應,在將隨被測溫度變化的電壓或電流采集過來,進行a/d轉換后,就可以用單片機進行數(shù)據(jù)的處理,在顯示電路上,就可以將被測溫度顯示出來,這種設計需要用到a/d轉換電路,感溫電路比較麻煩。2.1.2 方案二 進而考慮到用溫度傳感器,在單片機電路設計中,大多都是使用傳感器,所以這是非常容易想到的,在傳統(tǒng)的模擬信號遠距離溫度測量系統(tǒng)中,需要很好的解決引線誤差補償問題、多點測量切換誤差問題和放大電路零點漂移誤差問題等技術問題,才能夠達到較高的測量精度。另外一般監(jiān)控現(xiàn)場的電磁環(huán)境都非常惡劣,各種干擾信號較強,模擬溫
4、度信號容易受到干擾而產(chǎn)生測量誤差,影響測量精度。因此,在溫度測量系統(tǒng)中,采用抗干擾能力強的新型數(shù)字溫度傳感器是解決這些問題的最有效方案,新型數(shù)字溫度傳感器ds18b20具有體積更小、精度更高、適用電壓更寬、采用一線總線、可組網(wǎng)等優(yōu)點,在實際應用中取得了良好的測溫效果。所以可以采用一只溫度傳感器ds18b20,此傳感器,可以很容易直接讀取被測溫度值,進行轉換,就可以滿足設計要求。從以上兩種方案,很容易看出,采用方案二,電路比較簡單,軟件設計也比較簡單,故采用了方案二。2.2方案二的總體設計框圖溫度計電路設計總體設計方框圖如圖1所示,控制器采用單片機80c31,溫度傳感器采用ds18b20,用3位
5、led數(shù)碼管以串口傳送數(shù)據(jù)實現(xiàn)溫度顯示。主 控 制 器led顯 示溫 度 傳 感 器單片機復位時鐘振蕩報警點按鍵調整 圖1總體設計方框圖2.2.1 主控制器 1主要特性: 80c31內置中央處理單元、128字節(jié)內部數(shù)據(jù)存儲器ram、32個雙向輸入/輸出(i/o)口、2個16位定時/計數(shù)器和5個兩級中斷結構,一個全雙工串行通信口,片內時鐘振蕩電路。但80c31片內并無程序存儲器,需外接rom。2管腳說明:vcc:供電電壓。gnd:接地。p0口:p0口為一個8位漏級開路雙向i/o口,每腳可吸收8ttl門電流。當p1口的管腳第一次寫1時,被定義為高阻輸入。p0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義
6、為數(shù)據(jù)/地址的第八位。在fiash編程時,p0 口作為原碼輸入口,當fiash進行校驗時,p0輸出原碼,此時p0外部必須被拉高。p1口:p1口是一個內部提供上拉電阻的8位雙向i/o口,p1口緩沖器能接收輸出4ttl門電流。p1口管腳寫入1后,被內部上拉為高,可用作輸入,p1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在flash編程和校驗時,p1口作為第八位地址接收。 p2口:p2口為一個內部上拉電阻的8位雙向i/o口,p2口緩沖器可接收,輸出4個ttl門電流,當p2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,p2口的管腳被外部拉低,將輸出電流。這是
7、由于內部上拉的緣故。p2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,p2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,p2口輸出其特殊功能寄存器的內容。p2口在flash編程和校驗時接收高八位地址信號和控制信號。p3口:p3口管腳是8個帶內部上拉電阻的雙向i/o口,可接收輸出4個ttl門電流。當p3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,p3口將輸出電流(ill)這是由于上拉的緣故。p3口也可作為at89c51的一些特殊功能口,如下表所示:口管腳 備選功能p3.0 rxd(串行輸入口
8、)p3.1 txd(串行輸出口)p3.2 /int0(外部中斷0)p3.3 /int1(外部中斷1)p3.4 t0(記時器0外部輸入)p3.5 t1(記時器1外部輸入)p3.6 /wr(外部數(shù)據(jù)存儲器寫選通)p3.7 /rd(外部數(shù)據(jù)存儲器讀選通)p3口同時為閃爍編程和編程校驗接收一些控制信號。rst:復位輸入。當振蕩器復位器件時,要保持rst腳兩個機器周期的高電平時間。ale/prog:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在flash編程期間,此引腳用于輸入編程脈沖。在平時,ale端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸
9、出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ale脈沖。如想禁止ale的輸出可在sfr8eh地址上置0。此時, ale只有在執(zhí)行movx,movc指令是ale才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ale禁止,置位無效。/psen:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/psen有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/psen信號將不出現(xiàn)。/ea/vpp:當/ea保持低電平時,則在此期間外部程序存儲器(0000h-ffffh),不管是否有內部程序存儲器。注意加密方式1時,/ea將內部鎖定為reset;當/
10、ea端保持高電平時,此間內部程序存儲器。在flash編程期間,此引腳也用于施加12v編程電源(vpp)。xtal1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。xtal2:來自反向振蕩器的輸出。3振蕩器特性xtal1和xtal2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅動器件,xtal2應不接。有余輸入至內部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。4芯片擦除 80c31還可工作于低功耗模式,可通過兩種軟件選擇空閑和掉電模式。在空閑模式下凍結cpu而ram定時器、
11、串行口和中斷系統(tǒng)維持其功能。掉電模式下,保存ram數(shù)據(jù),時鐘振蕩停止,同時停止芯片內其它功能。8031 單片機內部只有數(shù)據(jù)存儲器,而沒有程序存儲器,它作為一般的最小應用系統(tǒng)也必須要進行外部程序存儲器的擴展,擴展中需要使用三態(tài)緩沖芯片74ls373。縱橫比較存儲器的各個方面的特點,我選用2864e2 prom 進行擴展,e2 prom 是電可擦除可編程只讀存儲器,其突出優(yōu)點是能夠在線擦除和改寫,無須像eprom 那樣必用紫外線照射才能擦除。較新的e2 prom 產(chǎn)品在寫入時能自動完成擦除,且不再需要專用的編程電源,可以直接使用單片機系統(tǒng)的+5v 電源。e2 prom 既具有rom 的非易失性的優(yōu)
12、點,又能像ram 一樣隨機地進行讀/寫,每個單元可以重復進行1 萬次改寫,保留信息的時間長達20 年,不存在eprom 在光照下出現(xiàn)信息緩慢丟失的問題。e2 prom 既可以擴展為片外eprom,也可以擴展為片外ram。它使單片機系統(tǒng)的設計,特別是調試實驗顯得非常方便靈活。在調試程序中,用e2 prom 代替仿真ram,既可方便得修改程序,又能保存調試好的程序。當然,與ram 相比, e2 prom 的操作速度是很慢的。另外,它的擦除/讀寫是有壽命限制的,雖然有一萬才次之多,但也不宜用在數(shù)據(jù)頻繁更新的場合。因此,應注意平均地使用各單元,不然有些單元可能會提前結束壽命。2.2.2 顯示電路2.2
13、.2.1 顯示電路工作原理及結構介紹顯示電路采用3位共陽led數(shù)碼管,從p3口rxd,txd串口輸出段碼。采用串行輸出的靜態(tài)顯示電路! 80c31單片機是mcs-51系列單片機的一種,它廣泛應用于各種小型控制系統(tǒng)中。我們知道,80c31單片機有一個串行口可用于串行通訊,它在方式0狀態(tài)下,還可以擴展并行i/o口,從而實現(xiàn)多個led顯示,其中,74ls164為串行輸入、并行輸出移位寄存器,74ls164為單向總線驅動器,led采用5ef1183kr型共陽極數(shù)碼管。當80c31單片機復位時,串行口為方式0狀態(tài),即工作在移位寄存器方式,波特率為振蕩頻率的十二分之一。器件執(zhí)行任何一條將sbuf作為目的寄
14、存器的命令時,數(shù)據(jù)便開始從rxd端發(fā)送。在寫信號有效時,相隔一個機器周期后發(fā)送控制端p2.0有效,即允許rxd發(fā)送數(shù)據(jù),同時,允許從txd端輸出移位脈沖。第一幀(8位)數(shù)據(jù)發(fā)送完畢時,各控制信號均恢復原狀態(tài),只有ti保持高電平,呈中斷申請狀態(tài)。第一個74ls164把第一幀數(shù)據(jù)并行輸出,led1顯示該數(shù)據(jù)。然后,用軟件將ti清零,發(fā)送第二幀數(shù)據(jù)。第二幀數(shù)據(jù)發(fā)送完畢,led1顯示第二幀數(shù)據(jù),第一幀數(shù)據(jù)串行輸入給第二個74ls164,led2顯示第一幀數(shù)據(jù)。依此類推,直到把數(shù)據(jù)區(qū)內所有數(shù)據(jù)發(fā)送出去。應該注意,數(shù)據(jù)全部發(fā)送完后,第一幀數(shù)據(jù)在最后一個led顯示。2.2.2.2 led 845顯示管介紹l
15、ed是發(fā)光二極管的縮寫,通常所說的led顯示器是由7個發(fā)光二極管組成,按“日”字形排列,也稱七段led顯示器。起管腳排列如圖2(a)所示。此外,顯示器中還有一個圓點型發(fā)光二極管。表示小數(shù)點。圖中以dp表示。 led顯示的有共陽和共陰兩種接法。所有發(fā)光二極管的陽極連在一起稱為共陽接法,陰極連在一起稱為共陰極接法,分別如圖2(b)(c)所示r是限流電阻當選用共陰極的led顯示器的時候,所有發(fā)光二極管的陰連在一起接地,當某個發(fā)光二極管的陽極加如高電平時候對應的二極管電亮。加入低電平時對應的二極管熄滅。當選用共陽極的led顯示器的時候,所有發(fā)光二極管的陽連在一起接地,當某個發(fā)光二極管的陰極加如高電平時
16、候對應的二極管熄滅。加入低電平時對應的二極管電亮。 圖2(a) 圖2(b) (c)為了在七段led顯示器上顯示不同的數(shù)字和符號,首先要把數(shù)字或字符轉換成響應的段碼,字符數(shù)據(jù)字與led段碼各代碼的對應關系如下顯示字符段碼(共陰)段碼(共陽)顯示字符段碼(共陰)段碼(共陽)03fhc0h96fh90h106hf9ha77h88h25bha4hb7ch83h34fhb0hc39hc6h466h99hd5eha1h56dh92he79h86h67dh82hf71h8eh707hf8h滅00hffh87fh80h在單片機應用系統(tǒng)中,發(fā)光二極管led顯示器常用兩種驅動方式;靜態(tài)顯示驅動和動態(tài)顯示驅動。本次
17、設計采用靜態(tài)顯示驅動。2.2.3溫度傳感器 ds18b20溫度傳感器是美國dallas半導體公司最新推出的一種改進型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)位的數(shù)字值讀數(shù)方式。由于ds18b20采用的是1wire總線協(xié)議方式,即在一根數(shù)據(jù)線實現(xiàn)數(shù)據(jù)的雙向傳輸,而對at89s51單片機來說,硬件上并不支持單總線協(xié)議,因此,我們必須采用軟件的方法來模擬單總線的協(xié)議時序來完成對ds18b20芯片的訪問。由于ds18b20是在一根i/o線上讀寫數(shù)據(jù),因此,對讀寫的數(shù)據(jù)位有著嚴格的時序要求。ds18b20有嚴格的通信協(xié)議來保證各位數(shù)據(jù)傳輸
18、的正確性和完整性。該協(xié)議定義了幾種信號的時序:初始化時序、讀時序、寫時序。所有時序都是將主機作為主設備,單總線器件作為從設備。而每一次命令和數(shù)據(jù)的傳輸都是從主機主動啟動寫時序開始,如果要求單總線器件回送數(shù)據(jù),在進行寫命令后,主機需啟動讀時序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。對于ds18b20的讀時序分為讀0時序和讀1時序兩個過程。對于ds18b20的讀時隙是從主機把單總線拉低之后,在15秒之內就得釋放單總線,以讓ds18b20把數(shù)據(jù)傳輸?shù)絾慰偩€上。ds18b20在完成一個讀時序過程,至少需要60us才能完成。對于ds18b20的寫時序仍然分為寫0時序和寫1時序兩個過程。對于ds18b
19、20寫0時序和寫1時序的要求不同,當要寫0時序時,單總線要被拉低至少60us,保證ds18b20能夠在15us到45us之間能夠正確地采樣io總線上的“0”電平,當要寫1時序時,單總線被拉低之后,在15us之內就得釋放單總線 ds18b20的性能特點如下:獨特的單線接口僅需要一個端口引腳進行通信;多個ds18b20可以并聯(lián)在惟一的三線上,實現(xiàn)多點組網(wǎng)功能;無須外部器件;可通過數(shù)據(jù)線供電,電壓范圍為3.05.5;零待機功耗;溫度以或位數(shù)字;用戶可定義報警設置;報警搜索命令識別并標志超過程序限定溫度(溫度報警條件)的器件;負電壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作; ds1
20、8b20采用腳pr35封裝或腳soic封裝,其內部結構框圖如圖3所示。 c64 位rom和單線接口高速緩存存儲器與控制邏輯溫度傳感器高溫觸發(fā)器th低溫觸發(fā)器tl配置寄存器8位crc發(fā)生器vddi/o 圖3 ds18b20內部結構 64位rom的結構開始位是產(chǎn)品類型的編號,接著是每個器件的惟一的序號,共有48位,最后位是前面56位的crc檢驗碼,這也是多個ds18b20可以采用一線進行通信的原因。溫度報警觸發(fā)器和,可通過軟件寫入戶報警上下限。 ds18b20溫度傳感器的內部存儲器還包括一個高速暫存和一個非易失性的可電擦除的eeram。高速暫存ram的結構為字節(jié)的存儲器,結構如圖3所示。頭個字節(jié)包
21、含測得的溫度信息,第和第字節(jié)和的拷貝,是易失的,每次上電復位時被刷新。第個字節(jié),為配置寄存器,它的內容用于確定溫度值的數(shù)字轉換分辨率。ds18b20工作時寄存器中的分辨率轉換為相應精度的溫度數(shù)值。該字節(jié)各位的定義如圖4所示。低位一直為,是工作模式位,用于設置ds18b20在工作模式還是在測試模式,ds18b20出廠時該位被設置為,用戶要去改動,r1和0決定溫度轉換的精度位數(shù),來設置分辨率。溫度 lsb溫度 msbth用戶字節(jié)1tl用戶字節(jié)2配置寄存器保留保留保留crc圖4 ds18b20字節(jié)定義 由表1可見,ds18b20溫度轉換的時間比較長,而且分辨率越高,所需要的溫度數(shù)據(jù)轉換時間越長。因此
22、,在實際應用中要將分辨率和轉換時間權衡考慮。高速暫存的第、字節(jié)保留未用,表現(xiàn)為全邏輯。第字節(jié)讀出前面所有字節(jié)的crc碼,可用來檢驗數(shù)據(jù),從而保證通信數(shù)據(jù)的正確性。當ds18b20接收到溫度轉換命令后,開始啟動轉換。轉換完成后的溫度值就以16位帶符號擴展的二進制補碼形式存儲在高速暫存存儲器的第、字節(jié)。單片機可以通過單線接口讀出該數(shù)據(jù),讀數(shù)據(jù)時低位在先,高位在后,數(shù)據(jù)格式以0.0625lsb形式表示。當符號位時,表示測得的溫度值為正值,可以直接將二進制位轉換為十進制;當符號位時,表示測得的溫度值為負值,要先將補碼變成原碼,再計算十進制數(shù)值。表2是一部分溫度值對應的二進制溫度數(shù)據(jù)。 表1 ds18b
23、20溫度轉換時間表 ds18b20完成溫度轉換后,就把測得的溫度值與ram中的th、t字節(jié)內容作比較。若th或ttl,則將該器件內的報警標志位置位,并對主機發(fā)出的報警搜索命令作出響應。因此,可用多只ds18b20同時測量溫度并進行報警搜索。在64位rom的最高有效字節(jié)中存儲有循環(huán)冗余檢驗碼(crc)。主機rom的前56位來計算crc值,并和存入ds18b20的crc值作比較,以判斷主機收到的rom數(shù)據(jù)是否正確。ds18b20的測溫原理是這這樣的,器件中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號送給減法計數(shù)器;高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯改變,所產(chǎn)生的信號作為
24、減法計數(shù)器的脈沖輸入。器件中還有一個計數(shù)門,當計數(shù)門打開時,ds18b20就對低溫度系數(shù)振蕩器產(chǎn)生的時鐘脈沖進行計數(shù)進而完成溫度測量。計數(shù)門的開啟時間由高溫度系數(shù)振蕩器來決定,每次測量前,首先將55所對應的一個基數(shù)分別置入減法計數(shù)器、溫度寄存器中,計數(shù)器和溫度寄存器被預置在55所對應的一個基數(shù)值。減法計數(shù)器對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進行減法計數(shù),當減法計數(shù)器的預置值減到時,溫度寄存器的值將加,減法計數(shù)器的預置將重新被裝入,減法計數(shù)器重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進行計數(shù),如此循環(huán)直到減法計數(shù)器計數(shù)到時,停止溫度寄存器的累加,此時溫度寄存器中的數(shù)值就是所測溫度值。其輸出用于修正減法計
25、數(shù)器的預置值,只要計數(shù)器門仍未關閉就重復上述過程,直到溫度寄存器值大致被測溫度值。表2一部分溫度對應值表溫度/二進制表示十六進制表示+1250000 0111 1101 000007d0h+850000 0101 0101 00000550h+25.06250000 0001 1001 00000191h+10.1250000 0000 1010 000100a2h+0.50000 0000 0000 00100008h00000 0000 0000 10000000h-0.51111 1111 1111 0000fff8h-10.1251111 1111 0101 1110ff5eh-25.
26、06251111 1110 0110 1111fe6fh-551111 1100 1001 0000fc90h另外,由于ds18b20單線通信功能是分時完成的,它有嚴格的時隙概念,因此讀寫時序很重要。系統(tǒng)對ds18b20的各種操作按協(xié)議進行。操作協(xié)議為:初使化ds18b20(發(fā)復位脈沖)發(fā)rom功能命令發(fā)存儲器操作命令處理數(shù)據(jù)。圖5 ds18b20與單片機的接口電路2.3 ds18b20溫度傳感器與單片機的接口電路 ds18b20可以采用兩種方式供電,一種是采用電源供電方式,此時ds18b20的1腳接地,2腳作為信號線,3腳接電源。另一種是寄生電源供電方式,如圖5才用第一種方式,同時可以達到單
27、點或多點的同測量。2.4 系統(tǒng)整體硬件電路2.4.1 主板電路系統(tǒng)整體硬件電路包括,傳感器數(shù)據(jù)采集電路,溫度顯示電路,上下限報警調整電路,單片機主板電路等,如圖6所示。圖6中有三個獨立式按鍵可以分別調整溫度計的上下限報警設置,圖中蜂鳴器可以在被測溫度不在上下限范圍內時,發(fā)出報警鳴叫聲音,同時led數(shù)碼管將沒有被測溫度值顯示,這時可以調整報警上下限,從而測出被測的溫度值。圖6 中的按健復位電路是上電復位加手動復位,使用比較方便,在程序跑飛時,可以手動復位,這樣就不用在重起單片機電源,就可以實現(xiàn)復位。2.4.2 顯示電路顯示電路是使用的串口顯示,這種顯示最大的優(yōu)點就是使用口資源比較少,只用p3口的
28、rxd,和txd,串口的發(fā)送和接收,四只數(shù)碼管采用74ls164右移寄存器驅動,顯示比較清晰。 圖6 單片機主板電路圖7溫度顯示電路3系統(tǒng)軟件算法分析系統(tǒng)程序主要包括主程序,讀出溫度子程序,溫度轉換命令子程序,計算溫度子程序,顯示數(shù)據(jù)刷新子程序等。3.1主程序主程序的主要功能是負責溫度的實時顯示、讀出并處理ds18b20的測量的當前溫度值,溫度測量每1s進行一次。這樣可以在一秒之內測量一次被測溫度,其程序流程見圖8所示。y發(fā)ds18b20復位命令發(fā)跳過rom命令發(fā)讀取溫度命令讀取操作,crc校驗9字節(jié)完?crc校驗正?確?移入溫度暫存器結束nny初始化調用顯示子程序1s到?初次上電讀出溫度值溫
29、度計算處理顯示數(shù)據(jù)刷新發(fā)溫度轉換開始命令nyny圖8 主程序流程圖圖9讀溫度流程圖 3.2讀出溫度子程序讀出溫度子程序的主要功能是讀出ram中的9字節(jié),在讀出時需進行crc校驗,校驗有錯時不進行溫度數(shù)據(jù)的改寫。其程序流程圖如圖9示發(fā)ds18b20復位命令發(fā)跳過rom命令發(fā)溫度轉換開始命令 結束圖10 溫度轉換流程圖3.3溫度轉換命令子程序溫度轉換命令子程序主要是發(fā)溫度轉換開始命令,當采用12位分辨率時轉換時間約為750ms,在本程序設計中采用1s顯示程序延時法等待轉換的完成。溫度轉換命令子程序流程圖如上圖,圖10所示3.4 計算溫度子程序計算溫度子程序將ram中讀取值進行bcd碼的轉換運算,并
30、進行溫度值正負的判定,其程序流程圖如圖11所示。 開始溫度零下?溫度值取補碼置“”標志計算小數(shù)位溫度bcd值 計算整數(shù)位溫度bcd值 結束置“+”標志ny溫度數(shù)據(jù)移入顯示寄存器十位數(shù)0?百位數(shù)0?十位數(shù)顯示符號百位數(shù)不顯示百位數(shù)顯示數(shù)據(jù)(不顯示符號) 結束nnyy 圖11計算溫度流程圖 圖12顯示數(shù)據(jù)刷新流程圖3.5 顯示數(shù)據(jù)刷新子程序顯示數(shù)據(jù)刷新子程序主要是對顯示緩沖器中的顯示數(shù)據(jù)進行刷新操作,當最高顯示位為0時將符號顯示位移入下一位。程序流程圖如圖12。4總結與體會 經(jīng)過將近三周的單片機課程設計,終于完成了我的數(shù)字溫度計的設計,雖然沒有完全達到設計要求,但從心底里說,還是高興的,畢竟這次設
31、計把實物都做了出來,高興之余不得不深思呀!在本次設計的過程中,我發(fā)現(xiàn)很多的問題,雖然以前還做過這樣的設計但這次設計真的讓我長進了很多,單片機課程設計重點就在于軟件算法的設計,需要有很巧妙的程序算法,雖然以前寫過幾次程序,但我覺的寫好一個程序并不是一件簡單的事,舉個例子,以前寫的那幾次,數(shù)據(jù)加減時,我用的都是bcd碼,這一次,我全部用的都是16進制的數(shù)直接加減,顯示處理時在用除法去刪分,感覺效果比較好,有好多的東西,只有我們去試著做了,才能真正的掌握,只學習理論有些東西是很難理解的,更談不上掌握。從這次的課程設計中,我真真正正的意識到,在以后的學習中,要理論聯(lián)系實際,把我們所學的理論知識用到實際
32、當中,學習單機片機更是如此,程序只有在經(jīng)常的寫與讀的過程中才能提高,這就是我在這次課程設計中的最大收獲。5 參考文獻1李朝青.單片機原理及接口技術(簡明修訂版).杭州:北京航空航天大學出版社,19982李廣弟.單片機基礎.北京:北京航空航天大學出版社,19943閻石.數(shù)字電子技術基礎(第三版). 北京:高等教育出版社,19894廖常初.現(xiàn)場總線概述j.電工技術,1999.5 李全利.單片機原理及應用技術.高等教育出版社.20046 付家才.單片機控制工程實踐技術.化學工業(yè)出版社.20047 張洪潤.單機片應用技術教程.清華大學出版社.2003數(shù)字溫度計程序清單s1ok equ 5fhtempu
33、ter equ 39h temph equ 5eh templequ 5dh ms50 equ 5chsign equ 5bh s1 bit p1.0 s2 bit p1.1 s3 bit p1.2 s4 bit p1.3 org 0000h ljmp main org 000bh ljmp toit org 0030hmain: mov sp, #60h mov tmod, #01h mov th0, #3ch mov tl0, #0b0h setb et0 setb tr0 setb ea mov temph, #30 mov templ, #9 mov temputer, #15 ;溫度
34、最始值 mov s1ok, #00h mov sign, #00h mov 38h, #0bh mov 37h, #0ch mov 36h, #0bh acall disp acall t1s; *; 主程序start: jb s1, net1 acall t12ms jb s1, net1 jnb s1, $ inc sign mov a, sign cjne a, #1, tiao acall tiaotl tiao:cjne a, #2, net1 mov sign, #0 acall tiaoth; * net1: mov a, s1ok cjne a, #1, start mov a
35、, temputer subb a, temph jnb acc.7, alem mov a, temputer subb a, templ jb acc.7, alem setb p2.1 acall wendu acall disp mov s1ok, #00h ajmp start alem: mov 36h, #0ch mov 37h, #0ch mov 38h, #0ch clr p2.1 acall disp acall t1s lcall wendu lcall disp mov s1ok, #00h sjmp start;*tiaotl:mov 50h, temputer mo
36、v 37h, templ acall bin_bcd acall disp acall t12ms acall t12ms acall t12ms acall t12ms mov 36h, #0ah mov 37h, #0ah mov 38h, #0ah acall disp acall t12ms acall t12ms acall t12ms acall t12ms jb s2, add1 acall t12ms jb s2, add1 jnb s2, $ inc templ mov a, templ cjne a, #100, add1 mov templ, #0 add1: jb s3
37、, add2 acall t12ms jb s3, add2 jnb s3, $ dec templ mov a, templ cjne a, #00 , add2 mov templ,#100 add2: jb s4, tiaotl acall t12ms jb s4, tiaotl jnb s4, $ mov temputer, 50h ljmp start ; 高位調整; *tiaoth:mov 50h, temputer mov 37h, temph acall bin_bcd acall disp acall t12ms acall t12ms acall t12ms acall t
38、12ms mov 36h, #0ah mov 37h, #0ah mov 38h, #0ah acall disp acall t12ms acall t12ms acall t12ms acall t12ms jb s2, add11 acall t12ms jb s2, add11 jnb s2, $ inc temph mov a, temph cjne a, #100, add11 mov temph, #0 add11: jb s3, add22 acall t12ms jb s3, add22 jnb s3, $ dec temph mov a, temph cjne a, #00
39、 , add22 mov temph,#100 add22: jb s4, tiaoth acall t12ms jb s4, tiaoth jnb s4, $ mov temputer, 50h ljmp start; 一秒定時中段; *toit: push psw push acc mov th0, #3ch mov tl0, #0b0h inc ms50 mov a, ms50 cjne a, #14h, return mov s1ok, #1 mov ms50, #00h return:pop acc pop psw reti; *;溫度總子程序; *wendu: acall init
40、_1820 acall re_config acall get_temper acall temper_cov ret; *;ds18b20初始化程序; * init_1820: setb p2.0 nop clr p2.0 mov r0,#06bh mov r1,#03htsr1: djnz r0,tsr1 ; 延時 mov r0,#6bh djnz r1,tsr1 setb p2.0 nop nop nop mov r0,#25htsr2: jnb p2.0,tsr3 djnz r0,tsr2 ljmp tsr4 ; 延時tsr3: setb 20h.1 ; 置標志位,表示ds1820存在
41、 ljmp tsr5tsr4: clr 20h.1 ; 清標志位,表示ds1820不存在 ljmp tsr7tsr5: mov r0,#06bh mov r1,#03htsr6:djnz r0,tsr6 ; 延時 mov r0,#6bh djnz r1,tsr6tsr7:setb p2.0 ret; *; 重新寫ds18b20暫存存儲器設定值; *re_config:jb 20h.1,re_config1 ; 若ds18b20存在,轉re_config1 retre_config1: mov a,#0cch ; 發(fā)skip rom命令 lcall write_1820 mov a,#4eh ; 發(fā)寫暫存存儲器命令 lcall write_1820 mov a,#00h ; th(報警上限)中寫入00h lcall write_1820 mov a,#00h ; tl(報警下限)中寫入00h lcall write_1820 mov a,#1fh ; 選擇9位溫度分辨率 lcall write_1820 ret; *; 讀出轉換后的溫度值; *get_temper: setb p2.0 ; 定時入口 lcall init_1820 jb 20h.1,tss2 ret ; 若ds18b20不存在則返回tss2: mov a,#0cch ; 跳過rom
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高考語文二輪復習知識點梳理
- 石墨烯項目生產(chǎn)計劃
- 幼兒園音體美課程發(fā)展計劃
- 婚姻家庭民事審判流程的關鍵環(huán)節(jié)
- 2025學年部編版一年級語文補習計劃
- 空調加氟作業(yè)的安全技術交底
- 新媒體營銷課堂導入的學習心得體會
- 技術講座授課流程
- 三年級下冊科學復習計劃與課外活動
- 一次性醫(yī)療器械項目可行性研究報告
- 高考高中物理知識點考點框架圖導圖
- 胃食管反流病指南
- 《假如我是患者》課件
- 第三單元+法律與教化+復習背誦清單 高二上學期歷史統(tǒng)編版(2019)選擇性必修1國家制度與社會治理
- 施工機具安全管理
- 中考數(shù)學函數(shù)一次函數(shù)復習課件
- 全套教學課件《工程倫理學》
- 擔保合同范本
- 水電解制氫設備操作與維護規(guī)程
- 廣東省廣州三校2023-2024學年高二下學期期末考試+政治試卷(含答案)
- 《男性困境:他們內心的創(chuàng)傷、恐懼與憤怒》記錄
評論
0/150
提交評論