国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

單片機溫度檢測高溫報警系統(tǒng) 匯編語言

這篇具有很好參考價值的文章主要介紹了單片機溫度檢測高溫報警系統(tǒng) 匯編語言。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

單片機溫度檢測高溫報警系統(tǒng)

  1. 實驗目的

1) 掌握 51 單片機定時器/計數(shù)器工作原理與應用;

2) 掌握 51 單片機中斷系統(tǒng)工作原理與應用;

3) 掌握 Keil μVision 軟件開發(fā)環(huán)境,匯編語言源程序的編制與調(diào)試;

4)掌握ds18b20溫度檢測傳感器使用方法

5)掌握單片機拓展總線的工作原理和時序操作;

2.實驗設(shè)備機器軟件

1) Keil μVision 軟件

2) Proteus 軟件

3) 計算機

4)ds18b20傳感器

3. 實驗內(nèi)容

1)利用定時器中斷顯示數(shù)據(jù)

2)理解和合理利用ds18b20溫度傳感器使用方法

3)合理利用嚴格的時序進行數(shù)據(jù)的寫入和讀出

4)利用共陰極的二位數(shù)碼管動態(tài)顯示溫度

5)高溫檢測報警

4. 實驗要求

1) 在 Proteus ISIS 集成環(huán)境中,繪制電路原理圖;

2) 設(shè)計程序流程,并繪制程序流程圖;

3) 在 Keil μVision中編制匯編語言源程序,調(diào)試實現(xiàn)要求功能,生成可 執(zhí)行程序;

4) 在 Proteus ISIS 完成硬件仿真調(diào)試。

5) 提交 Keil μVision 程序、Proteus ISIS 設(shè)計文件、實驗報告。

5. 設(shè)計要點

1) 采用定時器/計數(shù)器T0進行計時,工作方式1(16 位定時器/計數(shù)器),振頻率12MHz,定10ms;

2) 定時器/計數(shù)器工作在中斷方式,打開定時器0的中斷開關(guān),每10ms進行一次溫度動態(tài)顯示;

3)按照時序讀出溫度數(shù)據(jù),進行溫度數(shù)據(jù)處理,存儲在一個字節(jié)(34H)里,然后分別存儲個位、十位;

4) P0.0-P0.3進行個位十位的數(shù)以四位二進制的形式輸出,經(jīng)過編碼器,傳遞給七段數(shù)碼管,同時用P0.4、P0.5進行個位十位的選通,間隔10ms,達到動態(tài)顯示的效果 ;

5) 軟件自行設(shè)定溫度閾值,與實時溫度相比較,超出閾值溫度,蜂鳴器響,顯示溫度。

6.程序流程設(shè)計

1)主程序流程圖設(shè)計

51單片機溫度報警器匯編語言,單片機,嵌入式硬件,51單片機

?

2)T0中斷程序

51單片機溫度報警器匯編語言,單片機,嵌入式硬件,51單片機

?

3)復位程序(RSTSNR)

51單片機溫度報警器匯編語言,單片機,嵌入式硬件,51單片機

?

?4)寫入指令程序(SEND_BYTE)

51單片機溫度報警器匯編語言,單片機,嵌入式硬件,51單片機

?

5)數(shù)據(jù)讀取指令

51單片機溫度報警器匯編語言,單片機,嵌入式硬件,51單片機

?

5) 2 位動態(tài)數(shù)碼管顯示子程序

51單片機溫度報警器匯編語言,單片機,嵌入式硬件,51單片機

?

6)溫度超過閾值報警

51單片機溫度報警器匯編語言,單片機,嵌入式硬件,51單片機

7.Proteus 電路原理圖

51單片機溫度報警器匯編語言,單片機,嵌入式硬件,51單片機

?

參與的電子元件

51單片機溫度報警器匯編語言,單片機,嵌入式硬件,51單片機

?

ds18b20:溫度傳感器

74ls74:四位二進制的七段數(shù)碼管編碼器

8.工作原理簡述

DS18B20簡介

