




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
DS18B20智能溫度控制器DALLAS最新單線數(shù)字溫度傳感器DS18B20簡介新的“一線器件”體積更小、適用電壓更寬、更經(jīng)濟Dallas半導體公司的數(shù)字化溫度傳感器DS1820是世界上第一片支持“一線總線”接口的溫度傳感器。一線總線獨特而且經(jīng)濟的特點,使用戶可輕松地組建傳感器網(wǎng)絡(luò),為測量系統(tǒng)的構(gòu)建引入全新概念。DS18B20、DS1822“一線總線”數(shù)字化溫度傳感器同DS1820一樣,DS18B20也支持“一線總線”接口,測量溫度范圍為-55°C~+125°C,在-10~+85°C范圍內(nèi),精度為±0.5°C。DS1822的精度較差為±2°C?,F(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:環(huán)境控制、設(shè)備或過程控制、測溫類消費電子產(chǎn)品等。與前一代產(chǎn)品不同,新的產(chǎn)品支持3V~5.5V的電壓范圍,使系統(tǒng)設(shè)計更靈活、方便。而且新一代產(chǎn)品更便宜,體積更小。DS18B20、DS1822的特性DS18B20可以程序設(shè)定9~12位的分辨率,精度為±0.5°C??蛇x更小的封裝方式,更寬的電壓適用范圍。分辨率設(shè)定,及用戶設(shè)定的報警溫度存儲在EEPROM中,掉電后依然保存。DS18B20的性能是新一代產(chǎn)品中最好的!性能價格比也非常出色!DS1822與DS18B20軟件兼容,是DS18B20的簡化版本。省略了存儲用戶定義報警溫度、分辨率參數(shù)的EEPROM,精度降低為±2°C,適用于對性能要求不高,成本控制嚴格的應用,是經(jīng)濟型產(chǎn)品。繼“一線總線”的早期產(chǎn)品后,DS1820開辟了溫度傳感器技術(shù)的新概念。DS18B20和DS1822使電壓、特性及封裝有更多的選擇,讓我們可以構(gòu)建適合自己的經(jīng)濟的測溫系統(tǒng)。DS18B20的內(nèi)部結(jié)構(gòu)DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。DS18B20的管腳排列如下:DQ為數(shù)字信號輸入/輸出端;GND為電源地;VDD為外接供電電源輸入端(在寄生電源接線方式時接地)。光刻ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位(28H)是產(chǎn)品類型標號,接著的48位是該DS18B20自身的序列號,最后8位是前面56位的循環(huán)冗余校驗碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個DS18B20都各不相同,這樣就可以實現(xiàn)一根總線上掛接多個DS18B20的目的。DS18B20中的溫度傳感器可完成對溫度的測量,以12位轉(zhuǎn)化為例:用16位符號擴展的二進制補碼讀數(shù)形式提供,以0.0625℃/LSB形式表達,其中S為符號位。這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18B20的兩個8比特的RAM中,二進制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實際溫度。例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H。DS18B20溫度傳感器的存儲器DS18B20溫度傳感器的內(nèi)部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的E2RAM,后者存放高溫度和低溫度觸發(fā)器TH、TL和結(jié)構(gòu)寄存器。暫存存儲器包含了8個連續(xù)字節(jié),前兩個字節(jié)是測得的溫度信息,第一個字節(jié)的內(nèi)容是溫度的低八位,第二個字節(jié)是溫度的高八位。第三個和第四個字節(jié)是TH、TL的易失性拷貝,第五個字節(jié)是結(jié)構(gòu)寄存器的易失性拷貝,這三個字節(jié)的內(nèi)容在每一次上電復位時被刷新。第六、七、八個字節(jié)用于內(nèi)部計算。第九個字節(jié)是冗余檢驗字節(jié)。該字節(jié)各位的意義如下:TMR1R011111低五位一直都是1,TM是測試模式位,用于設(shè)置DS18B20在工作模式還是在測試模式。在DS18B20出廠時該位被設(shè)置為0,用戶不要去改動。R1和R0用來設(shè)置分辨率,如下表所示:(DS18B20出廠時被設(shè)置為12位)分辨率設(shè)置表:R1R0分辨率溫度最大轉(zhuǎn)換時間009位93.75ms0110位187.5ms1011位375ms1112位750ms根據(jù)DS18B20的通訊協(xié)議,主機控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個步驟:每一次讀寫之前都要對DS18B20進行復位,復位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對DS18B20進行預定的操作。復位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,DS18B20收到信號后等待16~60微秒左右,后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號表示復位成功。DS1820使用中注意事項DS1820雖然具有測溫系統(tǒng)簡單、測溫精度高、連接方便、占用口線少等優(yōu)點,但在實際應用中也應注意以下幾方面的問題:(1)較小的硬件開銷需要相對復雜的軟件進行補償,由于DS1820與微處理器間采用串行數(shù)據(jù)傳送,因此,在對DS1820進行讀寫編程時,必須嚴格的保證讀寫時序,否則將無法讀取測溫結(jié)果。在使用PL/M、C等高級語言進行系統(tǒng)程序設(shè)計時,對DS1820操作部分最好采用匯編語言實現(xiàn)。(2)在DS1820的有關(guān)資料中均未提及單總線上所掛DS1820數(shù)量問題,容易使人誤認為可以掛任意多個DS1820,在實際應用中并非如此。當單總線上所掛DS1820超過8個時,就需要解決微處理器的總線驅(qū)動問題,這一點在進行多點測溫系統(tǒng)設(shè)計時要加以注意。(3)連接DS1820的總線電纜是有長度限制的。試驗中,當采用普通信號電纜傳輸長度超過50m時,讀取的測溫數(shù)據(jù)將發(fā)生錯誤。當將總線電纜改為雙絞線帶屏蔽電纜時,正常通訊距離可達150m,當采用每米絞合次數(shù)更多的雙絞線帶屏蔽電纜時,正常通訊距離進一步加長。這種情況主要是由總線分布電容使信號波形產(chǎn)生畸變造成的。因此,在用DS1820進行長距離測溫系統(tǒng)設(shè)計時要充分考慮總線分布電容和阻抗匹配問題。(4)在DS1820測溫程序設(shè)計中,向DS1820發(fā)出溫度轉(zhuǎn)換命令后,程序總要等待DS1820的返回信號,一旦某個DS1820接觸不好或斷線,當程序讀該DS1820時,將沒有返回信號,程序進入死循環(huán)。這一點在進行DS1820硬件連接和軟件設(shè)計時也要給予一定的重視。測溫電纜線建議采用屏蔽4芯雙絞線,其中一對線接地線與信號線,另一組接VCC和地線,屏蔽層在源端單點接地。這是我們用網(wǎng)站提供的AT89C51實驗開發(fā)板做的溫度測量試驗,DS18B20的正電源就是紅線接+5伏,蘭線接地,棕色線接P2.2,(注意:四位撥碼開關(guān)的第3位不能處于ON的位置,否則實驗無法成功?。?5V和信號線之間有一個4.7K的上拉電阻,硬件就這么簡單,網(wǎng)友可以加15元向我郵購DS18B20測溫電纜,可以直接插在實驗板上,就能使用。軟件如下:;這是關(guān)于DS18B20的讀寫程序,數(shù)據(jù)腳P2.2,晶振12MHZ;溫度傳感器18B20匯編程序,采用器件默認的12位轉(zhuǎn)化,最大轉(zhuǎn)化時間750微秒;可以將檢測到的溫度直接顯示到AT89C51開發(fā)實驗板的兩個數(shù)碼管上;顯示溫度00到99度,很準確哦~~無需校正!ORG0000H;單片機內(nèi)存分配申明!TEMPER_LEQU29H;用于保存讀出溫度的低8位TEMPER_HEQU28H;用于保存讀出溫度的高8位FLAG1EQU38H;是否檢測到DS18B20標志位a_bitequ20h;數(shù)碼管個位數(shù)存放內(nèi)存位置b_bitequ21h;數(shù)碼管十位數(shù)存放內(nèi)存位置MAIN:LCALLGET_TEMPER;調(diào)用讀溫度子程序;進行溫度顯示,這里我們考慮用網(wǎng)站提供的兩位數(shù)碼管來顯示溫度;顯示范圍00到99度,顯示精度為1度;因為12位轉(zhuǎn)化時每一位的精度為0.0625度,我們不要求顯示小數(shù)所以可以拋棄29H的低4位;將28H中的低4位移入29H中的高4位,這樣獲得一個新字節(jié),這個字節(jié)就是實際測量獲得的溫度;這個轉(zhuǎn)化溫度的方法可是我想出來的哦~~非常簡潔無需乘于0.0625系數(shù)MOVA,29HMOVC,40H;將28H中的最低位移入CRRCAMOVC,41HRRCAMOVC,42HRRCAMOVC,43HRRCAMOV29H,ALCALLDISPLAY;調(diào)用數(shù)碼管顯示子程序CPLP1.0AJMPMAIN;這是DS18B20復位初始化子程序INIT_1820:SETBP2.2NOPCLRP2.2;主機發(fā)出延時537微秒的復位低脈沖MOVR1,#3TSR1:MOVR0,#107DJNZR0,$DJNZR1,TSR1SETBP2.2;然后拉高數(shù)據(jù)線NOPNOPNOPMOVR0,#25HTSR2:JNBP2.2,TSR3;等待DS18B20回應DJNZR0,TSR2LJMPTSR4;延時TSR3:SETBFLAG1;置標志位,表示DS1820存在CLRP1.7;檢查到DS18B20就點亮P1.7LEDLJMPTSR5TSR4:CLRFLAG1;清標志位,表示DS1820不存在CLRP1.1LJMPTSR7TSR5:MOVR0,#117TSR6:DJNZR0,TSR6;時序要求延時一段時間TSR7:SETBP2.2RET;讀出轉(zhuǎn)換后的溫度值GET_TEMPER:SETBP2.2LCALLINIT_1820;先復位DS18B20JBFLAG1,TSS2CLRP1.2RET;判斷DS1820是否存在?若DS18B20不存在則返回TSS2:CLRP1.3;DS18B20已經(jīng)被檢測到!!!!!!!!!!!!!!!!!!MOVA,#0CCH;跳過ROM匹配LCALLWRITE_1820MOVA,#44H;發(fā)出溫度轉(zhuǎn)換命令LCALLWRITE_1820;這里通過調(diào)用顯示子程序?qū)崿F(xiàn)延時一段時間,等待AD轉(zhuǎn)換結(jié)束,12位的話750微秒LCALLDISPLAYLCALLINIT_1820;準備讀溫度前先復位MOVA,#0CCH;跳過ROM匹配LCALLWRITE_1820MOVA,#0BEH;發(fā)出讀溫度命令LCALLWRITE_1820LCALLREAD_18200;將讀出的溫度數(shù)據(jù)保存到35H/36HCLRP1.4RET;寫DS18B20的子程序(有具體的時序要求)WRITE_1820:MOVR2,#8;一共8位數(shù)據(jù)CLRCWR1:CLRP2.2MOVR3,#6DJNZR3,$RRCAMOVP2.2,CMOVR3,#23DJNZR3,$SETBP2.2NOPDJNZR2,WR1SETBP2.2RET;讀DS18B20的程序,從DS18B20中讀出兩個字節(jié)的溫度數(shù)據(jù)READ_18200:MOVR4,#2;將溫度高位和低位從DS18B20中讀出MOVR1,#29H;低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)RE00:MOVR2,#8;數(shù)據(jù)一共有8位RE01:CLRCSETBP2.2NOPNOPCLRP2.2NOPNOPNOPSETBP2.2MOVR3,#9RE10:DJNZR3,RE10MOVC,P2.2MOVR3,#23RE20:DJNZR3,RE20RRCADJNZR2,RE01MOV@R1,ADECR1DJNZR4,RE00RET;顯示子程序display:mova,29H;將29H中的十六進制數(shù)轉(zhuǎn)換成10進制movb,#10;10進制/10=10進制divabmovb_bit,a;十位在amova_bit,b;個位在bmovdptr,#numtab;指定查表啟始地址movr0,#4dpl1:movr1,#250;顯示1000次dplop:mova,a_bit;取個位數(shù)MOVCA,@A+DPTR;查個位數(shù)的7段代碼movp0,a;送出個位的7段代碼clrp2.7;開個位顯示acalld1ms;顯示1mssetbp2.7mova,b_bit;取十位數(shù)MOVCA,@A+DPTR;查十位數(shù)的7段代碼movp0,a;送出十位的7段代碼clrp2.6;開十位顯示acalld1ms;顯示1mssetbp2.6djnzr1,dplop;100次沒完循環(huán)djnzr0,dpl1;4個100次沒完循環(huán)ret;1MS延時(按12MHZ算)D1MS:MOVR7,#80DJNZR7,$RET;實驗板上的7段數(shù)碼管0~9數(shù)字的共陰顯示代碼numtab:DB0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBHend這是上面程序匯編以后獲得的編程器燒寫文件:DS1820.hex下載燒寫文件的方法:將鼠標移到燒寫文件的超級鍵連處,點擊鼠標的右鍵,選擇“目標另存為(A)...”保存文件類型中不要選擇“文本文件”,應該選擇“所有文件”,這樣就能獲得*.hex文件了。;這是關(guān)于DS18B20的讀寫程序,數(shù)據(jù)腳P2.2,晶振11.0592mhz;溫度傳感器18B20匯編程序,采用器件默認的12位轉(zhuǎn)化,最大轉(zhuǎn)化時間750微秒;可以將檢測到的溫度直接顯示到AT89C51開發(fā)實驗板的兩個數(shù)碼管上;顯示溫度00到99度,很準確哦~~無需校正!ORG0000H;單片機內(nèi)存分配申明!TEMPER_LEQU29H;用于保存讀出溫度的低8位TEMPER_HEQU28H;用于保存讀出溫度的高8位FLAG1EQU38H;是否檢測到DS18B20標志位a_bitequ20h;數(shù)碼管個位數(shù)存放內(nèi)存位置b_bitequ21h;數(shù)碼管十位數(shù)存放內(nèi)存位置MAIN:LCALLGET_TEMPER;調(diào)用讀溫度子程序;進行溫度顯示,這里我們考慮用網(wǎng)站提供的兩位數(shù)碼管來顯示溫度;顯示范圍00到99度,顯示精度為1度;因為12位轉(zhuǎn)化時每一位的精度為0.0625度,我們不要求顯示小數(shù)所以可以拋棄29H的低4位;將28H中的低4位移入29H中的高4位,這樣獲得一個新字節(jié),這個字節(jié)就是實際測量獲得的溫度;這個轉(zhuǎn)化溫度的方法可是我想出來的哦~~非常簡潔無需乘于0.0625系數(shù)MOVA,29HMOVC,40H;將28H中的最低位移入CRRCAMOVC,41HRRCAMOVC,42HRRCAMOVC,43HRRCAMOV29H,ALCALLDISPLAY;調(diào)用數(shù)碼管顯示子程序CPLP1.0AJMPMAIN;這是DS18B20復位初始化子程序INIT_1820:SETBP2.2NOPCLRP2.2;主機發(fā)出延時537微秒的復位低脈沖MOVR1,#3TSR1:MOVR0,#107DJNZR0,$DJNZR1,TSR1SETBP2.2;然后拉高數(shù)據(jù)線NOPNOPNOPMOVR0,#25HTSR2:JNBP2.2,TSR3;等待DS18B20回應DJNZR0,TSR2LJMPTSR4;延時TSR3:SETBFLAG1;置標志位,表示DS1820存在CLRP1.7;檢查到DS18B20就點亮P1.7LEDLJMPTSR5TSR4:CLRFLAG1;清標志位,表示DS1820不存在CLRP1.1LJMPTSR7TSR5:MOVR0,#117TSR6:DJNZR0,TSR6;時序要求延時一段時間TSR7:SETBP2.2RET;讀出轉(zhuǎn)換后的溫度值GET_TEMPER:SETBP2.2LCALLINIT_1820;先復位DS18B20JBFLAG1,TSS2CLRP1.2RET;判斷DS1820是否存在?若DS18B20不存在則返回TSS2:CLRP1.3;DS18B20已經(jīng)被檢測到!!!!!!!!!!!!!!!!!!MOVA,#0CCH;跳過ROM匹配LCALLWRITE_1820MOVA,#44H;發(fā)出溫度轉(zhuǎn)換命令LCALLWRITE_1820;這里通過調(diào)用顯示子程序?qū)崿F(xiàn)延時一段時間,等待AD轉(zhuǎn)換結(jié)束,12位的話750微秒LCALLDISPLAYLCALLINIT_1820;準備讀溫度前先復位MOVA,#0CCH;跳過ROM匹配LCALLWRITE_1820MOVA,#0BEH;發(fā)出讀溫度命令LCALLWRITE_1820LCALLREAD_18200;將讀出的溫度數(shù)據(jù)保存到35H/36HCLRP1.4RET;寫DS18B20的子程序(有具體的時序要求)WRITE_1820:MOVR2,#8;一共8位數(shù)據(jù)CLRCWR1:CLRP2.2MOVR3,#5DJNZR3,$RRCAMOVP2.2,CMOVR3,#21DJNZR3,$SETBP2.2NOPDJNZR2,WR1SETBP2.2RET;讀DS18B20的程序,從DS18B20中讀出兩個字節(jié)的溫度數(shù)據(jù)READ_18200:MOVR4,#2;將溫度高位和低位從DS18B20中讀出MOVR1,#29H;低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)RE00:MOVR2,#8;數(shù)據(jù)一共有8位RE01:CLRCSETBP2.2NOPNOPCLRP2.2NOPNOPNOPSETBP2.2MOVR3,#8RE10:DJNZR3,RE10MOVC,P2.2MOVR3,#21RE20:DJNZR3,RE20RRCADJNZR2,RE01MOV@R1,ADECR1DJNZR4,RE00RET;顯示子程序display:mova,29H;將29H中的十六進制數(shù)轉(zhuǎn)換成10進制movb,#10;10進制/10=10進制divabmovb_bit,a;十位在amova_bit,b;個位在bmovdptr,#numtab;指定查表啟始地址movr0,#4dpl1:movr1,#250;顯示1000次dplop:mova,a_bit;取個位數(shù)MOVCA,@A+DPTR;查個位數(shù)的7段代碼movp0,a;送出個位的7段代碼clrp2.7;開個位顯示acalld1ms;顯示1mssetbp2.7mova,b_bit;取十位數(shù)MOVCA,@A+DPTR;查十位數(shù)的7段代碼movp0,a;送出十位的7段代碼clrp2.6;開十位顯示acalld1ms;顯示1mssetbp2.6djnzr1,dplop;100次沒完循環(huán)djnzr0,dpl1;4個100次沒完循環(huán)ret;1MS延時D1MS:MOVR7,#80DJNZR7,$RET;實驗板上的7段數(shù)碼管0~9數(shù)字的共陰顯示代碼numtab:DB0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBHend;溫度傳感器18B20匯編程序,采用器件默認的12位轉(zhuǎn)化,最大轉(zhuǎn)化時間750微秒;將溫度數(shù)據(jù)通過串口發(fā)送出去,波特率2400;本程序?qū)锳T89C51實驗開發(fā)板編寫.適合12晶振;本程序經(jīng)過驗證,可以顯示溫度+/-和兩位整數(shù)溫度和兩位小數(shù)溫度數(shù)據(jù)DOTEQU30HZHENGSHUEQU31HFLAG1EQU38H;是否檢測到DS18B20的標志位;定義溫度數(shù)據(jù)DIS_1EQU32H;符號DIS_2EQU33H;十位DIS_3EQU34H;個位DIS_4EQU35H;小數(shù)點后第一位DIS_5EQU36H;小數(shù)點后第二位WDDATABITP2.2;定義DS18B20的數(shù)據(jù)腳為P2.2端口ORG0000H;以下為主程序進行CPU中斷方式設(shè)置CLREA;關(guān)閉總中斷MOVSCON,#50H;設(shè)置成串口1方式MOVTMOD,#20H;波特率發(fā)生器T1工作在模式2上MOVTH1,#0F3H;預置初值(按照波特率2400BPS預置初值)MOVTL1,#0F3H;預置初值(按照波特率2400BPS預置初值)SETBTR1;啟動定時器T1;以上完成串口2400通訊初始化設(shè)置;-------------------------;主程序;-------------------------MAIN:LCALLINIT_1820;調(diào)用復位DS18B20子程序MAIN1:LCALLGET_TEMPER;調(diào)用讀溫度子程序LCALLFORMULA;通過公式計算,小數(shù)點后顯示兩位LCALLBCDLCALLDISPLAY;調(diào)用串口顯示子程序LCALLDELAY500;延時0.5秒LCALLDELAY500;延時0.5秒LCALLDELAY500;延時0.5秒AJMPMAIN1;-------------------------;DS18B20復位初始化程序;-------------------------INIT_1820:SETBWDDATANOPCLRWDDATA;主機發(fā)出延時540微秒的復位低脈沖MOVR0,#36LCALLDELAYSETBWDDATA;然后拉高數(shù)據(jù)線NOPNOPMOVR0,#36TSR2:JNBWDDATA,TSR3;等待DS18B20回應DJNZR0,TSR2LJMPTSR4;延時TSR3:SETBFLAG1;置標志位,表示DS1820存在LJMPTSR5TSR4:CLRFLAG1;清標志位,表示DS1820不存在LJMPTSR7TSR5:MOVR0,#06BHTSR6:DJNZR0,TSR6;復位成功!時序要求延時一段時間TSR7:SETBWDDATARET;-------------------;讀出轉(zhuǎn)換后的溫度值;-------------------GET_TEMPER:SETBWDDATA;定時入口LCALLINIT_1820;先復位DS18B20JBFLAG1,TSS2RET;判斷DS1820是否存在?若DS18B20不存在則返回TSS2:MOVA,#0CCH;跳過ROM匹配LCALLWRITE_1820MOVA,#44H;發(fā)出溫度轉(zhuǎn)換命令LCALLWRITE_1820MOVR0,#50;等待AD轉(zhuǎn)換結(jié)束,12位的話750微秒.LCALLDELAYLCALLINIT_1820;準備讀溫度前先復位MOVA,#0CCH;跳過ROM匹配LCALLWRITE_1820MOVA,#0BEH;發(fā)出讀溫度命令LCALLWRITE_1820LCALLREAD_18200;將讀出的九個字節(jié)數(shù)據(jù)保存到60H-68HRET;----------------------------------;寫DS18B20的子程序(有具體的時序要求);----------------------------------WRITE_1820:MOVR2,#8;一共8位數(shù)據(jù)CLRCWR1:CLRWDDATAMOVR3,#6DJNZR3,$RRCAMOVWDDATA,CMOVR3,#24DJNZR3,$SETBWDDATANOPDJNZR2,WR1SETBWDDATARET;--------------------------------------------------;讀DS18B20的程序,從DS18B20中讀出九個字節(jié)的數(shù)據(jù);--------------------------------------------------READ_18200:MOVR4,#9MOVR1,#60H;存入60H開始的九個單元RE00:MOVR2,#8RE01:CLRCSETBWDDATANOPNOPCLRWDDATANOPNOPNOPSETBWDDATAMOVR3,#09RE10:DJNZR3,RE10MOVC,WDDATAMOVR3,#23RE20:DJNZR3,RE20RRCADJNZR2,RE01MOV@R1,AINCR1DJNZR4,RE00RET;------------------------;溫度計算子程序;------------------------FORMULA:;按公式:T實際=(T整數(shù)-0.25)+(M每度-M剩余)/M每度;計算出實際溫度,整數(shù)部分和小數(shù)部分分別存于ZHENGSHU單元和DOT單元;將61H中的低4位移入60H中的高4位,得到溫度的整數(shù)部分,并存于ZHENGSHU單元MOV29H,61HMOVA,60HMOVC,48HRRCAMOVC,49HRRCAMOVC,4AHRRCAMOVC,4BHRRCAMOVZHENGSHU,A;(M每度-M剩余)/M每度,小數(shù)值存于A中MOVA,67hSUBBA,66hMOVB,#64HMULABMOVR4,BMOVR5,AMOVR7,67HLCALLDIV457MOVA,R3;再減去0.25,實際應用中減去25SUBBA,#19HMOVDOT,A;小數(shù)部分存于DOT中MOVA,ZHENGSHUSUBBA,#00H;整數(shù)部分減去來自小數(shù)部分的借位MOVZHENGSHU,AMOVC,4BHJNCZHENG;是否為負數(shù)CPLAINCAMOVDIS_1,#2DH;零度以下時,第一位顯示"-"號MOVZHENGSHU,AZHENG:MOVDIS_1,#2BH;零度以上時,第一位顯示"+"號RET;------------------------;雙字節(jié)除以單字節(jié)子程序;------------------------DIV457:CLRCMOVA,R4SUBBA,R7JCDV50SETBOV;商溢出RETDV50:MOVR6,#8;求平均值(R4R5/R7-→R3)DV51:MOVA,R5RLCAMOVR5,AMOVA,R4RLCAMOVR4,AMOVF0,CCLRCSUBBA,R7ANLC,/F0JCDV52MOVR4,ADV52:CPLCMOVA,R3RLCAMOVR3,ADJNZR
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年匯康醫(yī)藥考試題及答案
- 2025年無錫初中化學試題及答案
- 2025年再見了親人測試題及答案
- 2025年青州教師面試試題及答案
- 2025年焊工教育考試題及答案
- 2025年環(huán)保調(diào)研面試試題及答案
- 2025年東營化工焊工考試題及答案
- 2025年雕塑匠計劃考試題及答案
- 2025年檢驗面試題及答案
- 2025年融信裁員面試題及答案
- 《 鐵路施工期職業(yè)病危害防護標準》
- 【MOOC】跨文化交際入門-華中師范大學 中國大學慕課MOOC答案
- 綠色金融與ESG分析
- 2024年家電市場發(fā)展趨勢及2025年消費趨勢分析報告-GfK
- 2024年陜西省初中學業(yè)水平考試·數(shù)學
- 勞榮枝案件分析報告
- 火電廠汽機車間安全培訓
- 社區(qū)網(wǎng)格員消防安全培訓
- 剪刀式登高車安全技術(shù)交底
- 部編人教版小學4四年級《道德與法治》下冊全冊教案
- 新疆2022年中考數(shù)學試卷(含答案)
評論
0/150
提交評論