?? ds.asm
字號:
/*-------------------------------------------
項目名: 2006年畢業設計項目
程序名: 32*8點陣屏電子鐘--溫度讀取(嵌入匯編程序)
編寫人: 杜洋
初寫時間: 2005-12-15~2005-12-20
CPU說明: MCS-51(AT89S52) 12MHZ
接口說明: DS1302、DS18B20
信息說明: 程序為_DS有反回值在R7中,函數名為DS
修改日志:
NO.1-20051215 完成LED驅動、顯示切換、時鐘溫度讀取
NO.2-20051216 完成整點報時、填加注釋信息
NO.3-20051220 完成了調時、按鍵音等所以的功能(沒有鬧鐘)
-------------------------------------------*/
DSSP SEGMENT CODE ;程序段
PUBLIC DSS ;入口地址,跳轉到DL標號處執行匯編程序
RSEG DSSP ;程序段
IN EQU P1.6
FLAG1 EQU 19H ;DS18B20器件存在標志
TTL EQU 21H ;溫度讀出值(高位在TTL-1中,低位在TTL中)
;-------------------------------------------DS18B20讀數據程序(0~99度)
; 這是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
;------------------------------------------讀出轉換后的溫度值
DSS:
DS1820PRO:
;這里通過調用顯示子程序實現延時一段時間,等待AD轉換結束,12位的話750微秒
SETB IN
LCALL INIT_1820;先復位DS18B20
JB FLAG1,TSS2
jmp BCD33 ; 判斷DS1820是否存在?若DS18B20不存在則返回
TSS2:
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_1820
MOV A,#44H ; 發出溫度轉換命令
LCALL WRITE_1820
CALL DL1MS
SETB IN
LCALL INIT_1820;準備讀溫度前先復位
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ; 發出讀溫度命令
LCALL WRITE_1820
LCALL READ_18200; 將讀出的溫度數據保存到35H/36H
MOV A,TTL
MOV B,TTL-1
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 TTL,A
BCD33:
JB FLAG1,BCD44
mov R7,#0FFH
JMP TORET
BCD44:
MOV R7,TTL
TORET:
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,#TTL ; 低位存入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
DL1MS:
MOV R6,#255
DJNZ R6,$
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -