|
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
[分享]數(shù)字溫度計程序 |
作者:jaky 欄目:單片機 |
S1OK EQU 5FH TEMPUTER EQU 39H TEMPH EQU 5EH TEMPL EQU 5DH MS50 EQU 5CH SIGN EQU 5BH S1 BIT P1.0 S2 BIT P1.1 S3 BIT P1.2 S4 BIT P1.3 ORG 0000H LJMP MAIN ORG 000BH LJMP TOIT ORG 0030H MAIN: MOV SP, #60H MOV TMOD, #01H MOV TH0, #3CH MOV TL0, #0B0H SETB ET0 SETB TR0 SETB EA MOV TEMPH, #30 MOV TEMPL, #9 MOV TEMPUTER, #15 ;溫度最始值 MOV S1OK, #00H MOV SIGN, #00H MOV 38H, #0BH MOV 37H, #0CH MOV 36H, #0BH ACALL DISP ACALL T1S ; ***************************************** ; 主程序 START: JB S1, NET1 ACALL T12MS JB S1, NET1 JNB S1, $ INC SIGN MOV A, SIGN CJNE A, #1, TIAO ACALL TIAOTL TIAO:CJNE A, #2, NET1 MOV SIGN, #0 ACALL TIAOTH ; ***************************************** NET1: MOV A, S1OK CJNE A, #1, START MOV A, TEMPUTER SUBB A, TEMPH JNB ACC.7, ALEM MOV A, TEMPUTER SUBB A, TEMPL JB ACC.7, ALEM SETB P2.1 ACALL WENDU ACALL DISP MOV S1OK, #00H AJMP START ALEM: MOV 36H, #0CH MOV 37H, #0CH MOV 38H, #0CH CLR P2.1 ACALL DISP ACALL T1S LCALL WENDU LCALL DISP MOV S1OK, #00H SJMP START ;***************************************** TIAOTL:MOV 50H, TEMPUTER MOV 37H, TEMPL ACALL BIN_BCD ACALL DISP ACALL T12MS ACALL T12MS ACALL T12MS ACALL T12MS MOV 36H, #0AH MOV 37H, #0AH MOV 38H, #0AH ACALL DISP ACALL T12MS ACALL T12MS ACALL T12MS ACALL T12MS JB S2, ADD1 ACALL T12MS JB S2, ADD1 JNB S2, $ INC TEMPL MOV A, TEMPL CJNE A, #100, ADD1 MOV TEMPL, #0 ADD1: JB S3, ADD2 ACALL T12MS JB S3, ADD2 JNB S3, $ DEC TEMPL MOV A, TEMPL CJNE A, #00 , ADD2 MOV TEMPL,#100 ADD2: JB S4, TIAOTL ACALL T12MS JB S4, TIAOTL JNB S4, $ MOV TEMPUTER, 50H LJMP START
|
2樓: | >>參與討論 |
作者: jaky 于 2007/1/19 20:11:21 發(fā)布:
bsp; ACALL T12MS JB S4, TIAOTH JNB S4, $ MOV TEMPUTER, 50H LJMP START ; 一秒定時中段 ; ***************************************** TOIT: PUSH PSW PUSH ACC MOV TH0, #3CH MOV TL0, #0B0H INC MS50 MOV A, MS50 CJNE A, #14H, RETURN MOV S1OK, #1 MOV MS50, #00H RETURN:POP ACC POP PSW RETI ; ***************************************** ;溫度總子程序 ; ***************************************** wendu: ACALL INIT_1820 ACALL RE_CONFIG ACALL GET_TEMPER ACALL TEMPER_COV RET ; ***************************************** ;DS18B20初始化程序 ; ***************************************** INIT_1820: SETB P2.0 NOP CLR P2.0 MOV R0,#06BH MOV R1,#03H TSR1: DJNZ R0,TSR1 ; 延時 MOV R0,#6BH DJNZ R1,TSR1 SETB P2.0 NOP NOP NOP MOV R0,#25H TSR2: JNB P2.0,TSR3 DJNZ R0,TSR2 LJMP TSR4 ; 延時 TSR3: SETB 20H.1 ; 置標志位,表示DS1820存在 LJMP TSR5 TSR4: CLR 20H.1 ; 清標志位,表示DS1820不存在 LJMP TSR7 TSR5: MOV R0,#06BH MOV R1,#03H TSR6:DJNZ R0,TSR6 ; 延時 MOV R0,#6BH DJNZ R1,TSR6 TSR7:SETB P2.0 RET ; ***************************************** ; 重新寫DS18B20暫存存儲器設(shè)定值 ; ***************************************** RE_CONFIG:JB 20H.1,RE_CONFIG1 ; 若DS18B20存在,轉(zhuǎn)RE_CONFIG1 RET RE_CONFIG1: MOV A,#0CCH ; 發(fā)SKIP ROM命令 LCALL WRITE_1820 MOV A,#4EH ; 發(fā)寫暫存存儲器命令 LCALL WRITE_1820 MOV A,#00H ; TH(報警上限)中寫入00H LCALL WRITE_1820 MOV A,#00H ; TL(報警下限)中寫入00H LCALL WRITE_1820 MOV A,#1FH ; 選擇9位溫度分辨率 LCALL WRITE_1820 RET ; ***************************************** ; 讀出轉(zhuǎn)換后的溫度值 ; ***************************************** GET_TEMPER: SETB P2.0 ; 定時入口 LCALL INIT_1820 JB 20H.1,TSS2 RET ; 若DS18B20不存在則返回 TSS2: MOV A,#0CCH ; 跳過ROM匹配 LCALL WRITE_1820 MOV A,#44H ; 發(fā)出溫度轉(zhuǎn)換命令 LCALL WRITE_1820 LCALL INIT_1820 MOV A,#0CCH ; 跳過ROM匹配 LCALL WRITE_1820 MOV A,#0BEH ; 發(fā)出讀溫度命令 LCALL WRITE_1820 LCALL READ_18200 MOV 37H,A ; 將讀出的溫度數(shù)據(jù)保存 RET ; ***************************************** ; 寫DS18B20的程序 ; ***************************************** WRITE_1820: MOV R2,#8 CLR C WR1:CLR P2.0 NOP NOP NOP NOP RRC A MOV P2.0,C MOV R3,#35 DJNZ R3,$ SETB P2.0 NOP DJNZ R2,WR1 SETB P2.0 RET ; ***************************************** ; ***************************************** READ_18200: MOV R4,#2 ; 將溫度高位和低位DS18B20中讀 RE00:MOV R2,#8 RE01:CLR C SETB P2.0 NOP NOP CLR P2.0 NOP NOP NOP SETB P2.0 NOP NOP MOV C,P2.0 MOV R3,#35 RE20: DJNZ R3,RE20 RRC A DJNZ R2,RE01 MOV @R1,A DEC R1 DJNZ R4,RE00 RET ; ****************************** |
3樓: | >>參與討論 |
作者: jaky 于 2007/1/19 20:12:12 發(fā)布:
; ***************************************** ; 將16進制的溫度數(shù)據(jù)轉(zhuǎn)換成壓縮BCD碼 ; 38H中放百位,37十位,36個位 ; ***************************************** BIN_BCD: MOV 39H,37H MOV A,37H MOV B,#100 DIV AB MOV 38H,A MOV 37H,B XCH A,B MOV B,#10 DIV AB MOV 37H,A MOV 36H,B RET DISP: SETB RS0 MOV R0, #36H MOV R7, #3 LOOPP:MOV A, @R0 MOV DPTR, #TAB MOVC A, @A+DPTR MOV SBUF, A JNB TI, $ CLR TI INC R0 DJNZ R7, LOOPP CLR RS0 RET TAB: DB 11H, 0D7H, 32H, 92H, 0D4H, 98H, 18H, 0D1H, 10H, 90H ,0FFH, 070H, 0FEH ; 延時子程序 T12MS: SETB RS1 MOV R7, #18H TM: MOV R6, #0FFH TM6: DJNZ R6, TM6 DJNZ R7, TM CLR RS1 RET ; 開機延時程序 T1S: SETB RS1 MOV R6, #3 LSP:ACALL T12MS DJNZ R6, LSP CLR RS1 RET END |
4樓: | >>參與討論 |
作者: jaky 于 2007/1/19 20:13:57 發(fā)布:
不知道有沒有錯 |
5樓: | >>參與討論 |
作者: 微藍 于 2007/1/19 21:14:27 發(fā)布:
怎么沒有硬件圖的啊.......... |
6樓: | >>參與討論 |
作者: godsky 于 2007/1/19 22:22:16 發(fā)布:
這個程序 我好像見到過 ^_^ |
7樓: | >>參與討論 |
作者: zjh19831011 于 2007/1/25 15:41:47 發(fā)布:
這么多,干嗎不用C寫啊 |
8樓: | >>參與討論 |
作者: luo5610 于 2007/3/30 12:03:27 發(fā)布:
樓住,能告訴我在這個程序中如何修改程序就可以把這個溫度程序的測溫范圍擴大到1000度啊 |
9樓: | >>參與討論 |
作者: zwt659 于 2007/3/31 17:42:26 發(fā)布:
樓主怎么沒有上傳硬件部分啊,這樣看起來有點不太清楚 |
10樓: | >>參與討論 |
作者: wujing198 于 2007/3/31 18:44:39 發(fā)布:
我剛才看見一個帖子在求溫度控制,用這個程序改一下就可以實現(xiàn)溫度控制,無非就是加一段控制程序,設(shè)計1、2個控制信號而已。其實資源多的是,就看自己會不會用。 |
11樓: | >>參與討論 |
作者: wap 于 2008/10/3 14:18:40 發(fā)布:
C麻煩,不好寫
|
|
|
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號 |