?? wendu.asm
字號:
FLAG1 BIT F0 ;DS18B20存在標志位
DQ BIT P2.2
TEMPER_L EQU 29H
TEMPER_H EQU 28H
A_BIT EQU 35H
B_BIT EQU 36H
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: LCALL INIT_18B20
;LCALL RE_CONFIG
LCALL GET_TEMPER
AJMP CHANGE
;**********DS18B20復位*************
INIT_18B20: SETB DQ
NOP
CLR DQ
MOV R0,#0FBH
TSR1: DJNZ R0,TSR1 ;延時
SETB DQ
MOV R0,#25H
TSR2: JNB DQ ,TSR3
DJNZ R0,TSR2
TSR3: SETB FLAG1 ;置標志位,表明DS18B20存在
CLR P1.2 ;二極管指示
AJMP TSR5
TSR4: CLR FLAG1
LJMP TSR7
TSR5: MOV R0,#06BH
TSR6: DJNZ R0,TSR6
TSR7: SETB DQ ;表明不存在
RET
;*****************讀轉換后的溫度值****************
GET_TEMPER:
SETB DQ
LCALL INIT_18B20
JB FLAG1,TSS2
RET ;若不存在則返回
TSS2: MOV A,#0CCH ;跳過ROM
LCALL WRITE_18B20
MOV A,#44H ;發出溫度轉換命令
LCALL WRITE_18B20
LCALL DISPLAY
LCALL INIT_18B20
MOV A,#0CCH ;跳過ROM
LCALL WRITE_18B20
MOV A,#0BEH ;發出讀溫度換命令
LCALL WRITE_18B20
LCALL READ2_18B20 ;讀兩個字節的溫度
RET
;***************寫ds18b20匯編程序************
WRITE_18B20: MOV R2,#8
CLR C
WR1: CLR DQ
MOV R3,#6
DJNZ R3,$
RRC A
MOV DQ,C
MOV R3,#23
DJNZ R3,$
SETB DQ
NOP
DJNZ R2,WR1
SETB DQ
RET
;***********讀18B20程序,讀出兩個字節的溫度*********
READ2_18B20:
MOV R4,#2 ;低位存在29 H,高位存在28H
MOV R1,#29H
RE00: MOV R2,#8
RE01: CLR C
SETB C
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#7
DJNZ R3,$
MOV C,DQ
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
;************讀出的溫度進行數據轉換**************
CHANGE: MOV A,29H
MOV C,28H.0 ;將28H中的最低位移入C
RRC A
MOV C,28H.1
RRC A
MOV C,28H.2
RRC A
MOV C,28H.3
RRC A
MOV 29H,A
setb p1.2
LCALL DISPLAY ;調用數碼管顯示子程序
setb P1.2
LJMP MAIN
DISPLAY: mov a,29H;將29H中的十六進制數轉換成10進制
mov b,#10 ;10進制/10=10進制
div ab
mov b_bit,a ;十位在a
mov a_bit,b ;個位在b
mov dptr,#TAB ;指定查表啟始地址
mov r0,#4
dpl1: mov r1,#250 ;顯示1000次
dplop: mov a,a_bit ;取個位數
MOVC A,@A+DPTR ;查個位數的7段代碼
mov p0,a ;送出個位的7段代碼
clr p2.6;開個位顯示
acall d1ms ;顯示1ms
setb p2.6
mov a,b_bit ;取十位數
MOVC A,@A+DPTR ;查十位數的7段代碼
mov p0,a ;送出十位的7段代碼
clr p2.7;開十位顯示
acall d1ms ;顯示1ms
setb p2.7
djnz r1,dplop ;100次沒完循環
djnz r0,dpl1 ;4個100次沒完循環
ret
;***********************************
D1MS: MOV R7,#70 ;1MS延時
DJNZ R7,$
RET
;*************************
TAB: DB 03FH,06H,5BH,4FH,66H,06DH,07DH,07H,07EH,06FH
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -