詳解一個電腦串口控制單片機驅動繼電器的例子.doc_第1頁
詳解一個電腦串口控制單片機驅動繼電器的例子.doc_第2頁
詳解一個電腦串口控制單片機驅動繼電器的例子.doc_第3頁
詳解一個電腦串口控制單片機驅動繼電器的例子.doc_第4頁
詳解一個電腦串口控制單片機驅動繼電器的例子.doc_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、單片機部分電路圖:此主題相關圖片如下: 單片機源代碼(asm格式):;-;-;設置串行口 波特率9600;串行口設置MODE1,SM1=0,REN=1,SMOD=1;晶振11.0592,定時設置為0FDH;常用端口設置參數;FD 9600;FA 4800;F4 2400;E8 1200;-;*ORG 00HJMP STARTORG 23HJMP UARTORG 30HSTART: MOV SP,#70HMOV SCON,#50HMOV TMOD,#00100001B ;TIM1在模式2 TIM0在模式1MOV TH1,#0F4H ;設置定時時間SETB TR1 ;啟動定時器1SETB ES ;允許串口中斷SETB EA ;允許總中斷MOV P0,#0 ;P0、P2輸出低電平MOV P2,#0JMP $ ;等待狀態(tài);*;串行口中斷;*UART: PUSH ACCPUSH PSWCLR ES ;關閉串行口中斷MOV TH0,#HIGH(65536-65536)MOV TL0,#LOW(65536-65536)SETB TR0 ;開定時器0MOV 30H,#00 ;同步位MOV 31H,#00 ;數據1MOV 32H,#00 ;數據2MOV 33H,#00 ;結束位MOV R0,#30HREC: jbc tf0,FS ;接收時間是否超時?是則執(zhí)行FSJNB RI,REC ;接收數據CLR RIMOV A,SBUFMOV R0,AINC R0JMP RECFS: CLR TR0 ;關定時器0;* CALL FUN ;解碼并控制繼電器SETB ES ;開串行口中斷POP PSWPOP ACCRETI ;中斷子程序返回;*;解碼并控制繼電器;下面的程序可以更簡潔,但為了方便,展開來編制;*FUN: MOV A,#0AH ;判斷第1字節(jié)即同步位CJNE A,30H,ERRMOV A,#0DH ;判斷第4字節(jié)即結束位CJNE A,33H,ERR;*;第2字節(jié)即數據位1,代表繼電器J1-8;第3字節(jié)即數據位2,代表繼電器J9-16;*MOV A,31HMOV P0,AMOV A,32HMOV P2,ARET;*; 數據錯誤處理;* ERR:MOV 30H,#00 ;同步位MOV 31H,#00 ;數據1MOV 32H,#00 ;數據2MOV 33H,#00 ;結束位RETEND ;程序結束;-;-單片機源代碼(asm格式)+電路圖下載:點擊瀏覽該文件電路圖說明:這個電路非常典型,串行口(也稱RS232)接口集成電路MAX232與單片機AT89S51引腳P3.0(RXD)P3.1(TXD)連接,構成與主機的通訊接口電路。AT89S51引腳P0、P2口連接達林頓管陣列驅動IC uln2803,通過它控制繼電器動作。相關基礎知識簡要說明:1、串行口(也稱RS232接口)是用途最廣的一種通訊接口,一般電腦主機上都有這個接口,缺點是傳輸距離短,市場上也有很多USB-RS232 轉換接口賣。*常用的通訊接口還有RS485、RS422、LPT打印接口、CAN總線接口、網卡接口等等,與RS232比較接近的通訊接口是RS485,它的通訊距離較遠,廣泛用于工業(yè)控制。2、串行口(也稱RS232)接口集成電路MAX232,接口芯片種類繁多,MAX232只是其中的一種,可以說是串行接口集成電路的代表型號,圖紙上一般都標MAX232,但實際使用時,可以選用更多兼容的芯片,其中一個理由,兼容芯片更便宜。3、達林頓管陣列驅動IC uln2803,TTL輸入(0-5v),可以同時驅動8個繼電器,內部不僅封裝了達林頓管陣列,并且含有鉗位二極管,連接繼電器時,不需要再連接保護二極管,使用非常方便,因而用途廣泛。相同功能的芯片有ULN2003,只是它只有7個輸出口。內部電路如圖所示:此主題相關圖片如下: 接口IC ULN2083內部有反相緩沖器(參見技術手冊),簡單來說,輸入高電平,輸出為低電平;輸入低電平,則輸出高電平。51源程序詳解:源程序主要分三個部分:初始化程序、串口中斷程序、協議解析或叫解碼程序。初始化程序:初始化是單片機通電后首先執(zhí)行的一部分程序,主要是對單片機中的寄存器做一些必要的設置(即寫入值):、設置串口 波特率為9600串行口設置MODE1,SM1=0,REN=1,SMOD=1、由于電路上晶振采用11.0592(最常用),定時器1設置初值為0FDH;常用串口波特率對應初值(11.0592晶振);FD 9600;FA 4800;F4 2400;E8 12003、啟動定時器1、允許串口中斷、允許總中斷相關代碼:MOV SCON,#50HMOV TMOD,#00100001B ;TIM1在模式2 TIM0在模式1MOV TH1,#0F4H ;設置定時時間SETB TR1 ;啟動定時器1SETB ES ;允許串口中斷SETB EA ;允許總中斷需要注意:1、波特率越高,通訊速度越快,但也更容易出錯,一般來說,通訊距離短時,可以用較高的波特率,通訊距離長時,選用較低的波特率可使通訊更為可靠。2、硬件電路采用不同的晶振,波特率設置時初值是不同的,初值可由公式()取得,通過計算你會發(fā)現有些晶振(如10M、12M)計算結果有余數,實質上就是波特率有誤差,最終結果就是用了這個晶振的電路,在通訊時會出現無法通訊、數據錯亂、時好時壞、誤動作等等情況。因此,一般我們在用到串口的單片機電路中,如無特殊需要,一般晶振選用11.0592M、22.1184等。而在沒有用到串口的電路中,一般晶振選用6M、12M、24M等,因為計算定時更簡單,如6M時鐘,周期=2us ;12M時鐘,周期=1us ;24M時鐘,周期=0.5us。3、提高波特率的方法有二種:將SM1設為1;或是換一個頻率更高的晶振。由于接口IC ULN2083輸入輸出的反相特性,即輸入為高電平,輸出為低電平;輸入為低電平,則輸出為高電平。同時51單片機上電復位后,其引腳為高電平,這樣會引起連接在P0、P2口的繼電器全部得電吸合的情況,應此,初始化程序中應對端口作如下設置:相關代碼:MOV P0,#0 ;P0、P2輸出低電平MOV P2,#0由于本例中單片機在初始化后沒有其它事情做,我們就讓它沒事歇著。相關代碼: JMP $ ;自循環(huán)(等待狀態(tài))串口中斷程序:串口接收數據流程圖此主題相關圖片如下: 串口接收定長或不定長數據的原理:(很多朋友沒理解的)接收定長或不定長數據關鍵是要知道數據什么時候發(fā)送完畢。我們知道串口中傳送數據是以位(BIT)來傳送,通常串口設置為MODE1狀態(tài),MODE1狀態(tài)收發(fā)數據是10個位,一個起始位,8個數據位(我們要傳送的一個字節(jié)數據),1個停止位。如果波特率9600,請注意單位是BIT/S,也就是速度1秒鐘9600位,換算一下,發(fā)送或接收10位需要1MS毫秒多一點。那么OK,對于不定長度數據,我們在每接收完1個字節(jié)數據后,開始設定時值如2 MS,并開啟定時器,如果后面還有數據 ,則重新設定時值如2 MS,并開啟定時器;如果后面沒有數據了,超過2MS,即表示數據接收完畢了,下面可以對收到的數據處理了。對于指定長度的數據,我們可以設定全部數據接收完需要多長時間,在引起串口中斷后(即準備接收第1個字節(jié)),開始設定時值如2 MS,并開啟定時器,循環(huán)接收字節(jié)數據,如果超時,即表示數據接收完畢了,下面可以對收到的數據處理了。在本例中我們接收的是4個字節(jié)的定長數據,相關代碼如下:MOV TH0,#HIGH(65536-65536)MOV TL0,#LOW(65536-65536)SETB TR0 ;開定時器0MOV 30H,#00 ;同步字節(jié)MOV 31H,#00 ;數據1MOV 32H,#00 ;數據2MOV 33H,#00 ;結束字節(jié)MOV R0,#30HREC: jbc tf0,FS ;接收時間是否超時?是則執(zhí)行FSJNB RI,REC ;接收數據CLR RIMOV A,SBUFMOV R0,AINC R0JMP RECFS: CLR TR0 ;關定時器0;* CALL FUN ;解碼并控制繼電器如何定義通訊協議:通訊協議就是通訊各方的約定,沒有固定的格式方法,由開發(fā)商自行定義。我們來看一個最簡單的通訊協議:接收字節(jié)數據 功能00 繼電器1開01 繼電器1關02 繼電器2開03 繼電器2關。 。這個協議說明,單片機接收到1個數據如果是00H,則繼電器1打開,依次類推。在實際使用時,由于各種干擾因素,往往會發(fā)生誤動作的情況,因此通訊協議必須能抵擋各種干擾因素。為了得到可靠的通訊協議,我們常常在要發(fā)送的數據前加同步位,發(fā)送的數據后加結束位,以及加入校驗字節(jié)等等方法。本例中我們確定如下的通訊協議:1、數據為4個字節(jié),第1字節(jié)表示同步位,第2字節(jié)表示數據1,第3字節(jié)表示數據2,第4字節(jié)表示結束位。2、第1字節(jié)表示同步位,固定為0AH;第4字節(jié)表示結束位,固定為0DH。3、第2字節(jié)即數據1,8個位依次代表繼電器1-8,位=1則繼電器開,位=0則繼電器關。4、第3字節(jié)即數據2,8個位依次代表繼電器9-16,位=1則繼電器開,位=0則繼電器關。因此如果接收到數據0A01020D,首先判斷第1字節(jié)是否=0AH,再判斷第4字節(jié)是否=0DH,如果不同,則發(fā)生了錯誤,反之正確。第2字節(jié)=01H,表示繼電器器1開,繼電器2-8關;第3字節(jié)=02H,表示繼電器10開,繼電器9、11-16關。協議解析(解碼)程序FUN: MOV A,#0AH ;判斷第1字節(jié)即同步位CJNE A,30H,ERRMOV A,#0DH ;判斷第4字節(jié)即結束位CJNE A,33H,ERR;*;第2字節(jié)即數據位1,代表繼電器J1-8;第3字節(jié)即數據位2,代表繼電器J9-16;*MOV A,31HMOV P0,AMOV A,32HMOV P2,ARET2、PC程序部分Microsoft Visual Studio 2005 Microsoft Visual Studio 2005 是基于NET的開發(fā)環(huán)境,你可以通過網絡找到它,全部文件包括MSDN聯機文檔大概3.18G,Microsoft Visual Studio 2005 其實包括了VB.NETC#J#ASP等開發(fā)語言,我們用VB。NET。很多朋友提到VB,要說的是VB與VB。NET是不同的。幾個理由:1、操作系統不斷升級,越來越多的新特性需要。NET支持。2、VB。NET編程更簡單,功能更強大。3、執(zhí)行速度,以往大家總拿C與VB比較,認為C快,vb慢,NET平臺下,C與vb 僅是描述語言不同,下層執(zhí)行代碼完全統一,沒有速度區(qū)別。所以我建議使用。Microsoft Visual Studio 2005 安裝過程我不說了。使用 Microsoft Visual Studio 2005 簡單說一下:啟動Microsoft Visual Studio 2005后,選VISUAL BASIC,點擊 新建項目,選WINDOWS應用程序,輸入項目名稱,確定。添加代碼 簡單說一下,具體請參考相關書籍。如果你了解請?zhí)^此段。要添加代碼,我們首先要了解組件的屬性、事件、方法。打個比方吧,我們買部汽車,一定要挑挑顏色吧,輪胎多寬,發(fā)動機排量等,這是汽車的屬性;要讓汽車跑起來,我們要踩油門,很顯然,發(fā)生踩油門的事件時,汽車執(zhí)行了開動的方法。PC串口發(fā)送數據通過串口發(fā)送數據的方式分文本和二進制。通常在自動化控制中用二進制發(fā)送方式。很多朋友搞不明白,其實很簡單:1、文本方式Dim send As Byte()AxMSComm1.CommPort = 1 1 參數設置 設端口號AxMSComm1.Settings = 9600,n,8,1 設波特率AxMSComm1.PortOpen = True 打開端口AxMSComm1.Output = SENDAxMSComm1.PortOpen = False 關閉端口2、二進制方式Dim send As STRINGAxMSComm1.CommPort = 1 1 參數設置 設端口號AxMSComm1.Settings = 9600,n,8,1 設波特率AxMSComm1.PortOpen = True 打開端口AxMSComm1.Output = SENDAxMSComm1.PortOpen = False 關閉端口可以看到除了要發(fā)送的數據定義不同,其他完全相同。在本例中,我們要發(fā)送的數據包含起始、數據1、數據2、結尾共4個字節(jié),如下:1、首先組合數據 buff = 0A + DATA1 + DATA2 + 0D2、文本轉換為二進制數組Dim X As Integer = 1Dim Y As Integer = Len(buff)Dim z As Integer = 0 Dim SEND As Byte()ReDim SEND(Y / 2 - 1)While X YSEND(z) = Val(&H + (Mid(buff, X, 2)z += 1X += 2End While3、通過串口發(fā)送二進制數據 TryAxMSComm1.CommPort = 1 1 參數設置 設端口號AxMSComm1.Settings = 9600,n,8,1 設波特率AxMSComm1.PortOpen = True 打開端口AxMSComm1.Output = SENDAxMSComm1.PortOpen = False 關閉端口ToolStripStatusLabel1.Text = (發(fā)送成功! + 端口 + Str(AxMSComm1.CommPort) + + 設置 + AxMSComm1.Settings) 顯示狀態(tài)Catch ex As ExceptionMsgBox(發(fā)送失?。《丝诳赡鼙徽加没蚴菬o效的端口

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論