日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

DS18B20引腳定義:

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

(2)GND為電源地;

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

本人做過它的課程設計。

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

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

ORG?0000H

;單片機內存分配申明!

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

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

FLAG1?EQU?38H;是否檢測到DS18B20標志位

a_bit?EQU?20H;數碼管個位數存放內存位置

b_bit?EQU?21H?;數碼管十位數存放內存位置

DQ?EQU?P1.2

CHECK?EQU?P1.0

CHECK1?EQU?P1.3

NEGTIVE?EQU?P1.4

MAIN:??LCALL?GET_TEMPER;調用讀溫度子程序

;進行溫度顯示,用兩位數碼管來顯示

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

LCALL?DISPLAY;調用數碼管顯示子程序

AJMP?MAIN

;?DS18B20復位初始化子程序

INIT_1820:

SETB?DQ

NOP

CLR?DQ

;主機發出延時637微秒的復位低脈沖

MOV?R1,#3H

TSR1:?MOV?R0,#6BH

DJNZ?R0,?R1,TSR1

SETB?DQ;然后拉高數據線

NOP

NOP

NOP

MOV?R0,#25H

TSR2:?JNB?DQ,TSR3;等待DS18B20回應

DJNZ?R0,TSR2

LJMP?TSR4

TSR3:?SETB?FLAG1?;?置標志位,表示DS1820存在

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

LJMP?TSR5

TSR4:?CLR?FLAG1?;?清標志位,表示DS1820不存在

LJMP?TSR7

TSR5:?MOV?R0,#117

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

TSR7:?SETB?DQ

RET

;?讀出轉換后的溫度值

GET_TEMPER:

SETB?DQ

BCD:?LCALL?INIT_1820;先復位DS18B20

JB?FLAG1,TSS2

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

TSS2:;?MOV?R3,#23

;?DJNZ?R3,??CHECK?;DS18B20已經被檢測到!!!!!!!!!!!!!!!!!!

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

LCALL?WRITE_1820

MOV?A,#44H?;?發出溫度轉換命令

LCALL?WRITE_1820

LCALL?DELAY;延時750微秒

LCALL?INIT_1820;準備讀溫度前先復位

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

LCALL?WRITE_1820

MOV?A,#0BEH?;?發出讀溫度命令

LCALL?WRITE_1820

LCALL?READ_1820;?將讀出的溫度數據保存

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位數據

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中讀出兩個字節的溫度數據

READ_1820:

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

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

RE00:?MOV?R2,#8;數據一共有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

;顯示子程序

;根據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,根據溫度計算方法,TEMPER_H,TEMPER_L的數值除16就是實際溫度

;右移4位即實際溫度,把TEMPER_L高4位和TEMPER_H低4位合并再對換,后轉換為10進制即得實際溫度數據

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。