DS18B20連接在單片機的P3.7口上。P3口發(fā)揮了作為I/O口的功能。通過一根單總線連接,單片機向DS18B20發(fā)出時序信號來對DS18B20做出指令。

51單片機溫度報警器匯編語言,單片機,嵌入式硬件,51單片機

?

DS18B20的暫存寄存器

?單片機通過單總線讀取DS18B20的數(shù)據(jù)時,總是從Byte 0的最低位開始傳輸?shù)摹?/span>Byte 0和Byte 1用來存儲溫度的第八位和高八位。本次設(shè)計只用到byte0和byte1以及用byte4的配置寄存器來設(shè)定分辨率。

51單片機溫度報警器匯編語言,單片機,嵌入式硬件,51單片機

?

?配置寄存器與溫度分辨率的配置

?配置寄存器只有bit5和bit6是可以寫入的,其他不可以寫入。上電默認R1R0=11(十二位分辨率),在這次設(shè)計中我采用默認分辨率。

復位原理

51單片機溫度報警器匯編語言,單片機,嵌入式硬件,51單片機

?

初始化時序

?復位講究嚴格的時序,主控制器首先發(fā)送一個高電平,然后再拉低,并維持500us,然后主機轉(zhuǎn)為輸入狀態(tài),上大電阻將總線拉為高電平。DS18B20在上電之后就檢測是否存在480-960us的低電平出現(xiàn),如果有總線拉為高電平之后的50us左右等待時間后將總線拉低60-240us告訴主機DS18B20處于ready狀態(tài)。復位程序中使用F0來做響應標志位,F(xiàn)0=1表示從機存在,F(xiàn)0=0表示從機不存在。

//復位程序
RSTSNR: SETB DAT?????????? //拉高DQ
NOP
NOP
CLR DAT??????????? //拉低DQ 600
μs
MOV R6,#250
DJNZ R6,$
MOV R6,#50
DJNZ R6,$
SETB DAT?????????????????????????????? ? //釋放DQ
MOV R6,#15
DJNZ R6,$
lCALL CHCK??????????? //調(diào)用應答回應判斷程序
MOV R6,#60
DJNZ R6,$
SETB DAT
RET

CHCK: MOV C,DAT?????? ???????//進位標志位
JC RST0??????????? //DAT為1 跳轉(zhuǎn)
SETB F0??????????? //DAT為0 應答信號 置位 F0
SJMP CHCK0
RST0:? CLR F0??????????? //為準備好 F0復位
CHCK0: RET


?

寫入數(shù)據(jù)

51單片機溫度報警器匯編語言,單片機,嵌入式硬件,51單片機

?

寫時序

?主控制器的寫時序包括寫1和寫0,寫時序周期大于60us小于120us。每一個寫時序都開始于主控制器拉低總線0-15us,若要寫0,繼續(xù)拉低總線,使總線自開始到拉高至少60us。若要寫1,則在拉低總線開始寫時序1us之后釋放總線為高電平。寫入數(shù)據(jù)必須先復位然后跳過ROM,再進行讀寫。

SEND_BYTE:MOV A,R0
MOV R5,#8
SEN3: CLR C
RRC A
JC SEN1
LCALL WRITE_0
SJMP SEN2
SEN1: LCALL WRITE_1
SEN2: DJNZ R5,SEN3????? //循壞8次,發(fā)送一個字節(jié)
RET

?

讀出數(shù)據(jù)

51單片機溫度報警器匯編語言,單片機,嵌入式硬件,51單片機

?

讀時序

?只有在讀時段期間DS18B20才能向主設(shè)備傳輸數(shù)據(jù),在讀數(shù)據(jù)前可以對數(shù)據(jù)進行轉(zhuǎn)換為溫度操作。讀時段通過主控制器將總線拉低至少1us再釋放總線來完成初始化,初始化完成后DS18B20會向總線發(fā)送0或1。DS18B20通過將總線拉高來發(fā)送1,將總線拉低來發(fā)送0。發(fā)送完后,總線通過上拉電阻恢復到高電平。DS18B20發(fā)送的數(shù)據(jù)在初始化后只有15us的有效時間。讀出數(shù)據(jù)后延時50us。

/讀一個字節(jié)程序
READ_BYTE:MOV R5,#8
READ1: LCALL READ
RRC A
DJNZ R5,READ1
MOV R0,A
RET
//讀一位數(shù)據(jù)
READ: SETB DAT???? //產(chǎn)生讀時序
NOP
NOP
CLR DAT
NOP
NOP
SETB DAT???? //置位DAT準備接受數(shù)據(jù)
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOV C,DAT
MOV R6,#23
DJNZ R6,$
RET

?

溫度轉(zhuǎn)換

51單片機溫度報警器匯編語言,單片機,嵌入式硬件,51單片機

?

RAM操作指令

51單片機溫度報警器匯編語言,單片機,嵌入式硬件,51單片機

?

ROM操作指令

??? 首先根據(jù)F0判斷DS18B20是否存在。不存在跳回主程序,存在則寫0CCH入DS18B20跳過ROM指令,然后寫44H,使DS18B20溫度轉(zhuǎn)換。然后讀時序,先復位,然后寫入0CCH跳過ROM,然后寫0BEH讀暫存器內(nèi)容。

DSWD: LCALL RSTSNR????????? //調(diào)用復位子程序
JNB F0,KEND?????????? //判斷是否應答
MOV R0,#0CCH????????? //應答后,寫入跳過ROM匹配命令
LCALL SEND_BYTE
MOV R0,#44H?????????? //寫入溫度轉(zhuǎn)換命令
LCALL SEND_BYTE
SETB EA
MOV 48H ,#1??????????? //延時75ms以上準備讀
SS2: MOV 49H,#255
SS1: MOV? 4AH,#255
SS0: DJNZ 4AH,SS0
DJNZ 49H,SS1
DJNZ 48H,SS2
CLR? EA????????????? //禁止中斷
LCALL RSTSNR
JNB F0,KEND???????????? //應答后 跳轉(zhuǎn)
??????? MOV R0,#0CCH??????????? ? ???????????????????? ?
LCALL SEND_BYTE
MOV R0,#0BEH??????????? //寫入讀取溫度指令
LCALL SEND_BYTE
LCALL READ_BYTE????????? //讀一個字節(jié)溫度(低8字節(jié))
MOV WDLSB,A
LCALL READ_BYTE????????? //讀一個字節(jié)溫度(低8字節(jié))
MOV WDMSB,A
LCALL TRANS12
KEND:?? SETB EA????????????? //開中斷
RET

?

數(shù)據(jù)處理

讀取數(shù)據(jù)后,對數(shù)據(jù)進行處理,只取整數(shù)部分,將讀出的高位與地位相結(jié)合后處理為一個八位二進制的數(shù)。隨后對其除以10取余得到十位與各位數(shù)字,分別用四位二進制表示。

TRANS12:MOV A,30H??????? //低字節(jié)數(shù)據(jù)傳入A?????? 00000 1111 1010 0000
ANL A,#0F0H
MOV 3AH,A
MOV A,31H
ANL A,#0FH
ORL A,3AH
SWAP A???????? //得到表示溫度整數(shù)部分的8位二進制數(shù)
MOV 34H,A

JIXU: NOP
MOV B,#10
DIV AB
MOV 43H,B
MOV B,#10
DIV AB
MOV 42H,B
MOV 41H,A??????? //分離兩位溫度值的十位(存到B)個位(存到A)
MOV A,#wenduyuzhi
CJNE A,34H,BEED
LJMP FANHUI
BEED:?? JNC FANHUI
??????? CLR P1.0
LCALL DELAY
??????? CLR C
FANHUI: RET

?

溫度顯示

51單片機溫度報警器匯編語言,單片機,嵌入式硬件,51單片機

?

溫度顯示

數(shù)碼管顯示部分由一個二位動態(tài)數(shù)碼顯示器和一個編碼器組成。通過控制P0.4和P0.5口的數(shù)值來改變二位動態(tài)數(shù)管顯示的開關(guān),然后再改變P0口的值進行選擇數(shù)碼管顯示,以此來實現(xiàn)數(shù)碼管的動態(tài)顯示。這個過程通過一個10ms的中斷來達到動態(tài)顯示的效果。

TO_INT: MOV TH0,#swpH????????? //重裝定時初值
MOV TL0,#swpL
//利用位21H控制高低位的數(shù)據(jù)顯示
MOV P0,42H??????????? //溫度高位傳送到P0
ORL P0,#00100000B????????? //選通P0.5,控制高位數(shù)碼管顯示
LCALL DELAY_10MS

dsl:? MOV P0,43H????????? //溫度的低位數(shù)據(jù)傳送到P0
ORL P0,#00010000B??????? //選通P0.4,控制低位數(shù)碼管顯示
kkk:???????????????? //求反
RETI?????????? //中斷返回

?

超溫檢測

51單片機溫度報警器匯編語言,單片機,嵌入式硬件,51單片機

?

報警電路

在溫度轉(zhuǎn)化完成后,將數(shù)據(jù)存儲在34H,將軟件中設(shè)置的溫度閾值與之相比較,利用CJNE與JNC指令來完成比較大小操作,達到在溫度超過溫度閾值時,P1.0置1,蜂鳴器報警操作。

JIXU: NOP
MOV B,#10
DIV AB
MOV 43H,B
MOV B,#10
DIV AB
MOV 42H,B
MOV 41H,A??????? //分離兩位溫度值的十位(存到B)個位(存到A)
MOV A,#wenduyuzhi
CJNE A,34H,BEED
LJMP FANHUI
BEED:?? JNC FANHUI
??????? CLR P1.0
LCALL DELAY
??????? CLR C
FANHUI: RET
DELAY:
?????? SETB TR1
MOV 35H,#5
JISHI: CLR TF1
?????? MOV TH1,#0D8H
MOV TL1,#0F0H
JNB TF1,$
?????? DJNZ 35H,JISHI
?????? SETB P1.0 ??
NOP
CLR TR1
SETB EA
RET

?

9.問題與解決方案

1)DS18B20對于數(shù)據(jù)的讀取、檢測等方式講究嚴格的時序,在編寫程序的過程中,需要考慮好相應指令所需的機器周期,以及進行相應的延時操作來讀寫數(shù)據(jù)。我再實驗過程中尤其是讀取DS18B20傳輸過來的數(shù)據(jù)時,最開始一直不對,根本原因就是時序延時沒有掌握好,掌握好延時和時序后,就能夠順利讀取數(shù)據(jù)。

2)在對DS18B20操作時需要,講究遵守規(guī)則,需要先復位,跳過 ROM,才能進行讀寫,更改初值等操作。在編寫代碼的過程中,需要嚴格歷經(jīng)這三個過程,不要漏步跳步。

3)動態(tài)數(shù)碼管的溫度顯示要求時刻不斷對數(shù)碼管有數(shù)據(jù)輸入,不能延遲太大導致肉眼可見的掉幀現(xiàn)象,將顯示函數(shù)寫入函數(shù)放在10ms一次的定時器中斷當中,完成10ms刷新一次的功能。

4)DS18B20的溫度數(shù)據(jù)傳入或給溫度傳感器的寫入都是從地位開始輸出,在調(diào)試過程中沒有注意到這個問題導致,溫度讀取的數(shù)據(jù)一直有錯誤,一直到重新看了一邊DS18B20后注意到這個細節(jié),專門寫了一個輸入和讀取函數(shù),與RRC指令相配合達到正確輸入和讀取數(shù)據(jù)。

10.總結(jié)

這次自主實驗,給了我很大的鍛煉,這與二位倒計時完全不同,還要重新學習使用溫度傳感器DS18B20溫度傳感器,對于初學的我還是有著不小的挑戰(zhàn)。在嘗試的過程中,使用DS18B20就出現(xiàn)了很多錯誤,有關(guān)于時序的把握,寫入數(shù)據(jù)與讀取數(shù)據(jù)的順序以及如何實現(xiàn)這些東西都需要去研讀使用說明,并配合自己的嘗試來得到正確的使用方法。動態(tài)數(shù)碼管的顯示方法也是我在這次實驗中所學習到的。當然不僅僅只是這個電路圖所呈現(xiàn),我在過程中做過很多嘗試,嘗試過用鎖存器74HC574來作為動態(tài)數(shù)碼管的輸入,對于數(shù)據(jù)顯示的方式也采用過將顯示子程序放在主函數(shù)中,實驗的過程中有不斷地嘗試與試錯,可能最終沒有被我采納,但我也學習到了更多的知識。其次單片機,也讓我體會到了知識的交叉與融合,在選取硬件設(shè)備過程中我用到了上一學期所學的數(shù)電模電相關(guān)知識。

通過這次實驗我更加充分的理解了中斷、定時器、引腳輸入輸出、外部傳感器的使用相關(guān)知識,讓我對單片機從毫不了解到逐漸熟悉地一步步走來。我個人對單片機很感興趣,我也自己買了一套硬件設(shè)備,在后續(xù)中我也會繼續(xù)嘗試自己學習,感謝老師在這一學期地悉心指點與教學。

代碼

DAT BIT P3.7??????????? //定義P3.7為DQ線
swpH EQU 0D2H
swpL EQU 0FFH
wenduyuzhi DATA 10
WDLSB DATA 30H
WDMSB DATA 31H?????????? //定義讀出溫度高低字節(jié)存放的地址
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TO_INT
ORG 0100H
?//10ms中斷函數(shù)
TO_INT: MOV TH0,#swpH????????? //重裝定時初值
MOV TL0,#swpL
//利用位21H控制高低位的數(shù)據(jù)顯示
MOV P0,42H??????????? //溫度高位傳送到P0
ORL P0,#00100000B????????? //選通P0.5,控制高位數(shù)碼管顯示
LCALL DELAY_10MS

dsl:? MOV P0,43H????????? //溫度的低位數(shù)據(jù)傳送到P0
ORL P0,#00010000B??????? //選通P0.4,控制低位數(shù)碼管顯示
kkk:???????????????? //求反
RETI?????????? //中斷返回

MAIN:? CLR EA
MOV TMOD,#11H???????? //定時初始化
MOV TH0,#swpH???????? //定時器裝初值
MOV TL0,#swpL
SETB EA????????? ?//開中斷、允許T0中斷、啟動T0
SETB ET0
SETB TR0
MOV? R2,#2
MOV? R0,#42H???????? //定義緩沖單元42H
OVER: MOV @R0,#00H????????? //清零緩沖單元42H、43H
INC R0??????????? //自加一指向43H
DJNZ R2,OVER
LOOP: LCALL DSWD?????????? //調(diào)用讀出溫度子程序
SJMP? LOOP
DSWD: LCALL RSTSNR????????? //調(diào)用復位子程序
JNB F0,KEND?????????? //判斷是否應答
MOV R0,#0CCH????????? //應答后,寫入跳過ROM匹配命令
LCALL SEND_BYTE
MOV R0,#44H?????????? //寫入溫度轉(zhuǎn)換命令
LCALL SEND_BYTE
SETB EA
MOV 48H ,#1??????????? //延時75ms以上準備讀
SS2: MOV 49H,#255
SS1: MOV? 4AH,#255
SS0: DJNZ 4AH,SS0
DJNZ 49H,SS1
DJNZ 48H,SS2
CLR? EA????????????? //禁止中斷
LCALL RSTSNR
JNB F0,KEND???????????? //應答后 跳轉(zhuǎn)
??????????? MOV R0,#0CCH????????????????? ? ???????????????????????????????? ?
LCALL SEND_BYTE
MOV R0,#0BEH??????????? //寫入讀取溫度指令
LCALL SEND_BYTE
LCALL READ_BYTE????????? //讀一個字節(jié)溫度(低8字節(jié))
MOV WDLSB,A
LCALL READ_BYTE????????? //讀一個字節(jié)溫度(低8字節(jié))
MOV WDMSB,A
LCALL TRANS12
KEND:?? SETB EA????????????? //開中斷
RET

