當前位置:編程學習大全網 - 編程語言 - 急求:基於MCS-51單片機的溫度控制器匯編語言軟件設計和硬件電路圖

急求:基於MCS-51單片機的溫度控制器匯編語言軟件設計和硬件電路圖

第2章 硬件電路詳細設計

DS18B20的性能特點:1、采用單總線專用技術,既可通過串行口線,也可通過其它I/O口線與微機接口,無須經過其它變換電路,直接輸出被測溫度值(9位二進制數,含符號位),2、測溫範圍為-55℃-+125℃,測量分辨率為0.0625℃,3、內含64位經過激光修正的只讀存儲器ROM,4、適配各種單片機或系統機,5、用戶可分別設定各路溫度的上、下限,6、內含寄生電源。溫度傳感器DS18B20連接方式:在寄生電源供電方式下,DS18B20從單線信號線上汲取能量,在信號線DQ處於高電平期間把能量儲存在內部電容裏,在信號線處於低電平期間消耗電容上的電能工作,直到高電平到來再給寄生電源(電容)充電。如圖2.3所示。

2.4 復位電路的設計

本設計采用人工復位,將壹個按扭開關並聯於上電自動復位電路按壹下開關就在RST端出現壹段時間的高電平,即器件復位。

2.5 晶振電路的設計

2.6 DS18B20溫度傳感器與單片機的接口電路

DS18B20可以采用兩種方式供電,壹種是采用電源供電方式,此時DS18B20的1腳接地,2腳作為信號線,3腳接電源。另壹種是寄生電源供電方式,如所示單片機端口接單線總線,為保證在有效的DS18B20時鐘周期內提供足夠的電流,可用壹個MOSFET管來完成對總線的上拉。

當DS18B20處於寫存儲器操作和溫度A/D轉換操作時,總線上必須有強的上拉,上拉開啟時間最大為10us。采用寄生電源供電方式時VDD端接地。由於單線制只有壹根線,因此發送接口必須是三態的。

2.7 溫度測量系統整體硬件電路

Wei1 BIT P3.0 ;;數碼管第1位

Wei2 BIT P3.1 ;;數碼管第2位

Wei3 BIT P3.2 ;;數碼管第3位

Wei4 BIT P3.3 ;;數碼管第4位

Dian EQU 20H ;;小數點狀態狀態保存字節

DisData1 EQU 30H ;;第1位顯示數據

DisData2 EQU 31H ;;第2位顯示數據

DisData3 EQU 32H ;;第3位顯示數據

DisData4 EQU 33H ;;第4位顯示數據

DisTime EQU 34H ;;設置顯示幾次後讀取溫度值

;;溫度數據存儲單元標號定義

TempL EQU 35H ;;溫度高位

TempH EQU 36H ;;溫度低位

;;與DS18B20通迅部分存儲單元及標號定義

DS18B20 BIT P1.0 ;;與DS18B20通迅的位地址

RFail BIT 21H.0 ;;復位失敗標記

Var EQU 22H ;;變量字節,溫度數據處理時用到

Var2 EQU 3FH ;;變量字節

主程序部分:

ORG 00H

LJMP START

ORG 100H

START: ;;-----初始化

MOV SP,#60H ;;初始化堆棧指針

Set18B20:;;-----DS18B20初始化

;;DS18B20復位

ACALL Reset

JB RFail,LOOP ;;復位失敗則直接跳至顯示部分

;;對DS18B20發出Skip ROM命令

MOV A,#0CCH

ACALL Write

;;對DS18B20發出溫度轉換命令

MOV A,#44H

ACALL Write

SetDisT:MOV DisTime,#3 ;;設置下壹個循環體的循環8次

LOOP:

ACALL Display ;;顯示

JB RFail,Set18B20 ;;DS18B20復位失敗時,在顯示完壹次後重新復位

DJNZ DisTime,LOOP

JNB DS18B20,$ ;;判斷DS18B20是否已完成溫度轉換

ACALL GetTemp ;;從DS18B20讀出溫度值

ACALL DealTemp ;;溫度值處理

ACALL SendDisDT ;;根據當前系統狀態設置顯示內容

SJMP SetDisT ;;;;;;;

;;根據當前狀態給顯示模塊設置顯示參數

SendDisDT:

MOV Dian,#7FH ;;最高位為0代表顯示小數點

;;傳送溫度值

MOV A,TempH ;;送高位數據

MOV VAR,TempL ;;送低位數據

ACALL TransData

RET

;;A中保存高位值,Var中保存低位值

TransData:

;;取個位值

MOV B,#10

DIV AB

MOV DisData2,B

;;取十位值

JZ HavNot1 ;;判斷商是否為0

MOV B,#10

DIV AB

MOV DisData3,B

JZ HavNot2 ;;判斷商是否為0

MOV DisData4,A

SJMP XiaoShu ;;跳至百位符號處理部分

HavNot1:MOV DisData3,#10 ;;十位開始沒有數字

HavNot2:MOV DisData4,#10 ;;百位開始沒有數字

SignJudge:;;符號處理部分

JNB VAR.7,XiaoShu ;;當為負數顯示符號

MOV A,#10

CJNE A,DisData3,BWSign

MOV DisData3,#11 ;;負號在十位

SJMP XiaoShu

