?? main.asm
字號:
MAINP SEGMENT CODE ;程序段
PUBLIC MAIN ;入口地址,跳轉到DL標號處執行匯編程序
RSEG MAINP ;程序段
;這是關于DS18B20的讀寫程序,數據腳IN,晶振12MHZ
;溫度傳感器18B20匯編程序,采用器件默認的12位轉化,最大轉化時間750微秒
;可以將檢測到的溫度直接顯示到AT89C51開發實驗板的兩個數碼管上
;顯示溫度00到99度,很準確哦~~無需校正!
;單片機內存分配申明!
TEMPER_L EQU 29H;用于保存讀出溫度的低8位
TEMPER_H EQU 28H;用于保存讀出溫度的高8位
in equ P3.3
MAIN:
LCALL GET_TEMPER;調用讀溫度子程序
;進行溫度顯示,這里我們考慮用網站提供的兩位數碼管來顯示溫度
;顯示范圍00到99度,顯示精度為1度
;因為12位轉化時每一位的精度為0.0625度,我們不要求顯示小數所以可以拋棄29H的低4位
;將28H中的低4位移入29H中的高4位,這樣獲得一個新字節,這個字節就是實際測量獲得的溫度
;這個轉化溫度的方法可是我想出來的哦~~非常簡潔無需乘于0.0625系數
MOV A,29H
MOV B,28H
MOV C,B.0;將28H中的最低位移入C
RRC A
MOV C,B.1
RRC A
MOV C,B.2
RRC A
MOV C,B.3
RRC A
MOV 29H,A
RET
; 這是DS18B20復位初始化子程序
INIT_1820:
SETB IN
NOP
CLR IN
;主機發出延時537微秒的復位低脈沖
MOV R1,#3
TSR1:MOV R0,#107
DJNZ R0,$
DJNZ R1,TSR1
SETB IN;然后拉高數據線
NOP
NOP
NOP
MOV R0,#25H
TSR2:
JNB IN,TSR3;等待DS18B20回應
DJNZ R0,TSR2
LJMP TSR4 ; 延時
TSR3:
;SETB FLAG1 ; 置標志位,表示DS1820存在
LJMP TSR5
TSR4:
;CLR FLAG1 ; 清標志位,表示DS1820不存在
LJMP TSR7
TSR5:
MOV R0,#117
TSR6:
DJNZ R0,TSR6 ; 時序要求延時一段時間
TSR7:
SETB IN
RET
; 讀出轉換后的溫度值
GET_TEMPER:
SETB IN
LCALL INIT_1820;先復位DS18B20
;JB FLAG1,TSS2
;CLR P1.2
;RET ; 判斷DS1820是否存在?若DS18B20不存在則返回
TSS2:
;CLR P1.3;DS18B20已經被檢測到!!!!!!!!!!!!!!!!!!
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_1820
MOV A,#44H ; 發出溫度轉換命令
LCALL WRITE_1820
;這里通過調用顯示子程序實現延時一段時間,等待AD轉換結束,12位的話750微秒
;LCALL D1MS;DISPLAY
LCALL INIT_1820;準備讀溫度前先復位
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ; 發出讀溫度命令
LCALL WRITE_1820
LCALL READ_18200; 將讀出的溫度數據保存到35H/36H
RET
;寫DS18B20的子程序(有具體的時序要求)
WRITE_1820:
MOV R2,#8;一共8位數據
CLR C
WR1:
CLR IN
MOV R3,#6
DJNZ R3,$
RRC A
MOV IN,C
MOV R3,#23
DJNZ R3,$
SETB IN
NOP
DJNZ R2,WR1
SETB IN
RET
; 讀DS18B20的程序,從DS18B20中讀出兩個字節的溫度數據
READ_18200:
MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)
RE00:
MOV R2,#8;數據一共有8位
RE01:
CLR C
SETB IN
NOP
NOP
CLR IN
NOP
NOP
NOP
SETB IN
MOV R3,#9
RE10:
DJNZ R3,RE10
MOV C,IN
MOV R3,#23
RE20:
DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -