下載手機(jī)汽配人

求溫度傳感器DS18b20與單片機(jī)at89c51連接,匯編程序?

要匯編程序
提問者:網(wǎng)友 2017-05-18
最佳回答
TEMPER_L EQU 36H ;存放讀出溫度低位數(shù)據(jù)TEMPER_H EQU 35H ;存放讀出溫度高位數(shù)據(jù)TEMPER_NUM EQU 60H ;存放轉(zhuǎn)換后的溫度值FLAG1 BIT 00HDQ BIT P3.3 ;一線總線控制端口ORG 0000HLJMP MAINORG 0100HMAIN:MOV SP,#70HLCALL GET_TEMPER ;從DS18B20讀出溫度數(shù)據(jù)LCALL TEMPER_COV ;轉(zhuǎn)換讀出的溫度數(shù)據(jù)并保存SJMP $ ;完成一次數(shù)字溫度采集;-------讀出轉(zhuǎn)換后的溫度值GET_TEMPER:SETB DQ ; 定時入口BCD: LCALL INIT_1820JB FLAG1,S22LJMP BCD ; 若DS18B20不存在則返回S22: LCALL DELAY1MOV A,#0CCH ; 跳過ROM匹配------0CCLCALL WRITE_1820MOV A,#44H ; 發(fā)出溫度轉(zhuǎn)換命令LCALL WRITE_1820NOPLCALL DELAYLCALL DELAYCBA: LCALL INIT_1820JB FLAG1,ABCLJMP CBAABC: LCALL DELAY1MOV A,#0CCH ; 跳過ROM匹配LCALL WRITE_1820MOV A,#0BEH ; 發(fā)出讀溫度命令LCALL WRITE_1820LCALL READ_18200 ;READ_1820RET;-------讀DS18B20的程序,從DS18B20中讀出一個字節(jié)的數(shù)據(jù)READ_1820:MOV R2,#8RE1: CLR CSETB DQNOPNOPCLR DQNOPNOPNOPSETB DQMOV R3,#7DJNZ R3,$MOV C,DQMOV R3,#23DJNZ R3,$RRC ADJNZ R2,RE1RET;-------寫DS18B20的程序WRITE_1820:MOV R2,#8CLR CWR1: CLR DQMOV R3,#6DJNZ R3,$RRC AMOV DQ,CMOV R3,#23DJNZ R3,$SETB DQNOPDJNZ R2,WR1SETB DQRET;-------讀DS18B20的程序,從DS18B20中讀出兩個字節(jié)的溫度數(shù)據(jù)READ_18200:MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出MOV R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)RE00: MOV R2,#8RE01: CLR CSETB DQNOPNOPCLR DQNOPNOPNOPSETB DQMOV R3,#7DJNZ R3,$MOV C,DQMOV R3,#23DJNZ R3,$RRC ADJNZ R2,RE01MOV @R1,ADEC R1DJNZ R4,RE00RET;-------將從DS18B20中讀出的溫度數(shù)據(jù)進(jìn)行轉(zhuǎn)換TEMPER_COV:MOV A,#0F0HANL A,TEMPER_L ; 舍去溫度低位中小數(shù)點后的四位溫度數(shù)值SWAP AMOV TEMPER_NUM,AMOV A,TEMPER_LJNB ACC.3,TEMPER_COV1 ; 四舍五入去溫度值INC TEMPER_NUMTEMPER_COV1:MOV A,TEMPER_HANL A,#07HSWAP AADD A,TEMPER_NUMMOV TEMPER_NUM,A ; 保存變換后的溫度數(shù)據(jù)LCALL BIN_BCDRET;-------將16進(jìn)制的溫度數(shù)據(jù)轉(zhuǎn)換成壓縮BCD碼BIN_BCD:MOV DPTR,#TEMP_TABMOV A,TEMPER_NUMMOVC A,@A+DPTRMOV TEMPER_NUM,ARETTEMP_TAB:DB 00H,01H,02H,03H,04H,05H,06H,07HDB 08H,09H,10H,11H,12H,13H,14H,15HDB 16H,17H,18H,19H,20H,21H,22H,23HDB 24H,25H,26H,27H,28H,29H,30H,31HDB 32H,33H,34H,35H,36H,37H,38H,39HDB 40H,41H,42H,43H,44H,45H,46H,47HDB 48H,49H,50H,51H,52H,53H,54H,55HDB 56H,57H,58H,59H,60H,61H,62H,63HDB 64H,65H,66H,67H,68H,69H,70H,71HDB 72H,73H,74H,75H,76H,77H,78H,79HDB 80H,81H,82H,83H,84H,85H,86H,87HDB 88H,89H,90H,91H,92H,93H,94H,95HDB 96H,97H,98H,99H;-------DS18B20初始化程序INIT_1820:SETB DQNOPCLR DQMOV R0,#80HTSR1: DJNZ R0,TSR1 ; 延時SETB DQMOV R0,#25H ;96US-25HTSR2: DJNZ R0,TSR2JNB DQ,TSR3LJMP TSR4 ; 延時TSR3: SETB FLAG1 ; 置標(biāo)志位,表示DS1820存在LJMP TSR5TSR4: CLR FLAG1 ; 清標(biāo)志位,表示DS1820不存在LJMP TSR7TSR5: MOV R0,#06BH ;200USTSR6: DJNZ R0,TSR6 ; 延時TSR7: SETB DQRET;-------重新寫DS18B20暫存存儲器設(shè)定值RE_CONFIG:JB FLAG1,RE_CONFIG1 ; 若DS18B20存在,轉(zhuǎn)RE_CONFIG1RETRE_CONFIG1:MOV A,#0CCH ; 發(fā)SKIP ROM命令LCALL WRITE_1820MOV A,#4EH ; 發(fā)寫暫存存儲器命令LCALL WRITE_1820MOV A,#00H ; TH(報警上限)中寫入00HLCALL WRITE_1820MOV A,#00H ; TL(報警下限)中寫入00HLCALL WRITE_1820MOV A,#7FH ; 選擇12位溫度分辨率LCALL WRITE_1820RET;------------------延時子程序DELAY:MOV R7,#00HMIN: DJNZ R7,YS500RETYS500: LCALL YS500USLJMP MINYS500US:MOV R6,#00HDJNZ R6,$RETDELAY1: MOV R7,#20HDJNZ R7,$RETEND
回答者:網(wǎng)友
產(chǎn)品精選
搜索問答
還沒有汽配人賬號?立即注冊

我要提問

汽配限時折扣

本頁是網(wǎng)友提供的關(guān)于“求溫度傳感器DS18b20與單片機(jī)at89c51連接,匯編程序?”的解答,僅供您參考,汽配人網(wǎng)不保證該解答的準(zhǔn)確性。