版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、;這是關(guān)于DS18B20的讀寫程序,數(shù)據(jù)腳P2.2,;溫度傳感器18B20匯編程序,采用器件默認(rèn)的12位轉(zhuǎn)化,最大轉(zhuǎn)化時間750微秒;可以將檢測到的溫度直接顯示到AT89C51開發(fā)實驗板的兩個數(shù)碼管上;顯示溫度00到99度,很準(zhǔn)確哦無需校正!ORG 0000H;單片機內(nèi)存分配申明!TEMPER_L EQU 29H;用于保存讀出溫度的低8位TEMPER_H EQU 28H;用于保存讀出溫度的高8位FLAG1 EQU 38H;是否檢測到DS18B20標(biāo)志位a_bit equ 20h ;數(shù)碼管個位數(shù)存放內(nèi)存位置b_bit equ 21h ;數(shù)碼管十位數(shù)存放內(nèi)存位置MAIN: LCALL GET_TE
2、MPER;調(diào)用讀溫度子程序MOV A,29HMOV C,40H;將28H中的最低位移入CRRC AMOV C,41HRRC AMOV C,42HRRC AMOV C,43HRRC AMOV 29H,ALCALL DISPLAY;調(diào)用數(shù)碼管顯示子程序CPL P1.0AJMP MAIN; 這是DS18B20復(fù)位初始化子程序INIT_1820:SETB P2.2NOPCLR P2.2;主機發(fā)出延時537微秒的復(fù)位低脈沖MOV R1,#3TSR1:MOV R0,#107DJNZ R0,$DJNZ R1,TSR1SETB P2.2;然后拉高數(shù)據(jù)線NOPNOPNOPMOV R0,#25HTSR2:JNB
3、P2.2,TSR3;等待DS18B20回應(yīng)DJNZ R0,TSR2LJMP TSR4 ; 延時TSR3:SETB FLAG1 ; 置標(biāo)志位,表示DS1820存在CLR P1.7;檢查到DS18B20就點亮P1.7LEDLJMP TSR5TSR4:CLR FLAG1 ; 清標(biāo)志位,表示DS1820不存在CLR P1.1LJMP TSR7TSR5:MOV R0,#117TSR6:DJNZ R0,TSR6 ; 時序要求延時一段時間TSR7:SETB P2.2RET; 讀出轉(zhuǎn)換后的溫度值GET_TEMPER:SETB P2.2LCALL INIT_1820;先復(fù)位DS18B20JB FLAG1,TSS
4、2CLR P1.2RET ; 判斷DS1820是否存在?若DS18B20不存在則返回TSS2:CLR P1.3;DS18B20已經(jīng)被檢測到!MOV A,#0CCH ; 跳過ROM匹配LCALL WRITE_1820MOV A,#44H ; 發(fā)出溫度轉(zhuǎn)換命令LCALL WRITE_1820;這里通過調(diào)用顯示子程序?qū)崿F(xiàn)延時一段時間,等待AD轉(zhuǎn)換結(jié)束,12位的話750微秒LCALL DISPLAYLCALL INIT_1820;準(zhǔn)備讀溫度前先復(fù)位MOV A,#0CCH ; 跳過ROM匹配LCALL WRITE_1820MOV A,#0BEH ; 發(fā)出讀溫度命令LCALL WRITE_1820RET;
5、寫DS18B20的子程序(有具體的時序要求)WRITE_1820:MOV R2,#8;一共8位數(shù)據(jù)CLR CWR1:CLR P2.2MOV R3,#5DJNZ R3,$RRC AMOV P2.2,CMOV R3,#21DJNZ R3,$SETB P2.2NOPDJNZ R2,WR1SETB P2.2RETMOV R3,#8RE10: DJNZ R3,RE10MOV R3,#21RE20: DJNZ R3,RE20RRC ADJNZ R2,RE01MOV R1,ADEC R1DJNZ R4,RE00RET;顯示子程序display: mov a,29H;將29H中的十六進(jìn)制數(shù)轉(zhuǎn)換成10進(jìn)制 mo
6、v b,#10 ;10進(jìn)制/10=10進(jìn)制div abmov b_bit,a ;十位在amov a_bit,b ;個位在bmov dptr,#numtab ;指定查表啟始地址mov r0,#4 dpl1: mov r1,#250 ;顯示1000次dplop: mov a,a_bit ;取個位數(shù)MOVC A,A+DPTR ;查個位數(shù)的7段代碼mov p0,a ;送出個位的7段代碼clr p2.7 ;開個位顯示acall d1ms ;顯示1mssetb p2.7mov a,b_bit ;取十位數(shù)MOVC A,A+DPTR ;查十位數(shù)的7段代碼mov p0,a ;送出十位的7段代碼clr p2.6
7、;開十位顯示acall d1ms ;顯示1mssetb p2.6djnz r1,dplop ;100次沒完循環(huán)djnz r0,dpl1 ;4個100次沒完循環(huán)ret;1MS延時D1MS: MOV R7,#80 DJNZ R7,$RET;實驗板上的7段數(shù)碼管09數(shù)字的共陰顯示代碼numtab: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBHend;溫度傳感器18B20匯編程序,采用器件默認(rèn)的12位轉(zhuǎn)化,最大轉(zhuǎn)化時間750微秒;將溫度數(shù)據(jù)通過串口發(fā)送出去,波特率2400;本程序?qū)锳T89C51實驗開發(fā)板編寫.適合12晶振;本程序經(jīng)過驗證,可以顯示溫
8、度+/-和兩位整數(shù)溫度和兩位小數(shù)溫度數(shù)據(jù)DOT EQU 30HZHENGSHU EQU 31HFLAG1 EQU 38H ;是否檢測到DS18B20的標(biāo)志位;定義溫度數(shù)據(jù)DIS_1 EQU 32H ;符號DIS_2 EQU 33H ;十位DIS_3 EQU 34H ;個位DIS_4 EQU 35H ;小數(shù)點后第一位DIS_5 EQU 36H ;小數(shù)點后第二位WDDATA BIT P2.2 ;定義DS18B20的數(shù)據(jù)腳為P2.2端口 ORG 0000H;以下為主程序進(jìn)行CPU中斷方式設(shè)置CLR EA ;關(guān)閉總中斷MOV SCON,#50H ;設(shè)置成串口1方式MOV TMOD,#20H ;波特率發(fā)
9、生器T1工作在模式2上MOV TH1,#0F3H ;預(yù)置初值(按照波特率2400BPS預(yù)置初值)MOV TL1,#0F3H ;預(yù)置初值(按照波特率2400BPS預(yù)置初值)SETB TR1 ;啟動定時器T1;以上完成串口2400通訊初始化設(shè)置;-; 主程序;-MAIN:LCALL INIT_1820 ;調(diào)用復(fù)位DS18B20子程序MAIN1:LCALL GET_TEMPER;調(diào)用讀溫度子程序LCALL FORMULA ;通過公式計算,小數(shù)點后顯示兩位LCALL BCDLCALL DISPLAY ;調(diào)用串口顯示子程序LCALL DELAY500 ;延時0.5秒LCALL DELAY500 ;延時0
10、.5秒LCALL DELAY500 ;延時0.5秒AJMP MAIN1;-; DS18B20復(fù)位初始化程序;-INIT_1820:SETB WDDATANOPCLR WDDATA;主機發(fā)出延時540微秒的復(fù)位低脈沖MOV R0,#36LCALL DELAYSETB WDDATA;然后拉高數(shù)據(jù)線NOPNOPMOV R0,#36TSR2:JNB WDDATA,TSR3;等待DS18B20回應(yīng)DJNZ R0,TSR2LJMP TSR4 ; 延時TSR3:SETB FLAG1 ; 置標(biāo)志位,表示DS1820存在LJMP TSR5TSR4:CLR FLAG1 ; 清標(biāo)志位,表示DS1820不存在LJMP
11、 TSR7TSR5:MOV R0,#06BHTSR6:DJNZ R0,TSR6 ;復(fù)位成功!時序要求延時一段時間TSR7:SETB WDDATARET;-; 讀出轉(zhuǎn)換后的溫度值;-GET_TEMPER:SETB WDDATA ; 定時入口LCALL INIT_1820 ;先復(fù)位DS18B20JB FLAG1,TSS2RET ; 判斷DS1820是否存在?若DS18B20不存在則返回TSS2:MOV A,#0CCH ; 跳過ROM匹配LCALL WRITE_1820MOV A,#44H ; 發(fā)出溫度轉(zhuǎn)換命令LCALL WRITE_1820MOV R0,#50 ;等待AD轉(zhuǎn)換結(jié)束,12位的話750
12、微秒.LCALL DELAYLCALL INIT_1820 ;準(zhǔn)備讀溫度前先復(fù)位MOV A,#0CCH ; 跳過ROM匹配LCALL WRITE_1820MOV A,#0BEH ; 發(fā)出讀溫度命令LCALL WRITE_1820LCALL READ_18200; 將讀出的九個字節(jié)數(shù)據(jù)保存到60H-68HRET;-;寫DS18B20的子程序(有具體的時序要求);-WRITE_1820:MOV R2,#8 ;一共8位數(shù)據(jù)CLR C WR1:CLR WDDATAMOV R3,#6DJNZ R3,$RRC AMOV WDDATA,CMOV R3,#24DJNZ R3,$SETB WDDATANOPDJ
13、NZ R2,WR1SETB WDDATARET;-; 讀DS18B20的程序,從DS18B20中讀出九個字節(jié)的數(shù)據(jù);-READ_18200:MOV R4,#9MOV R1,#60H ; 存入60H開始的九個單元RE00:MOV R2,#8RE01:CLR CSETB WDDATANOPNOPCLR WDDATANOPNOPNOPSETB WDDATAMOV R3,#09RE10:DJNZ R3,RE10MOV C,WDDATAMOV R3,#23RE20:DJNZ R3,RE20RRC ADJNZ R2,RE01MOV R1,AINC R1DJNZ R4,RE00RET;-;溫度計算子程序;-
14、FORMULA: ; 按公式:T實際=(T整數(shù)-0.25)+( M每度-M剩余)/ M每度;計算出實際溫度,整數(shù)部分和小數(shù)部分分別存于ZHENGSHU單元和DOT單元;將61H中的低4位移入60H中的高4位,得到溫度的整數(shù)部分,并存于ZHENGSHU單元MOV 29H,61HMOV A,60HMOV C,48HRRC AMOV C,49HRRC AMOV C,4AHRRC AMOV C,4BHRRC AMOV ZHENGSHU,A; ( M每度-M剩余)/ M每度,小數(shù)值存于A中MOV A,67hSUBB A,66hMOV B,#64HMUL ABMOV R4,BMOV R5,AMOV R7,
15、67HLCALL DIV457MOV A,R3;再減去0.25,實際應(yīng)用中減去25SUBB A,#19HMOV DOT,A ;小數(shù)部分存于DOT中MOV A,ZHENGSHUSUBB A,#00H ;整數(shù)部分減去來自小數(shù)部分的借位MOV ZHENGSHU,AMOV C,4BHJNC ZHENG ;是否為負(fù)數(shù)CPL AINC AMOV DIS_1,#2DH ; 零度以下時,第一位顯示-號MOV ZHENGSHU,AZHENG:MOV DIS_1,#2BH ; 零度以上時,第一位顯示+號RET;-;雙字節(jié)除以單字節(jié)子程序;-DIV457: CLR CMOV A,R4SUBB A,R7JC DV50
16、SETB OV ;商溢出RETDV50: MOV R6,#8 ;求平均值(R4R5R7R3)DV51: MOV A,R5RLC AMOV R5,AMOV A,R4RLC AMOV R4,AMOV F0,CCLR CSUBB A,R7ANL C,/F0JC DV52MOV R4,ADV52: CPL CMOV A,R3RLC AMOV R3,ADJNZ R6,DV51MOV A,R4 ;四舍五入ADD A,R4JC DV53SUBB A,R7JC DV54DV53: INC R3DV54: CLR OVRET;-;轉(zhuǎn)換成非壓縮的BCD碼;-BCD: MOV A,ZHENGSHUMOV B,#0A
17、HDIV ABORL A,#00110000B ;轉(zhuǎn)換成ASCII碼MOV DIS_2,AMOV DIS_3,BMOV A,DIS_3ORL A,#00110000B ;轉(zhuǎn)換成ASCII碼mov DIS_3,AMOV A,DOTMOV B,#0AHDIV ABORL A,#00110000B ;轉(zhuǎn)換成ASCII碼MOV DIS_4,AMOV DIS_5,BMOV A,DIS_5ORL A,#00110000B ;轉(zhuǎn)換成ASCII碼mov DIS_5,ARET;-;串口顯示數(shù)據(jù)子程序;-DISPLAY:CLR TIMOV A,DIS_1MOV SBUF,AJNB TI,$ ;發(fā)送給PC,通過串口
18、調(diào)試助手顯示+/-CLR TIMOV A,DIS_2MOV SBUF,AJNB TI,$ ;發(fā)送給PC,通過串口調(diào)試助手顯示整數(shù)第一位CLR TIMOV A,DIS_3MOV SBUF,AJNB TI,$ ;發(fā)送給PC,通過串口調(diào)試助手顯示整數(shù)第二位CLR TIMOV A,#2EHMOV SBUF,AJNB TI,$ ;發(fā)送給PC,通過串口調(diào)試助手顯示小數(shù)點CLR TIMOV A,DIS_4MOV SBUF,AJNB TI,$ ;發(fā)送給PC,通過串口調(diào)試助手顯示小數(shù)第一位CLR TIMOV A,DIS_5MOV SBUF,AJNB TI,$ ;發(fā)送給PC,通過串口調(diào)試助手顯示小數(shù)第一位CLR TIMOV A,#0DH;換行MOV SBUF,AJNB TI,$ ;發(fā)送給PC,通過串口調(diào)試助手顯示CLR TIMOV A,#0AH;換行MOV SBUF,AJN
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧工業(yè)大學(xué)《測量學(xué)2》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江省金華市2024年中考數(shù)學(xué)模擬考試試卷含答案
- 喀什大學(xué)《幼兒園教師職業(yè)道德》2023-2024學(xué)年第一學(xué)期期末試卷
- 江蘇警官學(xué)院《電子商務(wù)數(shù)據(jù)分析與應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 吉安幼兒師范高等??茖W(xué)校《建筑攝影初步》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南理工學(xué)院《線天線與面天線》2023-2024學(xué)年第一學(xué)期期末試卷
- 高考物理模擬測試題(有答案)
- 重慶外語外事學(xué)院《軟件測試與質(zhì)量保證》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶電子工程職業(yè)學(xué)院《地理研究方法與寫作》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江建設(shè)職業(yè)技術(shù)學(xué)院《鄉(xiāng)土文化與鄉(xiāng)村教育》2023-2024學(xué)年第一學(xué)期期末試卷
- 自來水維修員年度工作總結(jié)
- 國際海上避碰規(guī)則(中英版)課件
- 導(dǎo)電銅漿及其制備方法、應(yīng)用與流程
- 批量訂購車輛合同范本
- 鋼鐵生產(chǎn)企業(yè)溫室氣體核算與報告案例
- 農(nóng)業(yè)合作社全套報表(已設(shè)公式)-資產(chǎn)負(fù)債表-盈余及盈余分配表-成員權(quán)益變動表-現(xiàn)金流量表
- 貝利嬰幼兒發(fā)展量表BSID
- 人教部編版八年級歷史下冊第7課 偉大的歷史轉(zhuǎn)折課件(共25張PPT)
- SB/T 10863-2012家用電冰箱維修服務(wù)技術(shù)規(guī)范
- 偏癱患者的臨床護(hù)理及康復(fù)評估課件
- 檢驗科危急值項目范圍考核試題與答案
評論
0/150
提交評論