|
;--------- 下面是DS18B20測溫實驗源程序 ---------
ORG 0000H START: MOV SP,#60H ;開機初始化 MOV P0,#0FFH MOV P1,#0FEH MOV P2,#0FFH MOV P3,#0FFH
MAIN: LCALL GET_TEMPER ;調(diào)用讀溫度子程序 LCALL DISP ;調(diào)用數(shù)碼管顯示子程序 AJMP MAIN ;重復(fù)循環(huán) ;------ 讀DS18B20傳感器的溫度值 ------ GET_TEMPER: SETB P3.3 LCALL RST18B20 ;復(fù)位DS18B20 JB 00H,DSS2 RET DSS2: MOV A,#0CCH ;跳過ROM匹配 LCALL WR18B20 MOV A,#44H ;向DS18B20發(fā)出溫度轉(zhuǎn)換命令 LCALL WR18B20 LCALL RST18B20 ;準(zhǔn)備讀溫度前先復(fù)位DS18B20 MOV A,#0CCH ;跳過ROM匹配 LCALL WR18B20 MOV A,#0BEH ;向DS18B20發(fā)出讀溫度命令 LCALL WR18B20 LCALL RE18B20 ;讀出溫度數(shù)據(jù) RET ;------ DS18B20復(fù)位初始化程序 ------ RST18B20: SETB P3.3 NOP CLR P3.3 MOV R0,#06BH ;主機發(fā)出復(fù)位低脈沖 MOV R1,#03H DSR1: DJNZ R0,DSR1 MOV R0,#6BH DJNZ R1,DSR1 SETB P3.3 ;拉高數(shù)據(jù)線 NOP NOP NOP MOV R0,#25H DSR2: JNB P3.3,DSR3 ;等待DS18B20回應(yīng) DJNZ R0,DSR2 LJMP DSR4 DSR3: SETB 00H ;置標(biāo)志位,表示DS1820存在 LJMP DSR5 DSR4: CLR 00H ;清標(biāo)志位,表示DS1820不存在 LJMP DSR7 DSR5: MOV R0,#06BH DSR6: DJNZ R0,DSR6 ;延時一段時間 DSR7: SETB P3.3 RET ;------ 寫DS18B20的子程序 ------ WR18B20: MOV R2,#8 CLR C WR1: CLR P3.3 MOV R3,#6 DJNZ R3,$ RRC A MOV P3.3,C MOV R3,#23 DJNZ R3,$ SETB P3.3 NOP DJNZ R2,WR1 SETB P3.3 RET ;------ 從DS18B20中讀溫度數(shù)據(jù)程序 ------ RE18B20: MOV R4,#2 MOV R1,#2FH RE00: MOV R2,#8 RE01: CLR C SETB P3.3 NOP NOP CLR P3.3 NOP NOP NOP SETB P3.3 MOV R3,#09 RE10: DJNZ R3,RE10 MOV C,P3.3 MOV R3,#23 RE20: DJNZ R3,RE20 RRC A DJNZ R2,RE01 MOV @R1,A DEC R1 DJNZ R4,RE00 RET ;-------- 顯示子程序 -------- DISP: MOV A,2FH MOV C,70H RRC A MOV C,71H RRC A MOV C,72H RRC A MOV C,73H RRC A MOV 2FH,A MOV A,2FH MOV B,#10 DIV AB MOV 30H,A MOV 31H,B MOV A,30H MOV DPTR,#SGTB MOVC A,@A+DPTR MOV P0,A ;顯示溫度“十位”值 CLR P2.2 SETB P2.0 SETB P2.1 SETB P2.3 SETB P2.4 LCALL YS4722U MOV A,31H MOV DPTR,#SGTB MOVC A,@A+DPTR MOV P0,A ;顯示溫度“個位”值 CLR P2.3 SETB P2.0 SETB P2.1 SETB P2.2 SETB P2.4 LCALL YS4722U MOV A,#01000110B MOV P0,A ;顯示溫度符號“ ℃” CLR P2.4 SETB P2.0 SETB P2.1 SETB P2.2 SETB P2.3 LCALL YS4722U RET
;************* 8位共陽數(shù)碼管顯示器字型碼表 ***************** SGTB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,89H,0A3H,8CH,0C8H YS4722U: MOV R4,#10 ;延時子程序 Y3: MOV R5,#216 DJNZ R5,$ DJNZ R4,Y3 RET END
|