亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
單片機主機通過DS18B20測溫,從機接收并且實時顯示溫度(匯編程序與仿真)
[打印本頁]
作者:
oreooooo
時間:
2018-9-24 10:43
標題:
單片機主機通過DS18B20測溫,從機接收并且實時顯示溫度(匯編程序與仿真)
單片機系統設計實驗報告
0 實驗任務
所設計的主從式多級通信系統有一個主機和兩個從機,其中1#從機的地址設為01H,2#從機的地址設為02H。
主機的RXD和從機的TXD相連,TXD和從機的主機的RXD相連,主機的P1口接2個按鈕開關,一個代表1#從機,另一個代表2#從機,主機根據開關的狀態,發送要訪問的從機的地址,地址相符的從機則點亮發光二極管以示和主機進行通信,然后主機向從機發送數據,從機將接收到的數據進行顯示。當按下從機1#的按鈕的時候,主機會將實時溫度發送給從機,從機通過LCD 1602顯示溫度。P2.4引腳上的發光二極管指示和主機的通信狀態。
主機和從機串口都設置為方式3,波特率為9600。主機發送地址時,TB8為1,主機發送數據時,TB8為0。從機在監聽狀態時SM2設置為1,接收到的地址若和本機地址相符,點亮P2.0引腳上的發光二極管以示和主機聯絡成功,并置SM2為0,準備接收數據,否則SM2仍維持為1不變,不接收數據。從機接收完數據后,將接收到的數據送顯示,然后從機將SM2設置為1,返回到監聽狀態。主機根據按鈕開關的狀態,和相應的從機進行通信。
1 系統方案
1.1 系統分析
根據系統功能要求,可將系統組成結構分為四大部分。單片機控制中心、DS18B20測溫模塊、LCD 1602顯示模塊、中斷觸發模塊。
其中,單片機控制中心是核心。DS18B20測溫模塊是數據輸入的主要來源,可以實時測溫;LCD 1602顯示模塊是將溫度實時顯示,用于顯示測量地點的溫度;報警模塊是監視測量地點的溫度有沒有超出可接受范圍,如果超出,報警模塊會以聲音方式報警。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
(36.13 KB, 下載次數: 39)
下載附件
2018-9-25 02:10 上傳
0.png
(7.32 KB, 下載次數: 34)
下載附件
2018-9-25 02:09 上傳
單片機匯編語言源程序如下(主機):
;采用11.0592MHZ晶振
;++++++++++++執行DJNZ需要兩個時間周期+++++++++++++
;T0定時器 方式1 16位計數
;1.init
;2.skip rom
;3.convert-t
;4.init
;5.skip-rom
;6.read
;7.receive-data
;8.cal
;9.display
DAT BIT P3.7 ;定義P3.7口為DQ線
WDLSB DATA 30H ;定義讀出溫度低字節,將溫度低字節放在30H
WDMSB DATA 31H ;定義讀出溫度高字節,將溫度高字節放在31H
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT_EXT0 ;外部中斷0入口
ORG 0013H
LJMP INT_EXT1 ;外部中斷1入口
ORG 0100H
MAIN:
MOV SP,#60H ;設置堆棧指針
SETB EX0 ;允許外部中斷0產生中斷
SETB IT0 ;外部中斷0為跳沿觸發方式
SETB EX1 ;允許外部中斷1產生中斷
SETB IT1 ;外部中斷1為跳沿觸發方式
SETB EA ;總中斷打開
MOV IP,#01H
;---DS18B20測溫子程序---
LCALL DS18B20_TP ;調用DS18B20測溫子程序
HERE:
LJMP HERE
;----外部中斷0子程序
INT_EXT0: ;外部中斷子程序
CLR EA ;CPU關中斷
PUSH PSW ;現場保護
PUSH ACC
SETB EA ;總中斷允許位
MOV TMOD,#20H ;選擇定時器T1,波特率是9600
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1 ;運行定時器T1
MOV SCON,#0D8H ;設置串口通信為方式3,SM2=0,RE=1,TB8=1
MOV PCON,#00H ;*****SMOD=0
MOV IE,#00H
MT1:
MOV SBUF,#01H ;發送1#從機地址,呼叫1#從機
LT1:
JBC TI,LT2 ;判TI?TI=1,跳轉L2,并將TI=0;否則往下執行
LJMP LT1
LT2:
JBC RI,ST1 ;等待從機應答,如果接收完成,RI=1,轉S1,RI=0;
;如果RI=0,往下執行
LJMP LT2 ;未接收完成,跳轉L2繼續等待
ST1:
MOV A,SBUF ;取出應答地址
XRL A,#01H ;判斷是否1#從機應答
JZ RIGHTT ;是從機1#應答,轉發送數據
LJMP MT1 ;如果不是1#從機應答,重新呼叫
RIGHTT:
CLR TB8 ;聯絡成功,清TB8,發送數據
;---啟動發送個位溫度數據
MOV SBUF,43H ;啟動發送個位溫度數據
TRANS_L:
JBC TI,OK ;TI=1,發送完成,并且清零TI,轉NEXT
;TI=0,轉WAIT繼續等待
LJMP TRANS_L
;---接收從機發送過來的確認信息#0FFH
OK:
JBC RI,RECEIVE_OK ;主機等待從機應答,如果接受完畢,RI=1,并且轉RECEIVE_OK
LJMP OK
RECEIVE_OK:
MOV A,SBUF
XRL A,#0FFH
JZ TRANS_H
LJMP MT1
;---啟動發送十位溫度數據
TRANS_H:
MOV SBUF,42H ;---啟動發送十位溫度數據
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MOV A,42H
MOV DPTR,#TAB ;翻譯子程序,將段碼表首地址放入DPTR
MOVC A,@A+DPTR ;查表后將鍵號對應的段碼送入ACC
MOV P2,A ;將ACC值送入P2孔
WAIT_H:
JBC TI,NEXTT ;RI=1,發送完成,并且清零RI,轉NEXT
;RI=0,轉WAIT繼續等待
LJMP WAIT_H ;啟動發送十位溫度數據
NEXTT:
CLR EA ;關中斷
POP ACC ;現場恢復
POP PSW
SETB EA ;打開中斷
RETI
;----外部中斷1子程序
INT_EXT1:
CLR EA ;CPU關中斷
PUSH PSW ;現場保護
PUSH ACC
SETB EA ;總中斷允許位
MOV TMOD,#20H ;選擇定時器T1,波特率是9600
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1 ;運行定時器T1
MOV SCON,#0D8H ;設置串口通信為方式3,SM2=0,RE=1,TB8=1
MOV PCON,#00H ;*****SMOD=0
MOV IE,#00H
M1:
MOV SBUF,#02H ;發送2#從機地址,呼叫2#從機
L1:
JBC TI,L2 ;判TI?TI=1,跳轉L2,并將TI=0;否則往下執行
LJMP L1
L2:
JBC RI,S1 ;等待從機應答,如果接收完成,RI=1,轉S1,RI=0;
;如果RI=0,往下執行
LJMP L2 ;未接收完成,跳轉L2繼續等待
S1:
MOV A,SBUF ;取出應答地址
XRL A,#02H ;判斷是否1#從機應答
JZ RIGHT ;是從機1#應答,轉發送數據
LJMP M1 ;如果不是1#從機應答,重新呼叫
RIGHT:
CLR TB8 ;聯絡成功,清TB8,發送數據
;---發送數據發送
MOV SBUF,#02H ;啟動發送數據發送
WAIT:
JBC TI,NEXT ;RI=1,發送完成,并且清零RI,轉NEXT
;RI=0,轉WAIT繼續等待
LJMP WAIT
NEXT:
CLR EA ;關中斷
POP ACC ;現場恢復
POP PSW
SETB EA ;打開中斷
RETI
;---DS18B20測溫程序---
DS18B20_TP:
PUSH PSW ;現場保護
PUSH ACC
;---清兩個顯示緩沖單元41H
MOV R2,#3 ;清兩個顯示緩沖單元42H(保存溫度值的十位),43H(保存溫度值的個位)
MOV R0,#41H
OVER:
MOV @R0,#00H
INC R0 ;指針R0執行42H
DJNZ R2,OVER
LOOP:
;---讀寫DS18B20子程序
LCALL DSWD ;調用讀寫DS18B20子程序
LJMP LOOP ;循環讀芯片的溫度
DSWD:
;關中斷
CLR EA
;---復位子程序(初始化)
LCALL RSTSNR ;調用復位子程序(INIT)
;---寫跳過ROM命令
JNB F0,KEND ;如果DS18B20沒有應答,跳KEND
MOV R0,#0CCH ;跳過ROM匹配命令
LCALL SEND_BYTE ;發送一字節的跳過ROM匹配命令
;---溫度轉換命令
MOV R0,#44H ;溫度轉換命令
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 ;復位程序(init)
JNB F0,KEND
MOV R0,#0CCH ;skip-rom指令
LCALL SEND_BYTE ;發送一字節的跳過ROM指令
MOV R0,#0BEH ;讀DS18B20溫度指令
LCALL SEND_BYTE ;發送一字節的溫度轉化指令
LCALL READ_BYTE ;讀一個字節的溫度值
MOV WDLSB,A ;讀一字節定位溫度值(低字節)
LCALL READ_BYTE ;讀一個字節的溫度值
MOV WDMSB,A ;讀一字節定位溫度值(高字節)
LCALL TRANS ;調用溫度轉換子程序,以便顯示溫度
KEND:
SETB EA ;打開中斷
RET
;---主程序完成---**************************************
;---復位子程序**************************************
RSTSNR:
SETB DAT ;拉高DQ總線↑
NOP
NOP
CLR DAT ;拉低DQ總線↓
;---延時500μm
MOV R6,#250
DJNZ R6,[ DISCUZ_CODE_1 ]nbsp; ;250*2=500us DJNZ需要兩個時間周期
SETB DAT ;DQ=1↑ 釋放總線的控制權,IO轉為輸入↑
;---延時68μm
MOV R6,#34 ;延時68us
DJNZ R6,[ DISCUZ_CODE_1 ]nbsp;
LCALL CHCK ;調用應答子程序,判斷DS18B20是否可獲得
;---延時500μm
MOV R6,#250
DJNZ R6,[ DISCUZ_CODE_1 ]nbsp; ;延時500us
SETB DAT ;DQ=1↑
RET
CHCK:
MOV C,DAT ;讀出DQ數據
MOV P1.7,C
JC RST0 ;如果DQ=0說明DS18B20可獲得,DQ=1,DS18B20不可獲得
SETB F0 ;標志位F0=1,DS18B20存在
LJMP CHCK0 ;子程序返回
RST0:
CLR F0 ;標志位F0=1,DS18B20不存在
CHCK0:
RET
;---復位子程序完成**************************************
;---發送一字節的跳過ROM匹配命令子程序**************************************
SEND_BYTE:
MOV A,R0 ;發送一字節的子程序
MOV R5,#8 ;循環發送8次
SEND:
CLR C
RRC A
JC SEN1
LCALL WRITE_0
LJMP SEN2
SEN1:
LCALL WRITE_1
SEN2:
DJNZ R5,SEND
RET
;---寫0子程序---
WRITE_0:
CLR DAT ;DQ=0↓
;---延時68μm
MOV R6,#34
DJNZ R6,[ DISCUZ_CODE_1 ]nbsp; ;延時68us,34*2=68us
SETB DAT ;釋放總線控制權
NOP
NOP
RET
;---寫1子程序---
WRITE_1:
CLR DAT ;DQ=0↓
NOP
NOP
SETB DAT ;DQ=1↑
;---延時68μm
MOV R6,#34
DJNZ R6,[ DISCUZ_CODE_1 ]nbsp; ;延時68us
NOP
NOP
RET
;---發送一字節的跳過ROM匹配命令子程序完成**************************************
;---讀一個字節的溫度子程序--*******************************
READ_BYTE:
MOV R5,#8
READ1:
LCALL READ
RRC A
DJNZ R5,READ1
MOV R0,A ;把溫度值保存在R0中
RET
READ:
CLR DAT ;DQ=0↓
NOP
NOP
SETB DAT ;DQ=1↑ 準備接收數據
NOP
NOP
MOV C,DAT ;單片機讀數據。C中保存DS18B20發送過來的數據
;---延時68μm
MOV R6,#34
DJNZ R6,[ DISCUZ_CODE_1 ]nbsp; ;延時68um
RET
;---讀一個字節的溫度子程序完成--*******************************
;---溫度轉換子程序---*************************************
TRANS:
MOV A,30H ;溫度轉換程序(只取整數),30H=LSM,31H,MSB(加入收到溫度是125 A=0000 0111 1101 0000)
ANL A,#0F0H ;保留低八位的整數位 A=1101 0000
MOV 3AH,A
MOV A,31H
ANL A,#0FH ;保留高八位的正數位 A=0000 0111
ORL A,3AH ;取出八位正整數
SWAP A
MOV B,#10
DIV AB
MOV 43H,B ;41H保存著個位數
MOV B,#10
DIV AB
MOV 42H,B ;42H保存著十位數
MOV 41H,A ;43H保存著百位數
RET
;---溫度轉換子程序---*************************************
POP ACC ;現場恢復
POP PSW
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共陽極段碼表
;---程序結束---
END
復制代碼
所有資料51hei提供下載:
05主機測溫發送給從機顯示溫度(LCD版).rar
(149.73 KB, 下載次數: 40)
2018-9-25 02:11 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
979856362dlut
時間:
2020-7-30 11:07
你好,我想問下,這個仿真電路圖里 從機1的P1.0,P1.1,P1.2口我沒有找到連接了什么元件。主機的P1口也沒有接按鈕開關,是INT1和INT0連接的按鈕開關呀。
作者:
黑天科技
時間:
2021-3-22 21:20
樓上的,連上了,總線的
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1