




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、基于485總線的超聲波的液位測量與控制系統(tǒng)一、 設(shè)計任務(wù)和性能指標 設(shè)計任務(wù)1、從機能夠在現(xiàn)場對油罐或水罐的液位高度和現(xiàn)場的溫度進行采集,能夠基于液位的情況對油泵或水泵進行控制,能夠把現(xiàn)場采集到的信息和設(shè)備的狀態(tài)信息傳送給上位機485總線。2、對上位機,要求能夠動態(tài)顯示不同485節(jié)點的液位、溫度及泵的工作狀態(tài)。能夠方便的通過人機界面對通訊參數(shù)進行設(shè)置。3、基于上述要求,用protel完成硬件系統(tǒng)設(shè)計主要是485節(jié)點的硬件局部,要考慮電磁兼容和抗干擾設(shè)計等內(nèi)容。4、軟件系統(tǒng)設(shè)計,要求學院能夠熟練應(yīng)用VB(或VC)、匯編、C語言等工具編寫應(yīng)用程序從機數(shù)據(jù)采集、通訊、上位機人機界面設(shè)計、通訊程序。性
2、能指標液位顯示:用三位LED數(shù)碼管進行顯示單位是CM;在上位機上動態(tài)顯示。環(huán)境溫度:用四位數(shù)碼管進行顯示溫度,單位是mm。測距范圍:20mm到 4000mm之間。鍵盤功能定義:1.當enter鍵按下之后,鎖定led,使顯示的數(shù)字固定,便于計數(shù)。cancel鍵按下之后,取消led鎖定。2.按下up鍵,屏幕顯示當前溫度,按下cancel鍵后,恢復顯示位移單片機接口: 5 P3.3為觸發(fā)信號的輸出TRIG, P3.2外部方式0,接回響信號ECHO, P3.4為RS-485的控制信號, P0.6接18b20的端口, P0.4為設(shè)備1的接口, P0.5為設(shè)備2的接口。6 通信標準:轉(zhuǎn)換部件把上位機的RS
3、232轉(zhuǎn)換成RS485,然后單片機接收到485電平之后,通過MAX485把485電平轉(zhuǎn)換成TTL電平,從而實現(xiàn)了上位機和單片機的通信二、 設(shè)計方案按照系統(tǒng)設(shè)計的功能的要求,初步確定設(shè)計系統(tǒng)由單片機主控模塊、電源模塊、顯示模塊、鍵掃描模塊、超聲波發(fā)射模塊,超聲波接收模塊,溫度補償模塊共七個模塊組成。主控芯片使用51系列STC89C52單片機,該單片機工作性能穩(wěn)定,同時也是在單片機課程設(shè)計中經(jīng)常使用到的控制芯片。本設(shè)計在接受模塊采用了由索尼公司生產(chǎn)的CX2016A紅外接收芯片來實現(xiàn)超聲波的接收。本大作業(yè)用的是HC-SR04超聲波傳感器,可提供20mm4000mm的非接觸式距離感測功能,測距精度可達
4、3mm;模塊包括超聲波發(fā)射器、接收器與控制電路。工作電壓為DC 5v,測量角度為15度,輸入觸發(fā)信號為10us的TTL脈沖,輸出TTL電平信號,與射程成比例。實驗證明其具有很高的靈敏度和較強的抗干擾能力。同時通過改變局部參數(shù)來改變接受電路的靈敏度和抗干擾能力,所以我們采用該芯片作為接收模塊主要組成局部。HC-SR04超聲波模塊測距采用IO口TRIG觸發(fā)測距,給至少10us的高電平信號,模塊自動發(fā)送8個40khz的方波,自動檢測是否有信號返回。有信號返回,那么通過IO口ECHO輸出一個高電平,高電平持續(xù)的時間就是超聲波從發(fā)射到返回的時間。測試距離=高電平時間*聲速/2;系統(tǒng)設(shè)計框圖如圖2-1超聲
5、波接收模塊超聲波發(fā)射模塊單片機控制系統(tǒng)STC89C52顯示模塊鍵盤模塊溫度補償模塊DS18B20圖2-1系統(tǒng)設(shè)計框圖 三、系統(tǒng)硬件設(shè)計硬件電路的設(shè)計主要包括單片機系統(tǒng)及顯示電路、溫度補償電路,超聲波發(fā)射電路和超聲波檢測接收電路四局部。單片機采用STC89S52或其兼容系列。采用12MHz高精度的晶振,以獲得較穩(wěn)定時鐘頻率,減小測量誤差。單片機用P端口輸出超聲波換能器所需的40kHz的方波信號,利用外中斷0口監(jiān)測超聲波接收電路輸出的返回信號。顯示電路采用簡單實用的4位共陽LED數(shù)碼管,段碼用74LS273驅(qū)動。3.1 單片機最小系統(tǒng)5l系列單片機中典型芯片(STC89S52)采用40引腳雙列直插
6、封裝(DIP)形式,內(nèi)部由CPU, ROM、 RAM、定時計數(shù)器TO和T1,4個8 位的全雙工IO端 P0,P1,P2,P3,一個全雙功串行通信口等組成。特別是該系列單片機片內(nèi)的Flash可編程、可擦除只讀存儲器(EPROM),使其在實際中有著十分廣泛的用途,在便攜式、省電及特殊信息保存的儀器和系統(tǒng)中更為有用。該系列單片機所組成的最小系統(tǒng)如圖3-1所示。圖3-1單片機最小系統(tǒng)原理圖3.2 超聲波發(fā)射電路超聲波發(fā)射電路原理圖如圖2-2所示。單片機P1.0端口輸出的40kHz的方波信號.HC-SR04超聲波模塊測距采用IO口TRIG觸發(fā)測距,給至少10us的高電平信號,模塊自動發(fā)送8個40khz的
7、方波,自動檢測是否有信號返回。有信號返回,那么通過IO口ECHO輸出一個高電平,高電平持續(xù)的時間就是超聲波從發(fā)射到返回的時間。測試距離=高電平時間*聲速/2。P1.0連接TRIG引腳,發(fā)送驅(qū)動信號,INT0連接ECHO引腳接收回響信號。VCC接+5V引腳,GND接地。 圖3-2 超聲波發(fā)射電路原理圖 3.3 超聲波檢測超聲波通過ECHO接收超聲波發(fā)生器產(chǎn)生的超聲波的回響信號,然后接收引腳產(chǎn)生一段時間的高電平,然后這就是超聲波從發(fā)送到接收到的時間。如果測出這段時間的長度,就可以求出具體的距離是多少。圖3-3 超聲波接收電路原理圖 3.4 溫度補償電路溫度傳感器使用了DSl8B20數(shù)字溫度計提供可
8、選擇的12位(二進制)溫度讀數(shù)來指示周圍環(huán)境的溫度信息。經(jīng)過單線接口DQ與單片機進行數(shù)據(jù)交互。從主機CPU到DSl8B20僅需一條數(shù)據(jù)接線(和地線)。DSl8B20的電源可以由數(shù)據(jù)線本身提供而不需要接外部電源。由于每一個DSl8B20在出廠時已經(jīng)給定了唯一的序號因此任意多個DSl8B20可以存放在同一條單線總線上實現(xiàn)多點溫度測量。溫度傳感器DSl8B20的測溫范圍從-55攝 氏度到+125攝氏度增量值為度可在l s(典型值)內(nèi)把溫度變換成數(shù)字量,因此采用DS18B20實現(xiàn)溫度補償電路的設(shè)計。圖3-4 溫度補償電路原理圖 3.5 顯示電路 顯示電路主要由74ls273芯片驅(qū)動,用PNPC8550
9、三級管進行位選,七段共陽極數(shù)碼管顯示,硬件電路圖如圖3-5所示:圖3-5 顯示電路原理圖 四. 系統(tǒng)軟件設(shè)計4.1 主程序設(shè)計主程序中包括溫度補償子程序,計算子程序,顯示子程序,鍵盤掃描程序,測距程序,校正偏差程序:在主程序設(shè)計中,我們采用了匯編編程。首先進行系統(tǒng)初始化。然后鍵盤掃描,判斷那個鍵按下,然后執(zhí)行相應(yīng)的操作。第三,執(zhí)行測距程序,測得當前的距離對應(yīng)的時間,然后通過時間*速度=位移,求出相應(yīng)的距離,然后放在顯示緩沖區(qū)數(shù)碼管顯示。第四,復位18b20,然后經(jīng)過一系列過程測得當前的溫度。第五,因為超聲波在空氣中的傳播速度跟溫度有關(guān),所以根據(jù)第四步得到的溫度進行溫度校正。最后,運行顯示程序,
10、顯示得到的距離。;*主程序*MAIN:MOV SP,#70HCLR P3.2 ;與超聲波傳感器有關(guān)的接口MOV A,#00HMOV BUFGAO,A MOV BUF0,#00H ;最后溫度 MOV BUF1,A MOV BUF2,A MOV BUF3,A CLR FLAG_SERIAL CLR FLAG03 CLR FLAG07 CLR FLAG11 CLR FLAG13 CLR FLAG14 CLR FLAG15 MOV KEY_NUM,#00H CLR FLAG3 ;正or負標志位 CLR FLAG1 ;初始化標志 SETB EA ;開總中斷 SETB ET0 ;T0 MOV TMOD,#
11、21H ;T0方式1,T1方式2 MOV TL1,#0FDH ;設(shè)置T1的波特率 MOV TH1,#0FDH SETB TR1 MOV SCON,#50H ;方式1,REN=1允許接受; MOV SCON,#0F0H SETB ES CLR P3.4 ;控制RS_485的控制引腳,使RS-485處于接收狀態(tài) MOV TL0,#00H MOV TH0,#00H MOV TEMP,#2LOOP:LCALL KEY_SCAN;*以下為標志位定義*;判斷各標志位是否為1,然后執(zhí)行相應(yīng)的動作 JNB FLAG_SERIAL,C0 ; 串行中斷標志位如果為1,那么把當前求出的位移,一定時間內(nèi)往上位機發(fā)送一
12、次。C0: JNB FLAG14,C1 ;cancel鍵 CLR FLAG03 CLR FLAG07 CLR FLAG11 CLR FLAG13 CLR FLAG14 CLR FLAG15C1: JNB FLAG03,C2 ;up鍵 LJMP DDDDC2: JNB FLAG07,C3 ;down鍵 C3: JNB FLAG11,C4 ;setup鍵C4: JNB FLAG13,C5 ;偏移量為十三的,鍵按下,動作,小數(shù)點C5: JNB FLAG15,C6 ;enter鍵 LJMP BBBBC6: LCALL DISPLAY DJNZ TEMP,LOOP LCALL MEASURE ;測得時間
13、 LCALL CHULI ;時間*速度=位移 LCALL JIAOZHENG ;校正偏差 LCALL BTOD ;把二進制轉(zhuǎn)換成十進制,然后放在顯示區(qū)顯示; LCALL DISPLAY LCALL DISPLAYDDDD:LCALL INITIAL ;復位程序 JB FLAG1,AAAA ;復位成功跳轉(zhuǎn) RETAAAA: LCALL TEMPERATURE ;復位成功跳轉(zhuǎn) JNB FLAG03,CCCC ;顯示溫度 MOV A,BUF0 ;取出溫度 MOV B,#100 DIV AB MOV BUF1,A ;BUF1是第四位置上的led,最右邊的 MOV A,B MOV B,#10 DIV A
14、B MOV BUF2,A ;BUF2是第三位置上的led,倒數(shù)第二位 MOV BUF3,B ;BUF3是第二位置上的led,第二位 CCCC:LCALL DISPLAY LCALL GET_CURRENT_V BBBB:LCALL DISPLAY LCALL DISPLAY MOV TEMP,#0;100 LJMP LOOP 溫度補償子程序圖4-2 DS18B20時序圖 DS18B20正常工作需要嚴格的工作時序,操作起來很復雜,圖4-2給出的是DS18B20的時序圖,其控制程序如下:TEMP: SETB DQ NOP CLR DQ MOV R0,#0FBH TSR1: DJNZ R0,TSR1
15、 SETB DQ MOV R0,#25H ; TSR2: JNB DQ TSR3 DJNZ R0,TSR2 ; TSR3: SETB FLAG1 CLR P2.0 AJMP TSR5 TSR4: CLR FLAG1 LJMP TSR7 TSR5: MOV R0,#06BH TSR6: DJNZ R0,TSR6 TSR7:SETB DQ RET*讀轉(zhuǎn)換后的溫度值*GET_TEMPER: SETB DQ LCALL TEMP JB FLAG1,TSS2 RET TSS2:MOVA,#0CCH LCALL WRITE_18B20 MOVA,#44H LCALL WRITE_18B20 LCALL T
16、EMP MOV A,#0CCH LCALL WRITE_18B20 MOV A,#0BEH ; LCALL WRITE_18B20 LCALL READ2_18B20 ; RET*寫ds18b20匯編程序* WRITE_18B20: MOV R2,#8 CLR C WR1:CLR DQ MOV R3,#6 DJNZ R3,$ RRC A MOV DQ,C MOV R3,#23 DJNZ R3,$ SETB DQ NOP DJNZ R2,WR1 SETB DQ RET ; *讀18B20程序,讀出兩個字節(jié)的溫度* READ2_18B20: MOV R4,#2 ; MOV R1,#29H RE00
17、: MOV R2,#8 RE01: CLR C SETB C NOP NOP CLR DQ NOP NOP NOP SETB DQ MOV R3,#7 DJNZ R3,$ MOV C,DQ MOV R3,#23 DJNZ R3,$ RRC A DJNZ R2,RE01 MOV R1,A DEC R1 DJNZ R4,RE00 RET*讀出的溫度進行數(shù)據(jù)轉(zhuǎn)換*CHANGE: MOV A,29H ; MOVC,28H.0 RRC A RRC A RRC A RRC A MOV 29H,A 測距程序設(shè)計 HC-SR04超聲波模塊測距采用IO口TRIG觸發(fā)測距,給至少10us的高電平信號,模塊自動發(fā)送
18、8個40khz的方波,自動檢測是否有信號返回。有信號返回,那么通過IO口ECHO輸出一個高電平,高電平持續(xù)的時間就是超聲波從發(fā)射到返回的時間。測試距離=高電平時間*聲速/2 程序如下: ;*測距程序*;入口信息:無;出口信息:位移mm為單位,位于R2,R3中;影響資源:R1 R7MEASURE: MOV R0,#06H ;等待大于10us DJNZ R0,$ JNC A1 ;等待接收回響信號;*計時程序*TIMER: SETB TR0 ;外部中斷0,計算回響信號的時間進行測距A2: MOV C,P3.2 ;p3.2是echo信號,等待端口變?yōu)榈碗娖?JC A2 CLR TR0 CLR EX0
19、MOV A,TH0 ;時間的高位放在60H MOV 60H,A MOV A,TL0 ;時間的低位放在61H MOV 61H,A MOV TL0,#00H MOV TH0,#00H RET 單片機編程中問題處理1. 在編程序時最好直接用medwin編程。否那么,有的逗號分號medwin不能夠識別,會使程序產(chǎn)生錯誤的判斷。直接用仿真軟件會防止這些錯誤。2. 在位運算中,從20H,到2FH這16個單元,每個內(nèi)存單元對應(yīng)8個位地址。從20H單元的D0位開始,至2FH單元的D7位,對應(yīng)的地址依次為00H到7FH,即有:位地址=單元地址-20H)*8+位。如22H單元第零位的位地址為:位地址=22H-20
20、H)*8+0=10H。在程序中會定義許多標志位,這就用到了定義位,必須了解上面的位操作才能夠正確的分配位地址。然后正確定義位,然后用位操作完成相應(yīng)的操作,因為匯編語言中的位操作語句很多,用起來很方便。3.在單片機編程中,會有很多函數(shù)需要編寫,在編寫的時候最好在函數(shù)的頭部寫明白入口的那幾個存放器,有什么作用,這個函數(shù)有什么作用等,讓自己以后一看這個函數(shù)的開始就能夠知道這個函數(shù)具體干什么的,方面自己以后在修改或者調(diào)用函數(shù)。并且,在匯編中調(diào)用函數(shù)的時候很多需要的量都是通過先前的存放器傳入函數(shù)的,所以一定要標記各個存放器作用。養(yǎng)成良好的編程習慣。以前,編程不太注意這個,然后就是什么內(nèi)容都寫在主函數(shù)中,
21、看起來很亂,但是這次編程寫的比擬好,具體見后面的程序清單。五. 上位機程序設(shè)計在上位機中主要采用的是visual basic 編程,通過mscomm控件把下位機測得的距離和溫度傳輸?shù)诫娔X中進行動態(tài)顯示,并且通過上位機電腦控制著單片機的設(shè)備的起停。以及監(jiān)控單片機的工作情況。5.1 Mscomm 控件編程 Private Sub MSComm1_OnComm()Dim i As IntegerDim outbte(0) As Byte 定義為byte型0255Dim indata As VariantDim z1 As IntegerDim z2 As IntegerDim z3 As Integ
22、erDim bte(0 To 5) As Byte If flag_commandword = True Then 保證以下程序只執(zhí)行一次 If flag_send = True Then If Val(Text9.Text) = &HB1 Then Timer1.Interval = 0 關(guān)閉定時器1,防止時序沖突,影響單片機活動 out(0) = Val(Text8.Text) out(1) = &HA1 out(2) = &HB1 接受溫度 For i = 0 To 2 outbte(0) = out(i) MSComm1.OutBufferCount = 0 發(fā)送緩沖區(qū)清零 MSCom
23、m1.Output = outbte 把num發(fā)送出去 Next i Timer1.Interval = 500 開放定時器1,使定時器繼續(xù)發(fā)送上位機命令 flag_commandword = False End If End IfEnd If Case comEvReceive bte(0) = AscB(indata) bte(1) = AscB(Mid(indata, 2, 1)If out(2) &HB1 Then 如果上位機要求停止接受溫度是,關(guān)閉發(fā)送標志位 Shape14.Width = 0 把溫度顯示的進度條寬度變?yōu)? Text2.Text = 清空溫度顯示 flag_send
24、= FalseEnd IfIf flag_send = True Then 如果發(fā)送鍵按下之后,那么接收后兩個字節(jié) If out(2) = &HB1 Then bte(2) = AscB(Mid(indata, 3, 1) bte(3) = AscB(Mid(indata, 4, 1) End IfEnd If5.2 Visual Bisic界面5.3 Visual Basic 程序問題處理1.在上位機編程中用到了延時程序,由于單片機中用到的是軟件延時,但是在vb中很難實現(xiàn)。于是用下面一種方法進行延時,既能夠到達延時的目的,又能夠不耽誤其他的程序執(zhí)行。Private Declare Funct
25、ion timeGetTime Lib winmm.dll () As LongPublic Function YanShi(HaoMiao As Double) 延時子程序,以毫秒為單位,調(diào)用時yanshi 1000,就是延時1sDim t1t1 = timeGetTimeWhile (timeGetTime - t1 HaoMiao) DoEventsWendEnd Function2.當在畫動態(tài)顯示液位的時候要畫液罐,而且要形象立體的展現(xiàn)在面前,我畫成雙層的,外面是罐壁,里面是顯示具體的液位,這個靈感來源于 上的電池中的電量顯示。具體形狀見上圖的總體vb界面。3.在控制單片機工作的時間上
26、,由于單片機只有兩個定時器,一個用來產(chǎn)生波特率,另一個用來測得echo返回的高電平時間。因此不夠用,我就把啟動定時設(shè)備的時間設(shè)置在上位機上,用上位機的定時器來進行定時。然后完成相應(yīng)的動作。4.當然還遇到了很多問題大多是借助了MSDN解決的,尤其是對許多函數(shù)不太了解的時候,通常用“幫助然后查詢具體的參數(shù)是怎么樣定義的,這個很有用,再就是在函數(shù)出錯時,MSDN會直接給出錯誤原因并且有解決的建議,調(diào)試程序的時候有了它真的很方便。所以學會用它,對自己的vb學習是很有幫助的。 六. 調(diào)試及性能分析6.1 調(diào)試步驟調(diào)試的時候,我是調(diào)試單片機的程序,因為單片機測距是主要實現(xiàn)的功能,所以先要調(diào)試,根據(jù)顯示程序
27、的顯示結(jié)果進行調(diào)試,這樣可以更快的調(diào)試出程序。把各局部程序調(diào)試成功之后然后合在一起,再看看有沒有互相矛盾的地方,這樣單片機的程序就調(diào)試完了。上位機的調(diào)試也是重點,關(guān)鍵在mscomm控件處的調(diào)試。這個控件負責串行通信是否成功,關(guān)系到單片機測得的溫度和距離能否傳到上位機,上位機的控制命令字能否傳到單片機,即上位機能否控制單片機的設(shè)備。這個地方處理完后,在調(diào)試與溫度,液位的顯示相關(guān)的程序,因為它們是一些輔助的功能,為了更好的實現(xiàn)人機交互,所以也是重要的環(huán)節(jié),在這也要引起足夠的重視。6.2 性能分析雖然結(jié)果和預想的有很大的差距,但總體來說已經(jīng)根本上到達了要求,剛開始沒有矯正的時候,1m 誤差大約有10
28、cm,但是經(jīng)過校正之后,誤差在2mm左右,根本上到達要求。測試的距離也沒有廠家說的那么遠,不能到達4m,造成這種原因我想有以下幾個方面:1.由于我們采用的是11.0592MHZ的晶振,理論上是按照12MHZ的晶振計算的,所以對系統(tǒng)造成了一定的誤差。2.由于溫度傳感器DS18B20距離單片機較近,所采集到的溫度嚴重受到單片機的影響,造成系統(tǒng)誤差。6.3 系統(tǒng)電平標準轉(zhuǎn)化1.本大作業(yè)中用到了RS-485通信,用的就是RS-485電平,信號傳播距離遠。單片機的TTL電平經(jīng)過單片機電路板上的MAX485把電平轉(zhuǎn)化成485電平,然后通過網(wǎng)線把單片機 和上位機連接在一起。在網(wǎng)線的另一端接上一個RS-485
29、轉(zhuǎn)RS-232的接口器件,把電平轉(zhuǎn)換成計算機用的電平RS-232電平標準,實現(xiàn)單片機與計算機的通信過程。心得體會在這次完成大作業(yè)的過程中,我感覺受益匪淺,尤其是對單片機的理解上,更是上了一層樓,我覺得單片機如果你給了他完美的程序他就會像人一樣去思考去工作,很是智能的去完成任務(wù)?,F(xiàn)在可以做一個比喻,我們平時的許多行為在單片機上都有實現(xiàn)。比方我們現(xiàn)在正在工作,突然肚子餓了,我們就回去吃飯。在這個過程中,就像單片機的一個中斷處理程序,產(chǎn)生了一個內(nèi)部中斷,像單片機的定時器產(chǎn)生的中斷一樣是來自內(nèi)部的。在這個中斷程序中單片機來完成“吃飯這件事情。剛想要去吃飯,一看外面下雨了,然后我們就會帶上傘。在單片機中
30、,這有對應(yīng)著外部中斷,比方INT0,INT1一樣,中斷時來自外部的情況,這樣單片機就會通過中斷處理程序來完成帶傘這個動作。另外還有串行通信,在平時我們要通過 接收很多信息,當 接收到短信時會有提示音或者是震動,這樣就會引起我們的注意,然后就引發(fā)串行中斷,我們看短信回短信的過程就完成了單片機的串行中斷中的接受和發(fā)送數(shù)據(jù)的過程。在完成大作業(yè)期間,必須自己設(shè)計整個系統(tǒng),根據(jù)系統(tǒng)資源整體完成系統(tǒng)的資源分配。比方單片機的定時器不夠用,那么有很多定時就必須放在上位機上完成。還有IO口的安排上,也是不能夠重復的。因為系統(tǒng)比擬大,所以有很多外部設(shè)備需要接在IO口上,這樣就必須分配好,具體的分配情況要做出詳細的
31、說明,以便以后閱讀或者有新的功能需要添加的時候,知道哪個口已經(jīng)用過哪個口沒有用過,可以很快的選擇好,這樣以后功能擴展就會很輕松。現(xiàn)在感覺編程序容易調(diào)試程序難,編程序就是按照自己的想法完成編寫,但是有時候會出現(xiàn)語法或者邏輯上的錯誤,這樣就要調(diào)試,很多情況要都要花上編程的幾倍的時間來完成調(diào)試工作。到現(xiàn)在我覺得,編程高手不但要編程有思路并且調(diào)試要快,這樣才能在單位時間內(nèi)完成更多事情。還有,就是在接觸新事物的時候不要想當然,要看具體的使用說明,然后在進行操作或者說應(yīng)用。在RS-485這個地方我就是一開始沒有看說明,具體怎么用不知道我就開始接上線開始調(diào)試看看能不能通信成功,后來不行,然后才看的說明書,看
32、后我大吃一驚,原來就是一個接口的問題,設(shè)置一個接口就解決掉了這個問題,但是當時只是感覺RS-485跟RS-232一樣,就因為這個當時浪費了很長的時間。做大作業(yè)還有一點很關(guān)鍵,就是,有的知識沒有熟悉的情況下怎么處理,我們現(xiàn)在的信息都是全部公開的,可以通過書籍、網(wǎng)絡(luò),等等來查找你需要的知識。比方當時要想在vb上實現(xiàn)延時功能,然后當時就是想了很多方法都沒有實現(xiàn),后來在網(wǎng)上看了一篇文章介紹到vb延時,然后這才解決了這個問題。大作業(yè)不像是考試,不然查閱資料,不讓討論,其實現(xiàn)實工作中肯定不能像考試那樣來完成一件事情。所以,我們要學會借助于身邊的資源,然后完成自己的任務(wù),這才是明智的,古人說的好,“君子性非
33、異也,善假于物也。說確實實有道理。參考文獻1 徐維祥、劉旭敏. 單片微型機原理及應(yīng)用. 大連:大連理工大學出版社,19962 李光飛、樓然苗、胡佳文、謝象佐. 單片機課程設(shè)計與實例指導. 北京: 北京航空航天大學出版社,2004 3 余永權(quán). 89系列FLASH單片機原理及應(yīng)用. 北京:電子工業(yè)出版社,20024 李群芳,黃建. 單片機微型計算機與接口技術(shù). 北京:電子工業(yè)出版社,20015 樓然苗、李光飛. 51系列單片機設(shè)計實例. 北京:北京航空航天大學出版社,20036 王守中 51單片機開發(fā)入門與典型實例. 北京:人民郵電出版社,2021附錄1 單片機程序清單TEMP1 EQU 36H
34、TEP1 EQU 37HFLAG1 EQU 38HORG 0000HJMP STARTORG 0003HJMP PINT0;*主程序*START:MOV P3,0FFHMOV P0,0FFHMOV P1,0FFHMOV P2,0FFHMOV TMOD,#01HMOV TH0,#00HMOV TL0,#00HCLR IE0SETB PX0SETB EASETB EX0CLR IT0MOV R4,#4SETB TR0NOPNOPNOPNOPNOPNOPNOPNOPNOPDJNZ R4,KJNB IE0,$LCALL TEMPLCALL GET_TEMPERLCALL CHANGELCALL WOR
35、KLCALL DISPLAY1LJMP STARTPINT0:CLR TR0CLR EX0MOV 30H,TL0MOV 31H,TH0RETITEMP: SETB DQNOPCLR DQMOV R0,#0FBH;給延時程序賦初值TSR1: DJNZ R0,TSR1;延時SETB DQMOV R0,#25H ;給延時程序賦初值TSR2: JNB DQ ,TSR3 ; S18B20是否存在,存在就跳轉(zhuǎn)到TSR3DJNZ R0,TSR2 ;不存在等待TSR3: SETB FLAG1 ;置標志位,說明DS18B20存在;CLR P2.0 ;二極管指示AJMP TSR5TSR4: CLR FLAG1LJ
36、MP TSR7TSR5: MOV R0,#06BHTSR6: DJNZ R0,TSR6 ;延時TSR7:SETB DQ ;說明不存在RET*讀轉(zhuǎn)換后的溫度值*GET_TEMPER:SETB DQLCALL TEMPJB FLAG1,TSS2RET ;假設(shè)不存在那么返回TSS2: MOV A,#0CCH ;跳過ROMLCALL WRITE_18B20MOV A,#44H;發(fā)出溫度轉(zhuǎn)換命令LCALL WRITE_18B20LCALL TEMPMOV A,#0CCH ;跳過ROMLCALL WRITE_18B20MOV A,#0BEH ;發(fā)出讀溫度換命令LCALL WRITE_18B20LCALL
37、READ2_18B20 ;讀兩個字節(jié)的溫度RET; *寫ds18b20匯編程序*WRITE_18B20:MOV R2,#8CLR CWR1:CLR DQMOV R3,#6DJNZ R3,$RRC AMOV DQ,CMOV R3,#23DJNZ R3,$SETB DQNOPDJNZ R2,WR1SETB DQRET; *讀18B20程序,讀出兩個字節(jié)的溫度*READ2_18B20:MOV R4,#2 ;低位存在29 H,高位存在28HMOV R1,#29HRE00: MOV R2,#8RE01: CLR CSETB CNOPNOPCLR DQNOPNOPNOPSETB DQMOV R3,#7DJ
38、NZ R3,$MOV C,DQMOV R3,#23DJNZ R3,$RRC ADJNZ R2,RE01MOV R1,ADEC R1DJNZ R4,RE00RET; *讀出的溫度進行數(shù)據(jù)轉(zhuǎn)換*CHANGE: MOV A,29H ;MOV C,28H.0 ;將28H中的最低位移入CRRC ARRC ARRC ARRC AMOV 29H,ALCALL CONVERSERET;* *DISPLAY*CONVERSE: MOV A,29H;將29H中的十六進制數(shù)轉(zhuǎn)換成10進制MOV DPTR,#TABLEMOVC A,A+DPTRMOV TEMP1,ATABLE: DB 165D,165D,165D,1
39、66D,166D,166D,167D,167D,167D,167DDB 168D,168D,168D,169D,169D,169D,170D,170D,170D,171DDB 171D,171D,172D,172D,172D,173D,173D,173D,174D,174DDB 174D,174D,175D,175D,175DRET;* *計算子程序*WORK: ; MOV PSW, #18h ;選擇3區(qū)R系列存放器MOV R3, 31HMOV R2, 30HMOV R1, #00DMOV R0, TEMP1LCALL MUL2BY2MOV R3, #27HMOV R2, #10HLCALL
40、DIV4BY2LCALL HBCDRET*兩字節(jié)無符號數(shù)乘法程序*; R7R6R5R4 0) Then 如果是要啟動設(shè)備1,那么翻開定時器5 flag1 = True 置位標志位flag1 Timer5.Interval = Val(Text10.Text) * 1000 開放定時器5,開始定時Else If (Val(Text9.Text) = &HD1 And Val(Text10.Text) 0) Then 如果是要啟動設(shè)備1,那么翻開定時器5 flag2 = True 置位標志位flag2 Timer6.Interval = Val(Text10.Text) * 1000 End If
41、End IfIf Val(Text9.Text) = &HC1 Then 如果命令字要求開放設(shè)備一,那么置位flag_led1 flag1 = TrueEnd IfIf Val(Text9.Text) = &HD1 Then 如果命令字要求開放設(shè)備二,那么置位flag_led2 flag2 = TrueEnd IfIf out(0) = 1 Then 尋址那個罐子單片機 Label8.Visible = False Label2.Visible = TrueEnd IfIf out(0) = 2 Then Label8.Visible = True Label2.Visible = False
42、End IfEnd SubPrivate Sub MSComm1_OnComm()Dim i As IntegerDim outbte(0) As Byte 定義為byte型0255Dim indata As VariantDim z1 As IntegerDim z2 As IntegerDim z3 As IntegerDim bte(0 To 5) As Byte 必須保證命令字為“返回溫度的時候命令已經(jīng)發(fā)送給單片機,否那么單片機接收不到數(shù)據(jù),產(chǎn)生錯誤,此處提前發(fā)送一下保證能接收到溫度If flag_commandword = True Then 保證以下程序只執(zhí)行一次 If flag_
43、send = True Then If Val(Text9.Text) = &HB1 Then Timer1.Interval = 0 關(guān)閉定時器1,防止時序沖突,影響單片機活動 out(0) = Val(Text8.Text) out(1) = &HA1 out(2) = &HB1 接受溫度 For i = 0 To 2 outbte(0) = out(i) MSComm1.OutBufferCount = 0 發(fā)送緩沖區(qū)清零 MSComm1.Output = outbte 把num發(fā)送出去 Next i Timer1.Interval = 500 開放定時器1,使定時器繼續(xù)發(fā)送上位機命令
44、flag_commandword = False End If End IfEnd If Case comEvReceive bte(0) = AscB(indata) bte(1) = AscB(Mid(indata, 2, 1)If out(2) &HB1 Then 如果上位機要求停止接受溫度是,關(guān)閉發(fā)送標志位 Shape14.Width = 0 把溫度顯示的進度條寬度變?yōu)? Text2.Text = 清空溫度顯示 flag_send = FalseEnd IfIf flag_send = True Then 如果發(fā)送鍵按下之后,那么接收后兩個字節(jié) If out(2) = &HB1 The
45、n bte(2) = AscB(Mid(indata, 3, 1) bte(3) = AscB(Mid(indata, 4, 1) End IfEnd Ifbuf = Str(bte(0) + Str(bte(1) + Str(bte(2) + Str(bte(3)*buf = bte(0) * 100 + bte(1)Select Case buf 對每一個階段的液位進行校正 Case 0 To 100 buf = buf + 19 Case 100 To 200 buf = buf + 17 Case 200 To 300 buf = buf + 14 Case 300 To 400 buf = buf + 8 Case 400 To 500 buf = buf + 10 Case 500 To 600 buf = buf + 7 Case 600 To 700 buf = buf + 5 Case 700 To 800 buf = buf + 3 Case 800 To 900 buf = buf
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學生在線學習平臺
- 江蘇省安全文明施工措施費
- 項目進度匯報及協(xié)調(diào)通知
- 跨部門協(xié)作會議紀要與行動計劃
- 高效會議管理技巧與實踐指南
- 臺風應(yīng)急預案演練方案
- 項目預算控制表模板(財務(wù)部門)
- 可持續(xù)發(fā)展戰(zhàn)略實踐分享
- 電子交易系統(tǒng)操作指南
- 辦公室職員健康促進措施
- 2024年吉林省高職高專單獨招生考試數(shù)學試卷真題(含答案)
- 油氣勘探行業(yè)技術(shù)趨勢分析
- 技術(shù)研發(fā)主管崗位招聘筆試題及解答(某大型國企)
- 2020-2021年度廣東省職業(yè)院校學生專業(yè)技能大賽(高職組)CAD機械設(shè)計賽項競賽規(guī)程
- 孫子生日宴會爺爺致辭范文
- 【正版授權(quán)】 IEC 60072-3:1994 EN-FR Dimensions and output series for rotating electrical machines - Part 3: Small built-in motors - Flange numbers BF10 to BF50
- 養(yǎng)老院老人走失免責協(xié)議書
- 加固工程施工技術(shù)交底內(nèi)容
- 2024-2034年中國冷凍面團市場競爭策略及行業(yè)投資潛力預測報告
- 《我愛上班》朗誦稿
- AQ-T 1009-2021礦山救護隊標準化考核規(guī)范
評論
0/150
提交評論