BWSign:MOV DisData4,#11 ;;負號在百位

XiaoShu:;;小數處理部分,用查表法獲取小數值,精確到小數點後1位

MOV A,VAR

ANL A,#0FH

MOV DPTR,#XSTab

MOVC A,@A+DPTR

MOV DisData1,A

RTransTemp:

RET

XSTab: DB 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9

DS18B20通迅模塊組

-------復位模塊

Reset: ;;3微秒高電平

SETB DS18B20

MOV R7,#250

CLR RFail ;;清0復位失敗標記

CLR DS18B20

;;延遲501uS

DJNZ R7,$

SETB DS18B20 ;;釋放總線(拉高數據線)

;;等待DS18B20作出復位成功反應,最大等待時間為69uS

MOV R7,#17

Wait:

JNB DS18B20,RReset ;;若DS18B20在作出復位成功反應,不再等待

DJNZ R7,Wait

SETB RFail ;;70uS內DS18B20作出復位成功反應,置1復位失敗標記

RReset:

;;延遲350Us

MOV R7,#174

DJNZ R7,$

SETB DS18B20

RET

/

;;-------向DS18B20寫壹個字的模塊,要寫的內容提前裝入ACC中

Write:

MOV R6,#8 ;寫8位

WriteBit:

;;2微秒高電平

SETB DS18B20

MOV R7,#3

;;7微秒低電平

CLR DS18B20

DJNZ R7,$

;;ACC低位送至DS18B20

RRC A

MOV DS18B20,C

;;延遲60Us

MOV R7,#28

DJNZ R7,$

;;是否已寫完8位

DJNZ R6,WriteBit

RWrite:

SETB DS18B20

RET

; /

;;-------從DS18B20讀回壹個字節的內容,讀回的內容裝入ACC中

Read:

MOV R6,#8 ;;讀回8位

MOV A,#0 ;;讀回的內容裝入ACC中

ReadBit:

;;2微秒高電平

SETB DS18B20

MOV R7,#7

;;2微秒低電平

CLR DS18B20

NOP

;;16微秒高電平

SETB DS18B20

DJNZ R7,$

;;讀回壹位數據放入ACC中

MOV C,DS18B20

RRC A

;;延遲66Us

MOV R7,#33

DJNZ R7,$

;;是否已讀完8位

DJNZ R6,ReadBit

RRead:

SETB DS18B20

RET

/

;;-------與DS18B20通迅,讀回兩字節溫度值,並裝入ACC中TempL和TempH中

GetTemp:

ACALL Reset ;;復位

JB RFail,RGetTemp ;;判斷復位是否成功

;;復位成功

;;對DS18B20發出Skip ROM命令

MOV A,#0CCH

ACALL Write

;;對DS18B20發出讀命令

MOV A,#0BEH

ACALL Write

;;從DS18B20讀回低8位溫度值

ACALL Read

MOV TempL,A

;;從DS18B20讀回高8位溫度值

ACALL Read

MOV TempH,A

ACALL Reset ;;復位

JB RFail,RGetTemp ;;判斷復位是否成功

;;對DS18B20發出Skip ROM命令

MOV A,#0CCH

ACALL Write

;;對DS18B20發出溫度轉換命令

MOV A,#44H

ACALL Write

RGetTemp:

RET

溫度數據處理模塊

DealTemp:

;;將整數的二進制數部分移到壹個字節,符號位和小數部分移到壹個字節

MOV R1,#Var

MOV Var,TempH

MOV A,TempL

XCHD A,@R1 ;;符號位、小數部分至VAR(@R1),整數部分至ACC

SWAP A

;;整數部分處理

JNB Var.7,NotNeg ;;判斷是否為負數

CPL A ;;為負數,取反後加1得其絕對值

;;小數部分取反

XRL Var,#1FH ;;

INC Var

NotNeg:

MOV TempH,A

MOV TempL,Var

RET

顯示模塊

-------顯示DisData(30H)從開始的三個字節保存顯示信息

Display:

MOV DPTR,#Tab

;;**顯示小數部分

MOV A,DisData1

MOVC A,@A+DPTR

MOV P2,A

CLR Wei1

ACALL Delay

SETB Wei1

;;**顯示個位

MOV A,DisData2

MOVC A,@A+DPTR

;;小數點處理

ANL A,Dian

MOV P2,A

CLR Wei2

ACALL Delay

SETB Wei2

;;**顯示十位

MOV A,DisData3

MOVC A,@A+DPTR

MOV P2,A

CLR Wei3

ACALL Delay

SETB Wei3

;;**顯示百位

MOV A,DisData4

MOVC A,@A+DPTR

MOV P2,A

CLR Wei4

ACALL Delay

SETB Wei4

RET

Tab: ;;0~9、空白、負號的編碼

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH

;;延遲

Delay:

MOV R6,#6

DD1:MOV R5,#250

DJNZ R5,$

DJNZ R6,DD1

RET

END

這裏面插不了圖,我有這個的整套課程設計報告,想要找我,mingchaofu@126.com

  • 上一篇:石家莊有沒有好的軟件公司,最好是福利待遇都比較好,有公積金的
  • 下一篇:壹個沒多大交情的小學同學 突然找我訴苦然後聊的挺來的 我也表白了他
  • copyright 2024編程學習大全網