請教DS1821溫度讀取的問題 |
缺席
|
ruka
一般會員 ![]() ![]() 發表:1 回覆:0 積分:0 註冊:2009-01-27 發送簡訊給我 |
小弟最近寫了一個8051程式來讀取DS1821的溫度資料,但是讀到的數據都是負55度c,在網路上苦尋問題解決方法,希望大大們能幫幫忙
我也做了一些測試在設定高低溫度時都可以正確的寫入和讀取設定值,如果不加入EEh轉換指令確定是不能做溫度轉換,所得到的溫度是00h,但是搞不懂為什麼轉換的溫度都是C9h(負55度c),附上小弟寫的程式,請各位大大幫忙~感恩阿 ;P1設定為8bit資料顯示接8顆led ;P3.0為控制DS1821資料DQ腳 ; ;---------- WRITE_COMMAND EQU 30H ;寫入資料的暫存 READ_BUFF EQU 31H ;讀取資料的暫存 ORG 0000H MOV SP,#60H JMP INIT INIT: CALL RESET_1821 MOV WRITE_COMMAND,#0A1H ; 讀取TH溫度設定值 CALL WRITE_COM CALL READ_COM MOV P1,READ_BUFF ;將資料輸出到P1 CALL DELAY ;---------------------------------------------------- CALL RESET_1821 MOV WRITE_COMMAND,#0A2H ;讀取TL溫度設定值 CALL WRITE_COM CALL READ_COM MOV P1,READ_BUFF ;將資料輸出到P1 CALL DELAY ;-----------------------觀察狀態暫存器設定值----------------------------- CALL RESET_1821 MOV WRITE_COMMAND,#0ACH ;讀取狀態暫存器值 CALL WRITE_COM CALL READ_COM MOV P1,READ_BUFF ;將資料輸出到P1 CALL DELAY ;---------------------設定狀態暫存器設定值------------------------------- CALL RESET_1821 ;重新設定DS1821 MOV WRITE_COMMAND,#0CH ; 寫入狀態暫存器 CALL WRITE_COM MOV WRITE_COMMAND,#42H ;設定單線讀取模式,POL高態動作 CALL WRITE_COM CALL DELAY ;-----------顯示狀態暫存器設定值------ CALL RESET_1821 MOV WRITE_COMMAND,#0ACH ;讀取狀態暫存器值 CALL WRITE_COM CALL READ_COM MOV P1,READ_BUFF ;將資料輸出到P1 CALL DELAY ;------------------------------ CALL RESET_1821 MOV WRITE_COMMAND,#0EEH ;開始溫度轉換 CALL WRITE_COM CALL DELAY ;--------------------1 wire mode 溫度讀取---------- WQ: CALL RESET_1821 MOV WRITE_COMMAND,#0AAH ;接收溫度值 CALL WRITE_COM CALL READ_COM MOV P1,READ_BUFF ;將溫度資料輸出到P1 CALL DELAY JMP wq ;----------------- DS1821初始化副程式------------- RESET_1821: CLR p3.0 D480: MOV R6,#240 ;O電位480us DJNZ R6,$ ;| SETB P3.0 ;設定Hight JB P3.0,$ ; 等待ds1821回應low MOV R6,#30 ;延遲60us等待ds1821初始化完成 DJNZ R6,$ ;| JNB P3.0,$ ;|--------判斷初始化是否完成 RET ;----------------- 寫入副程式------------- WRITE_COM: MOV R1,#8 MOV A,WRITE_COMMAND CLR C BT: setb p3.0 CLR P3.0 ;寫入0 MOV R6,#6 DJNZ R6,$ RRC A MOV P3.0,C ;將8bit資料送至DQ D60: MOV R6,#30 DJNZ R6,$ DJNZ R1,BT RET ;----------------- 讀取副程式 ----------------- READ_COM: CLR A MOV R7,#8 CLR C AGA: CLR P3.0 NOP SETB P3.0 MOV R6,#7 DJNZ R6,$ MOV C,P3.0 RRC A MOV R6,#30 DJNZ R6,$ DJNZ R7,AGA MOV READ_BUFF,A RET ;----------------- DELAY: MOV R5,#10 DL0: MOV R6,#250 DL1: MOV R7,#200 DL2: DJNZ R7,DL2 DJNZ R6,DL1 DJNZ R5,DL0 RET END |
mekelvin
一般會員 ![]() ![]() 發表:2 回覆:16 積分:8 註冊:2009-03-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |