日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

18b20温度计报警C语言,制作DS18B20数字温度计我还想具有报警功能

發(fā)布時間:2023/12/31 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 18b20温度计报警C语言,制作DS18B20数字温度计我还想具有报警功能 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

DS18B20引腳定義:

(1)DQ為數(shù)字信號輸入/輸出端;(需要加個上拉電阻加到電源上)

(2)GND為電源地;

(3)VDD為外接供電電源輸入端(在寄生電源接線方式時接地)。

本人做過它的課程設(shè)計。

以下是程序,你要是有DS18B20的資料最好,沒有的話我可以傳給你。

2個數(shù)碼管顯示。精確到1°C。程序沒加報警功能,你可以在最后一段中,比較一下TEMPER_L和TEMPER_H中的數(shù)值??與你要報警的數(shù)值。自己試一下吧!!!!!!

ORG?0000H

;單片機內(nèi)存分配申明!

TEMPER_L?EQU?29H;用于保存讀出溫度的低8位

TEMPER_H?EQU?28H;用于保存讀出溫度的高8位

FLAG1?EQU?38H;是否檢測到DS18B20標(biāo)志位

a_bit?EQU?20H;數(shù)碼管個位數(shù)存放內(nèi)存位置

b_bit?EQU?21H?;數(shù)碼管十位數(shù)存放內(nèi)存位置

DQ?EQU?P1.2

CHECK?EQU?P1.0

CHECK1?EQU?P1.3

NEGTIVE?EQU?P1.4

MAIN:??LCALL?GET_TEMPER;調(diào)用讀溫度子程序

;進行溫度顯示,用兩位數(shù)碼管來顯示

;顯示范圍-55到99度,顯示精度為1度

LCALL?DISPLAY;調(diào)用數(shù)碼管顯示子程序

AJMP?MAIN

;?DS18B20復(fù)位初始化子程序

INIT_1820:

SETB?DQ

NOP

CLR?DQ

;主機發(fā)出延時637微秒的復(fù)位低脈沖

MOV?R1,#3H

TSR1:?MOV?R0,#6BH

DJNZ?R0,?R1,TSR1

SETB?DQ;然后拉高數(shù)據(jù)線

NOP

NOP

NOP

MOV?R0,#25H

TSR2:?JNB?DQ,TSR3;等待DS18B20回應(yīng)

DJNZ?R0,TSR2

LJMP?TSR4

TSR3:?SETB?FLAG1?;?置標(biāo)志位,表示DS1820存在

CLR?CHECK1;檢查到DS18B20就點亮LED

LJMP?TSR5

TSR4:?CLR?FLAG1?;?清標(biāo)志位,表示DS1820不存在

LJMP?TSR7

TSR5:?MOV?R0,#117

TSR6:?DJNZ?R0,TSR6?;?時序要求延時一段時間

TSR7:?SETB?DQ

RET

;?讀出轉(zhuǎn)換后的溫度值

GET_TEMPER:

SETB?DQ

BCD:?LCALL?INIT_1820;先復(fù)位DS18B20

JB?FLAG1,TSS2

LJMP?BCD?;?判斷DS1820是否存在?若DS18B20不存在則返回

TSS2:;?MOV?R3,#23

;?DJNZ?R3,??CHECK?;DS18B20已經(jīng)被檢測到!!!!!!!!!!!!!!!!!!

MOV?A,#0CCH?;?跳過ROM匹配

LCALL?WRITE_1820

MOV?A,#44H?;?發(fā)出溫度轉(zhuǎn)換命令

LCALL?WRITE_1820

LCALL?DELAY;延時750微秒

LCALL?INIT_1820;準備讀溫度前先復(fù)位

MOV?A,#0CCH?;?跳過ROM匹配

LCALL?WRITE_1820

MOV?A,#0BEH?;?發(fā)出讀溫度命令

LCALL?WRITE_1820

LCALL?READ_1820;?將讀出的溫度數(shù)據(jù)保存

RET

;延時程序

DELAY:?MOV?R2,#4H

DELAYA:?MOV?R3,#0FFH

DELAYB:?MOV?R4,#0FFH

DELAYC:?DJNZ?R4,DELAYC

DJNZ?R3,DELAYB

DJNZ?R2,DELAYA

RET

;寫DS18B20的子程序(有具體的時序要求)

WRITE_1820:

MOV?R2,#8;一共8位數(shù)據(jù)

CLR?C

SETB?DQ

NOP

NOP

WR1:?CLR?DQ

MOV?R3,#6

DJNZ?R3,?A

MOV?DQ,C

MOV?R3,#23

DJNZ?R3,?DQ

NOP

DJNZ?R2,WR1

SETB?DQ

RET

;?讀DS18B20的程序,從DS18B20中讀出兩個字節(jié)的溫度數(shù)據(jù)

READ_1820:

MOV?R4,#2?;?將溫度高位和低位從DS18B20中讀出

MOV?R1,#TEMPER_L?;?低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)

RE00:?MOV?R2,#8;數(shù)據(jù)一共有8位

RE01:?CLR?C

SETB?DQ

NOP

NOP

CLR?DQ

NOP

NOP

NOP

SETB?DQ

MOV?R3,#8?;16us

RE10:??DJNZ?R3,RE10

MOV?C,DQ

MOV?R3,#23?;70us

RE20:??DJNZ?R3,RE20

RRC?A

DJNZ?R2,RE01

MOV?,A

DEC?R1

DJNZ?R4,RE00

RET

;顯示子程序

;根據(jù)TEMPER_H高5位是1來判斷溫度是否為負,若為負,則取反再+1

DISPLAY:

MOV?A,TEMPER_H

JNB?ACC.1,POSI

CLR?NEGTIVE

CPL?A

MOV?TEMPER_H,A

MOV?A,TEMPER_L

CPL?A

CLR?C

INC?A

MOV?TEMPER_L,A

MOV?A,TEMPER_H

ADDC?A,#0H

MOV?TEMPER_H,A

;TEMPER_H高4位為0,根據(jù)溫度計算方法,TEMPER_H,TEMPER_L的數(shù)值除16就是實際溫度

;右移4位即實際溫度,把TEMPER_L高4位和TEMPER_H低4位合并再對換,后轉(zhuǎn)換為10進制即得實際溫度數(shù)據(jù)

POSI:?MOV?A,TEMPER_L

ANL?A,#0F0H

MOV?a_bit,A

MOV?A,TEMPER_H

ADD?A,a_bit

SWAP?A

CLR?C

DA?A

MOV?b_bit,A

ANL?A,#0FH

MOV?DPTR,#ZIXING

MOVC?A,+DPTR

MOV?P3,A

MOV?A,b_bit

SWAP?A

ANL?A,#0FH

MOV?DPTR,#ZIXING

MOVC?A,+DPTR

MOV?P2,A

RET

ZIXING:DB?0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END

總結(jié)

以上是生活随笔為你收集整理的18b20温度计报警C语言,制作DS18B20数字温度计我还想具有报警功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。