//溫度轉(zhuǎn)換程序(只取整)
TRANS12:MOV A,30H??????? //低字節(jié)數(shù)據(jù)傳入A?????? 00000 1111 1010 0000
ANL A,#0F0H
MOV 3AH,A
MOV A,31H
ANL A,#0FH
ORL A,3AH
SWAP A???????? //得到表示溫度整數(shù)部分的8位二進制數(shù)
MOV 34H,A

JIXU: NOP
MOV B,#10
DIV AB
MOV 43H,B
MOV B,#10
DIV AB
MOV 42H,B
MOV 41H,A??????? //分離兩位溫度值的十位(存到B)個位(存到A)
MOV A,#wenduyuzhi
CJNE A,34H,BEED
LJMP FANHUI
BEED:?? JNC FANHUI
??????? CLR P1.0
LCALL DELAY
??????? CLR C
FANHUI: RET

?//發(fā)送一個字節(jié)子程序
SEND_BYTE:MOV A,R0
MOV R5,#8
SEN3: CLR C
RRC A
JC SEN1
LCALL WRITE_0
SJMP SEN2
SEN1: LCALL WRITE_1
SEN2: DJNZ R5,SEN3????? //循壞8次,發(fā)送一個字節(jié)
RET

//讀一個字節(jié)程序
READ_BYTE:MOV R5,#8
READ1: LCALL READ
RRC A
DJNZ R5,READ1
MOV R0,A
RET

//復位程序
RSTSNR: SETB DAT?????????? //拉高DQ
NOP
NOP
CLR DAT??????????? //拉低DQ 600
μs
MOV R6,#250
DJNZ R6,$
MOV R6,#50
DJNZ R6,$
??????????? SETB DAT?????????????????????????????????????????????????? ? //釋放DQ
MOV R6,#15
DJNZ R6,$
lCALL CHCK??????????? //調(diào)用應答回應判斷程序
MOV R6,#60
DJNZ R6,$
SETB DAT
RET

CHCK: MOV C,DAT????????????? //進位標志位
JC RST0??????????? //DAT為1 跳轉(zhuǎn)
SETB F0??????????? //DAT為0 應答信號 置位 F0
SJMP CHCK0
RST0:? CLR F0??????????? //為準備好 F0復位
CHCK0: RET

//寫0程序
WRITE_0:CLR DAT
MOV R6,#30
DJNZ R6,$
SETB DAT
RET
//寫1程序
WRITE_1:CLR DAT
NOP
NOP
NOP
NOP
NOP
SETB DAT
MOV R6,#30
DJNZ R6,$
RET

//讀一位數(shù)據(jù)
READ: SETB DAT???? //產(chǎn)生讀時序
NOP
NOP
CLR DAT
NOP
NOP
SETB DAT???? //置位DAT準備接受數(shù)據(jù)
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOV C,DAT
MOV R6,#23
DJNZ R6,$
RET
DELAY:
?????? SETB TR1
MOV 35H,#5
JISHI: CLR TF1
?????? MOV TH1,#0D8H
MOV TL1,#0F0H
JNB TF1,$
?????? DJNZ 35H,JISHI
?????? SETB P1.0?? ??
NOP
CLR TR1
SETB EA
RET
DELAY_10MS:
?????? SETB TR1
?????? MOV TH1,#0D8H
MOV TL1,#0F0H
JNB TF1,$
CLR TF1
CLR TR1
RET
END

?文章來源地址http://www.zghlxwxcb.cn/news/detail-529823.html

到了這里,關(guān)于單片機溫度檢測高溫報警系統(tǒng) 匯編語言的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包