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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

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

溫馨提示

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

最新文檔

評論

0/150

提交評論