?? ds1620b.asm
字號:
;****************************************************************
;/* 這是被CALL20B.C調用的DS1620匯編語言程序,文件名為DS1620B.ASM */
;/* 功能:本程序主要是讀出DS1620芯片轉換后的溫度值,并把它放在 */
;/* 寄存器R1,R2中,R2中放高8位。注意,這兩個8 位共16位中,只 */
;/* 有低9位有效。這里測溫范圍是-55℃~125℃。 */
;/* 本程序是被調用的匯編語言程序,由外部傳遞進來的參數在R7中,*/
;/* 是字符型的,在程序中未用;返回的參數是整形的,放在寄存器 */
;/* R6,R7中,R6中放高8位。 */
;******************************************************************
DQ BIT P1.0
CLK BIT P1.1
RST BIT P1.2
NAME DS1620
?PR?_a_func?DS1620 SEGMENT CODE
?DT?_a_func?DS1620 SEGMENT DATA OVERLAYABLE
?DT?DS1620 SEGMENT DATA
PUBLIC chai
PUBLIC ?_a_func?BYTE
PUBLIC _a_func
RSEG ?DT?_a_func?DS1620
?_a_func?BYTE:
aa:DS 1
RSEG ?DT?DS1620
chai:DS 2
RSEG ?PR?_a_func?DS1620
_a_func:
MOV aa,R7 ;R7中放傳遞進來的字符型參數
LCALL CONFIGURE ;寫DS1620配置寄存器設定值
LCALL STARTCONVERT ;使DS1620 開始轉換溫度
LCALL READTEMPERATURE ;讀出轉換后的溫度值
MOV A,R1
MOV R7,A
MOV A,R2
MOV R6,A ;R6,R7中放返回溫度值,R6中放高位
RET
WRITE1620: ; 寫DS1620
MOV R0,#08H ; 每次寫入8B
ITWRITE:
CLR CLK ; 時鐘脈沖置零
RRC A ; 右移A , 使最低位移入進位位C 中
MOV DQ ,C ; 輸出1B (即C) 到DQ
SETB CLK ; 產生時鐘脈沖的上升沿
DJNZ R0,ITWRITE
RET
READ1620: ; 讀DS1620
MOV R0, #08H ; 每次讀出8B
SETB DQ ; 置DQ為1, 使其做為輸入端
ITREAD:
CLR CLK ; 時鐘脈沖置零
MOV C,DQ ; 將DQ 來的1 B 移入C
SETB CLK ; 產生時鐘脈沖的上升沿
RRC A ; 右移A ,使進位C 移入A 中的最高位
DJNZ R0,ITREAD
CLR DQ
RET
CONFIGURE: ; DS1620寫配置,入回參數為配置寄存器新配置內容
SETB RST ; 使DS1620的RST為高電平, 開始發送
MOV A , #0CH ; 發送“寫”命令給DS1620
ACALL WRITE1620
;MOV A,R7
MOV A , #00001010B ; 使工作方式寄存器中CUP=1,1SHOT=0,THF= 0, TLF= 0
ACALL WRITE1620
CLR RST ; 結束發送
RET
STARTCONVERT: ; 使DS1620 開始轉換溫度
SETB RST ; 使DS1620 的RST 為高電平, 開始發送命令
MOV A,#0EEH ; 發送“開始轉換”命令給DS1620
ACALL WRITE1620
CLR RST ; 結束發送
RET
READTEMPERATURE: ; 讀取溫度值
SETB RST
MOV A,#0AAH ; 發送“讀溫度”命令給DS1620
ACALL WRITE1620
ACALL READ1620 ; 讀取第1 字節
MOV R1,A ; 首字節送R1
ACALL READ1620 ; 讀取第2 字節
MOV R2,A ; 第2字節送R2
CLR RST
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -