版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、0 前言 單片機因其優(yōu)越的性價比和靈活的功能配置而被廣泛的應用于測控領域。而PC則因為豐富的軟、硬件資源,被廣泛應用于網(wǎng)絡監(jiān)控系統(tǒng)中。這就是一臺PC與多臺單片機所組成的主從式網(wǎng)絡測控系統(tǒng)。串行通信是計算機和外部設備進行數(shù)據(jù)交換的重要渠道,由于其成本低,性能穩(wěn)定并遵循統(tǒng)一的標準,因而在工程中被廣泛應用。本文以華東石油局的一臺油田鉆井的滾動軸承信號采集系統(tǒng)為例,討論一種基于串行通信標準的測控系統(tǒng)的通信協(xié)議及其具體的軟、硬件實現(xiàn)。在本系統(tǒng)中,上位機以PC和Windows操作系統(tǒng)為軟、硬件資源;下位機采用ATMEL公司89C51,總線標準采用的是測控系統(tǒng)常用的RS-485。1 通信系統(tǒng)的硬件設計盡管R
2、S-232有些缺點,但在兩臺短距離設備間的短距離信息傳輸時,最通用的還是RS-232。但對于多臺設備的長距離傳輸,它就很難實現(xiàn)。而RS-485是一個多引出線接口,這個接口可以有多個驅動器和接收器,可以實現(xiàn)一臺PC和多臺單片機之間的串行通信;而且RS-485的最長的傳輸距離為1200m,適合中距離的傳輸。本文針對油田鉆井的滾動軸承信號采集及傳輸,根據(jù)工地實際工作環(huán)境,采用RS-485通信接口。1.1 PC和RS-485總線的接口3該接口的主要功能是完成RS-232到RS-485的轉變,完成這個功能的芯片很多,比如MAX-485,我們的系統(tǒng)采用的是ADAM公司的ADAM4250,RS-232/RS
3、-485轉換器,結構如圖(1)所示: 圖1 ADAM42501.2 89c51和RS-485總線的接口1,4由于MAX48x/49x系列收發(fā)器組成的差分平衡系統(tǒng)抗干擾能力強,接收器可檢測到200mV的信號,傳輸?shù)臄?shù)據(jù)可以在千米以外得到恢復,特別適合遠距離通信,可以組成標準的通信網(wǎng)絡。本系統(tǒng)采用MAX487接口芯片作為收發(fā)器,由于它的輸入阻抗是標準接收器的4倍,因此最多可以掛128個接收器。1.3 系統(tǒng)的總體連接 本系統(tǒng)采用一主多從的總線型連接方式,如圖2所示。為了消除反射,吸收噪音,采用2個120 的匹配電阻R1和R2連在總線的兩端。其中n不大于128。 圖2 系統(tǒng)總體連接圖2 通信協(xié)議的設計
4、 由于RS-485通信是一種半雙工通信,發(fā)送和接受共用同一物理通道,在任意時刻只允許一臺單片機處于發(fā)送狀態(tài),因此要求應答的單片機必須在偵聽到總線上呼叫信號已經(jīng)發(fā)送完畢,并且在沒有其他單片機應答信號的情況下才能應答。如果在時序上配合不好,就會發(fā)生總線沖突,使整個系統(tǒng)的通信癱瘓,無法正常工作。上位機與下位機之間如何進行數(shù)據(jù)傳輸,怎么提高通信的效率和可靠性,以及對通信過程中的故障處理,幀格式的約定,都需要一套詳盡的通信協(xié)議。RS-485總線只制定了物理層電氣標準,對上層通信協(xié)議沒有規(guī)定。這給設計者提供了很大的靈活性。一套完整的通信協(xié)議既要求結構簡單,功能完備,又要求具有可擴充性與兼容性,并且盡量標準
5、化。本系統(tǒng)的協(xié)議就是從這幾個方面考慮的,它主要包括以下幾個部分:2.1 上下位機間的通信過程(1)通信均有上位機發(fā)起,下位機不主動申請通信;(2)當處于輪詢狀態(tài)時,上位機依據(jù)下位機地址,定時向下位機發(fā)送呼叫指令。此時,每臺下位機都中斷接受并判斷,地址不相符的下位機中斷返回,執(zhí)行其他下位機任務;反之則把本機地址及其狀態(tài)作為應答信號發(fā)送給上位機。上位機接收到應答信號后,可以作進一步的處理。2.2 通信協(xié)議本系統(tǒng)采用比較簡單的通信協(xié)議:PC機需要與單片機通信時,首先發(fā)送一個字節(jié)的信號,以16進制表示為AAH,單片機接收到AAH后,就將需要發(fā)送的數(shù)據(jù)連續(xù)地向PC機發(fā)送;PC機與單片機通信結束時,向單片
6、機發(fā)送一個字節(jié)的信號,以16進制表示為55H,結束數(shù)據(jù)發(fā)送。單片機發(fā)送給PC機的數(shù)據(jù)格式為:開始碼數(shù)據(jù)體校驗和結束碼00HDATA0DATA1DATAN-1DATASUMFFH3 通信系統(tǒng)的軟件設計3.1 上位機通信軟件設計 本系統(tǒng)的上位機軟件用VB6.0實現(xiàn),利用VB6.0提供的MSComm通信控件,可以方便的訪問串口,實現(xiàn)數(shù)據(jù)的接收和發(fā)送。由于本系統(tǒng)用一臺上位機監(jiān)控多臺下位機,所以上位機監(jiān)控界面主要包括3個:(1)輪詢界面,即主監(jiān)控界面??梢员O(jiān)測到下位機的狀態(tài)(運行,停機,故障)??紤]到通用型,下位機的臺數(shù)可以根據(jù)實際需要添加或刪除,最多可帶128臺下位機。本系統(tǒng)默認為50臺。(2)下位機
7、運行監(jiān)視和控制界面。主要是對某一臺定位控制器進行狀態(tài)監(jiān)視和位置給定。(3)下位機內部參數(shù)設定界面??梢愿鶕?jù)實際需要對某一臺定位控制器的運行參數(shù)進行修改。 開發(fā)通信程序的關鍵是發(fā)送和接受數(shù)據(jù)。下面給出上位機中數(shù)據(jù)發(fā)送和接收的部分程序: MSComml.Settings=Settings ; 串口的波特率設置 send_arr0(0)=&H02 ; 數(shù)據(jù)發(fā)送數(shù)組 send_arr1(0)=BPQ_Address send_arr7(0)=send_arr1(0)Xor send_arr2(0)Xor send_arr6(6) Output_Enable=False ; 關閉輪詢 Open_Port
8、 ; 開串口 MSComm1.RTSEnable=False ; 置發(fā)送狀態(tài) MSComm1.Output=send_arr0 ; 發(fā)送 Choose_Delay ; 發(fā)送延時 MSComm1.Output=send_arr1 Choose_Delay MSComm1.Output=sen_arr7 Choose_Delay MSComm1.RTSEnable=True ; 置接收狀態(tài) Choose_Frame_delay ; 接收延時 Accept_arr=MSComm1.Input ; 數(shù)據(jù)接收數(shù)組 For j=Lbound(Accept_arr)To Ubound(Accept_arr)
9、 If Ubound(Accept_arr)=7 Then Buf(j)=buf(j)+Str(Accept_arr(j)由于程序較長,對程序其它部分不詳細敘述,這里只列幾個注意點:(1)由于采用半雙工傳輸方式,開始發(fā)送前要禁止接受。發(fā)送結束后要先關閉發(fā)送再開啟接收,以保證數(shù)據(jù)傳輸?shù)恼_性。(2)發(fā)送以字節(jié)為單位,每個字節(jié)間要考慮延時,以免因溢出而丟失數(shù)據(jù)。延時時間主要取決于傳輸時所確定的波特率。(3)接收數(shù)據(jù)也要考慮延時,以等待下位機將一個單位的數(shù)據(jù)全部發(fā)給上位機。3.2 下位機通信軟件的設計2本系統(tǒng)中的單片機采用的是ATMEL公司89C51,這是在國內應用相當廣泛的一款單片機,程序用C51
10、來編寫,從實時性角度來考慮,下位機的通信方式采用中斷方式。這樣下位機程序就包括了下位機主程序和下位機中斷服務程序。主程序用于定時器T1初始化、串行口初始化和中斷初始化。中斷服務程序用于對上位機的通信。主程序和中斷服務程序的框圖如圖3、圖4所示。由于篇幅所限,程序這里就不做介紹。圖(3) 下位機主程序框圖 圖(4) 下位機中斷服務程序框圖無線SOC開發(fā)平臺499元 S3C44B0 ARM7開發(fā)板378元 S3C2410 ARM9開發(fā)板780元 AT91SAM7S64 ARM7 單片機開發(fā)板之王ELITE-I單片機學習開發(fā)系統(tǒng)1200元 S3C2410 ARM9開發(fā)板(II) 950元 EPM12
11、70T144C CPLD開發(fā)板480元4 結束語 本文設計并實現(xiàn)了一種應用于油田鉆井滾動軸承的振動信號測控系統(tǒng)。該系統(tǒng)采用PC與多單片機之間的串行通信實現(xiàn)測控,采用RS-485總線標準,半雙工傳輸方式。上位機采用Windows環(huán)境 下VB6.0開發(fā),編程簡單,界面良好,維護方便;下位機利用單片機內自帶的USART通信接口,很好的實現(xiàn)異步串行通信。實驗表明,該方法對于工作環(huán)境比較惡劣的鉆井油田滾動軸承的振動信號的采集與傳輸,達到了實際要求,為滾動軸承故障檢測提供了方便而有效的振動信號。參考文獻基金號:江蘇省高校自然科學基金資助項目(03KJB)1 范逸之,陳立元 Visual Basic與RS-
12、232串行通信控制 北京:中國青年出版社 20022 石東海 單片機數(shù)據(jù)通信技術從入門到精通 西安:西安電子出版社 20023 ADAM 4000 Data Acquisition Modules Users Manual Advantech Co.Ltd 1999 4 王金成 王旭 一種基于RS-485總線的遠程通信系統(tǒng)軟件實現(xiàn) 微計算機信息 2001年17卷第9期 系統(tǒng)晶振是 11.0592 MHz;51單片機發(fā)送單片機程序;此程序用Proteus仿真通過 ;此程序在硬件上測試通過;2007-05-27;附有簡化電路圖;為了使初學者能看懂,程序與圖盡可能的簡單扼要;實驗現(xiàn)象為,發(fā)送端的P1
13、口的哪個鍵被接下,接收端的哪個燈對應著亮;如果把兩個單片機的T和R通過無線模塊(如基于MCP2120芯片的模塊)來擴充,便可做成無線通信 ORG 0000H AJMP START ORG 0040HSTART: MOV SP,#60H MOV SCON,#50H ;串口 方式 1 MOV TMOD,#20H ;T1 方式2 MOV TL1,#0FDH ;波特率 9600 的常數(shù) MOV TH1,#0FDH SETB TR1 mov r5,#00hWAIT: mov p1,#0ffh mov a ,p1 mov r5,a lcall delay ;讀鍵盤,這里去抖動,還要加幾句話 mov a ,
14、p1 nop CJNE A,5,WAIT ;是否有鍵輸入 MOV SBUF,a ;串口輸出鍵盤輸入的值 NOPSS: JBC TI,WAIT ;是否發(fā)送完畢 SJMP SSDELAY: ;延時子程序 PUSH 0 ;保存現(xiàn)場 PUSH 1 MOV 0,#06HDELAY1: MOV 1,#0H DJNZ 1,$ DJNZ 0,DELAY1 POP 1 ;恢復現(xiàn)場 POP 0 RET END;系統(tǒng)晶振是 11.0592 MHz;51單片機接收單片機程序;此程序用Proteus仿真通過;此程序在硬件上測試通過;2007-05-27;附有簡化電路圖;為了使初學者能看懂,程序與圖盡可能的簡單扼要;實驗
15、現(xiàn)象為,發(fā)送端的P1口的哪個鍵被接下,接收端的哪個燈對應著亮;如果把兩個單片機的T和R通過無線模塊(如基于MCP2120芯片的模塊)來擴充,便可做成無線通信 ORG 0000H AJMP START ORG 0040HSTART: MOV SCON,#50H ;串口 方式 1 MOV TMOD,#20H ;T1 方式 2 MOV TL1,#0FDH ;波特率 9600 的常數(shù) MOV TH1,#0FDH SETB TR1 WAIT: JBC RI,DIS_REC ;是否接收到數(shù)據(jù) sjmp waitDIS_REC: MOV A,SBUF ;讀串口接收到的數(shù)據(jù) mov p1,a SJMP wai
16、t end雙機通信怎么連,多機通信并上去就可以了 回答者: ahai0306 - 四級 2009-4-2 15:16 5-接地;8-電源; 一主機多從機時:單片機的RXD接MAX485的RO,單片機的TXD接MAX的DI;MAX485的DE和RE接單片機IO口上(只接在一個IO口即可,因為是半雙工通信)。 主機MAX485與從機MAX485:主機A接從機B,從機A接主機B。(MAX485的A和B之間接一匹配電阻大小100歐) 回答者: lm - 三級 2009-4-3 10:01 給設計圖?RS-485單片機的話,單純從硬件來說,其實和RS-232串口非常類似,只是將232芯片替換成485芯片
17、就可以了,多機通信的問題,485本身就支持點對多點通信的,只不過是半雙工的,在軟件編寫的時候要多注意一下仲裁機制而已。這個是根據(jù)協(xié)議來的,485總線設備是帶有地址碼的,打個比方吧,232串口通信就是兩個人通過電話進行通信,肯定只能點對點,而485則是教室里面一個老師和很多個學生交談,當老師(主控設備)點名(即輪詢到某個485地址碼)要求某個學生(從設備)回答問題,這個學生如果沒有翹課(從設備故障或者通信故障)的話,就應答站起來回答問題。在老師點名,學生答問的過程中,都是只有一個人發(fā)言,因為485總線有這樣的仲裁機制,所以才可以實現(xiàn)點到多點的通信,而232的則沒有這個機制,所以不行。不知道這樣是
18、否清楚。 下圖是使用MAX485芯片設計了一個RS232到RS485的轉換接口電路圖。AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節(jié)閃爍可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復擦除100次。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是
19、一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。外形及引腳排列如圖所示主要特性:與MCS-51 兼容 4K字節(jié)可編程閃爍存儲器 壽命:1000寫/擦循環(huán)數(shù)據(jù)保留時間:10年全靜態(tài)工作:0Hz-24MHz三級程序存儲器鎖定1288位內部RAM32可編程I/O線兩個16位定時器/計數(shù)器5個中斷源 可編程串行通道低功耗的閑置和掉電模式片內振蕩器和時鐘電路管腳說明:VCC:供電電壓。GND:接地。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外
20、部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管
21、腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口,如下表所示:口管腳 備選功
22、能P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2 /INT0(外部中斷0)P3.3 /INT1(外部中斷1)P3.4 T0(記時器0外部輸入)P3.5 T1(記時器1外部輸入)P3.6 /WR(外部數(shù)據(jù)存儲器寫選通)P3.7 /RD(外部數(shù)據(jù)存儲器讀選通)P3口同時為閃爍編程和編程校驗接收一些控制信號。RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率
23、的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。/EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/E
24、A將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。振蕩器特性:XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅動器件,XTAL2應不接。有余輸入至內部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。PC機與單片機AT89C51的串行通信 在以單片機為基礎的數(shù)據(jù)采集和實時控制系統(tǒng)中,通
25、過計算機中的 RS-232 接口進行計算機與單片機之間的命令和數(shù)據(jù)傳送,就可以利用計算機對生產(chǎn)現(xiàn)場進行監(jiān)測和控制。由于計算機上的 RS-232 所傳送的距離不超過 30m ,所以,在遠距離的數(shù)據(jù)傳送和控制時,可以用 MAX485 的接口轉換芯片將 RS-232 轉換成 RS-485 協(xié)議進行遠距離傳送。在發(fā)送和接收端都進行協(xié)議轉換后, RS-485 協(xié)議對數(shù)據(jù)傳送來說是相對透明的,所以依然可以使用計算機中的 RS-232 進行遠距離的數(shù)據(jù)傳送和控制。在最簡單的 RS-232 直接傳送通信系統(tǒng)中,只要發(fā)送和接收雙方同時準備好,僅用信號發(fā)送端 (TXD) ,信號接收端 (RXD) 和信號地 (GN
26、D)3 根線即可進行通信;若以應答方式進行數(shù)據(jù)通信,可使用請求發(fā)送 (RTS) 、清除發(fā)送 (CTS) 或數(shù)據(jù)終端準備 (DTR) 、數(shù)據(jù)裝置準備 (DSR) 進行硬件握手。在 Windows95 下,可以很方便地使用 Win32 通信 API 函數(shù)來實現(xiàn)這些硬件的握手以及數(shù)據(jù)的傳送。在 89C51 單片機系統(tǒng)中,分別從 P3.0 和 P3.1 引出串口線 RXD 和 TXD 通過專用的電平轉換芯片轉換成 RS-232 接口標準的電平,這樣,二者之間就可以通過 RS-232 接口進行數(shù)字信號的傳送。單片機也可以以直接傳送或應答握手的方式進行數(shù)據(jù)通信,但由于握手方式占用其他的端口,而單片機的端口
27、數(shù)量有限,所以,計算機與單片機的通信常采用直接傳送的方式,本文將重點介紹。 1 Windows95 下的通信編程 Windows95 通信體系提供了 1 個改進的串行應用程序接口 SAPI 用來進行交互式串行通信。其中,串口和其他通信設備是作為文件進行處理的,串口的打開、關閉、讀取和寫入所用的函數(shù)和操作文件的函數(shù)相同。 通信會話以調用 CreateFile 函數(shù)開始, CreateFile 函數(shù)為讀訪問或寫訪問打開串口,打開成功后返回該串口句柄,供讀寫串口時使用。 CreateFile 函數(shù)的使用如下: CreateFile(szDevice,fdwAccess,fdwShareMode,lp
28、sa,fdwCreate,fdwAttrsAndFlags,hTemplateFile) 其中,第 1 個參數(shù) szDevice 是要打開的串口邏輯名,如 COM1 或 COM2 ;第 2 個參數(shù) fdwAccess 指定串口的訪問類型,如讀、寫或兩者兼而有之,大部分通信是雙向的,因而通常設置為: GENERICREAD GENERICWRITE ;第 3 個參數(shù) fdwShareMode 指定串口的共享屬性,串口不能共享,所以它必須為 0 ;第 4 個參數(shù) lpsa 引用安全性屬性結構;第 5 個參數(shù) fdwCreate 指定如果 CreateFile 正被已有的文件調用時應做些什么,既然串
29、口總是存在,此參數(shù)就必須被設置為 OPENEXISTING 。第 6 個參數(shù) fdwAttrsAndFlags 描述了該端口的各種屬性,對串口而言,唯一有意義的設置是 FILEFLAGOVERLAPPED ,指定該設置時,端口 I/O 可以在后臺進行;最后 1 個參數(shù) hTemplateFile 是指向模板文件的句柄,當端口打開時,該參數(shù)為 NULL 。 打開串口后,在 Windows95 下可以對串口進行合適的配置。 Windows95 提供了 COMMPROP 結構, COMMPROP 結構中包含了對串口允許的設置,如波特率、數(shù)據(jù)位數(shù)、停止位的個數(shù)以及奇偶校驗方法等,如果串口連接到調制解調
30、器, COMMPROP 結構中還包含調制解調器支持的設置。但 COMMPROP 結構給出的只是單純的信息,它不能用來改變串口的設置。 Windows95 下串口設置的改變是通過改變它的 DCB 結構來實現(xiàn)的, DCB 結構中包含了所有串口的設置,其中包括硬件的握手、流控制等。 Windows95 提供 GetCommState 函數(shù)來得到當前串口的設置情況,該函數(shù)接收 1 個打開的端口句柄和 1 個指向 DCB 結構的指針,在 DCB 結構中返回信息, GetCommState 函數(shù)的補充函數(shù)是 SetCommState 函數(shù), SetCommState 函數(shù)將 DCB 結構中的內容寫向串口設
31、置,這 2 個函數(shù)的調用如下: BOOLGetCommState(hComm,&dcb) BOOLSetCommState(hComm,&dcb) 其中, hComm 為打開串口的句柄, dcb 為 1 個指向 DCB 的結構。 Windows95 中實現(xiàn)串口的讀寫函數(shù)與文件的讀寫函數(shù)相同,讀寫函數(shù)的使用格式如下: ReadFile(hComm,inbuff,nBytes,&nBytesRead,&overlapped) WriteFile(hComm,outbuff,nBytes,&nBytesWrite,&overlapped) 其中,第 1 個參數(shù)是打開串口的句柄,第 2 個參數(shù)是數(shù)據(jù)所
32、使用的緩沖區(qū),第 3 個參數(shù)是要讀取的字節(jié)數(shù),第 4 個參數(shù)是實際讀取的字節(jié)數(shù),實際讀取的字節(jié)數(shù)可能小于要讀取的字節(jié)數(shù),最后 1 個參數(shù)指向 1 個覆蓋似的結構,當 CreateFile 中 dwAttrsAndFlags 參數(shù)設置為 FILEFLAGOVERLAPPED 時,此參數(shù)可以指定 1 個 OVERLAPPED 結構,使數(shù)據(jù)的讀寫操作在后臺進行。 讀寫端口可以通過 4 種技術來實現(xiàn):查詢、同步 I/O 、異步 I/O( 后臺 I/O) 和事件驅動 I/O 。查詢方式直接、易于理解,但占用大量 CPU 時間;同步 I/O 直到讀取所指定字節(jié)數(shù)或超時時才返回,這樣很容易長時間地阻塞線程;
33、異步 I/O 可以在后臺讀寫數(shù)據(jù),而在前臺做其他的事情;事件驅動 I/O 是由 Windows95 通知應用程序某些事件什么時候發(fā)生,然后根據(jù)所發(fā)生的事情來對串口進行操作。 這 4 種不同的技術,各有利弊和自己適用的領域,所以,在不同的通信系統(tǒng)中,可以根據(jù)不同的要求采用不同的技術。在監(jiān)測系統(tǒng)中,由于事件的偶然性和要求傳送的實時性,計算機常采用事件驅動 I/O 方式來進行現(xiàn)場監(jiān)測。 在事件驅動 I/O 方式下, Windows95 報告給應用程序的事件由函數(shù) GetCommMask 返回,改變返回的事件時,可以使用 SetCommMask 函數(shù)設置,這 2 個函數(shù)的調用如下: GetCommMa
34、sk(hComm,&dwMask) SetCommMask(hComm,dwMask) 第 1 個參數(shù)是打開串口的句柄,第 2 個參數(shù)是要等待的 1 個或多個事件的掩碼。在用 SetCommMask 設置了有用的事件后,應用程序調用 WaitCommEvent 函數(shù)來等待事件的發(fā)生,直到事件發(fā)生, WaitCommEvent 函數(shù)返回。 WaitCommEvent 函數(shù)使用格式如下: WaitCommEvent(hComm,&dwEvent,&overlapped) 第 1 個參數(shù)是打開串口的句柄,第 2 個參數(shù)是返回的事件,第 3 個參數(shù)是指定同步或者異步操作。當函數(shù)返回后,可根據(jù)返回的事件
35、掩碼進行相應的串口操作。 完成通信后,串口應該關閉,否則,它始終處于打開狀態(tài),其他應用程序就不能打開或使用它。關閉串口的函數(shù)為: CloseHandle(hComm) ,其中, hComm 為打開的串口句柄。 2 單片機下的通信編程 單片機 89C51 的串行端口有 4 種工作方式,通過編程設計,可以使其工作在任一方式,以滿足不同場合的需要。其中,方式 0 主要用于外接移位寄存器,以擴展單片機的 I/O 電路;方式 1 主要用于雙機之間或外設電路的通信;方式 2 、 3 除有方式 1 的功能外,還可用作多機通信,以構成多微機系統(tǒng),方式 2 、 3 的區(qū)別在于波特率的不同。 單片機的串行通信的波
36、特率可以程控設定,在不同的工作方式下,由時鐘振蕩頻率的分頻值或由定時器 T1 的定時溢出時間確定。 單片機的串行端口有 2 個控制寄存器,用來設置工作方式、發(fā)送或接收的狀態(tài)、特征位、數(shù)據(jù)傳送的波特率以及中斷標志 TI 和 RI 。單片機的串行端口有 1 個數(shù)據(jù)寄存器 SBUF ,該寄存器為發(fā)送和接收所共有,在一定條件下,向 SBUF 寫入數(shù)據(jù)就啟動了發(fā)送過程,讀 SBUF 就啟動了接收過程。 單片機可以采用循環(huán)方式或中斷方式實現(xiàn)串行數(shù)據(jù)的傳送。在循環(huán)方式下,單片機循環(huán)對數(shù)據(jù)寄存器 SBUF 進行讀寫來實現(xiàn)數(shù)據(jù)的接收和發(fā)送;在中斷方式下,對方式 1 、 2 來說, 1 幀數(shù)據(jù)發(fā)送或接收完后, T
37、I/RI 自動置 1 ,請求串行中斷,若 CPU 響應中斷,則執(zhí)行串行中斷服務程序,并把 TI/RI 清 0 以再次響應中斷。對在方式 2 、 3 下的接收,還要視串口控制寄存器 SCON 的設置才可確定 RI 是否被置位以及串口中斷是否開放。 實時控制中,由于事件的突發(fā)性,常采用中斷的方式進行數(shù)據(jù)傳送,中斷方式能更大限度地提高資源的利用率,使 CPU 在不進行數(shù)據(jù)通信時做其他的工作。下面重點介紹單片機在方式 1 下的中斷方式編程。 方式 1 是 10 位異步通信方式,其中包括 1 個起始位, 8 個數(shù)據(jù)位和 1 個停止位。波特率由定時器 T1 的溢出率和串口控制寄存器 SMOD 的狀態(tài)確定,
38、在 CPU 的晶振為 11.0592MHz 時,波特率常采用 9600b/s 。 對 SBUF 進行寫操作就可啟動發(fā)送,在發(fā)送移位時鐘的同步下,從 TXD 先送出起始位,然后是 8 位數(shù)據(jù)位,最后是停止位,這樣, 1 幀數(shù)據(jù)發(fā)送完,中斷標志 TI 置位。 在允許接收的條件下 (REN 1) ,當 RXD 出現(xiàn)由 1 到 0 的負跳變時,即被當成是串行發(fā)送來的 1 幀數(shù)據(jù)的起始位,從而啟動 1 次接收過程。當 8 位數(shù)據(jù)接收完,并檢測到高電平停止位后,即把收到的 8 位數(shù)據(jù)裝入 SBUF ,置位 RI , 1 幀數(shù)據(jù)的接收過程就完成了。 下面是單片機以方式 1 在直接傳送下的中斷接收和發(fā)送程序。
39、由于沒有使用通信握手,所以通信雙方都應做好通信準備。在計算機接收、單片機發(fā)送時,由計算機先發(fā)送字母“ R ”,通知單片機計算機已準備好,然后計算機在事件驅動 I/O 方式下等待接收到字符“ Y ”;當單片機接收到“ R ”時,向計算機發(fā)送“ Y ”,表示單片機也已準備好,這樣,一旦計算機接收到“ Y ”就表示雙方都已準備好,二者之間就可以進行數(shù)據(jù)交換了。在計算機發(fā)送、單片機接收時,計算機發(fā)送 1 幀數(shù)據(jù),單片機響應中斷,接收數(shù)據(jù)。單片機程序的具體實現(xiàn)過程如下: org 0000h ajmp start org 0023h ;串行中斷入口 ljmp s&r org 0100h start: mo
40、v tmod,#20h ;設置定時器 T1 方式 2 mov pcon,#00h ;使 SMOD 為 0 mov tll,#0fdh ;波特率為 9600b/s mov thl,#0fdh setb ea ;開全局中斷 clr et1 ;關 T1 中斷 setb es ;開串行中斷 setb trl ;開 T1 定時 mov scon,#50h ;串行方式 1 ,允許接收 sjmp $ S&r:mov c,ri jcre cive;RI 為 1 ,執(zhí)行接收子程序 sjmp send ;否則,執(zhí)行發(fā)送子程序 recive:mov a,sbuf ;接收數(shù)據(jù) clr ri cjne a,#52h,r
41、e ;是否接收到“ R ” mov a,#59h ;是,發(fā)送“ Y ” mov sbuf,a sjmpendtr re:mov rl,a ; r1 為接收數(shù)據(jù)存放地址 inc r1 sjmpendtr send:mova,r0 ;發(fā)送數(shù)據(jù), r0 為存放數(shù)據(jù)的地址 movsbuf,a jnbti,$ clrti incr0 end tr:reti ;中斷返回 3 結束語 串口通信是一種廣泛應用于各個領域的通信方式,由于目前大部分計算機都安裝了 Windows95 操作系統(tǒng),所以本文具體實現(xiàn)了在 Windows95 下利用它的 SDK 函數(shù)來與單片機進行串口通信。本文所提出的實現(xiàn)函數(shù)在所有當前流
42、行軟件如 VC+ 、 Delphi 等中都可實現(xiàn)。它不僅可以用于近距離的 RS-232 通信,而且,還可以實現(xiàn)中遠距離 RS-485 通信。在使用該程序的通信系統(tǒng)中,近遠距離的通信都取得良好的效果。 參考文獻 1 MirhoCA,TerrisseA 著,賀軍,高勝友譯 .WINDOWS95 通信編程 . 北京:清華大學出版社, 1997 2 陳光東,趙性初 . 單片微型計算機原理與接口技術 . 武漢:華中理工大學出版社, 1993PC機與單片機AT89C51的串行通信22009-02-16 15:08線路控制寄存器(LCR):位 注 釋 Bit7=1允許訪問波特率因子寄存器Bit7=0允許訪問
43、接收/發(fā)送及中斷允許寄存器Bit6設置間斷,0-禁止,1-設置Bit5:3=XX0無校驗Bit5:3=001奇校驗Bit5:3=011偶校驗Bit5:3=101奇偶保持為1Bit5:3=111奇偶保持為0Bit2=01位停止位Bit2=12位停止位(數(shù)據(jù)位6-8位),1.5位停止位(5位數(shù)據(jù)位)Bit1:0=005位數(shù)據(jù)位Bit1:0=016位數(shù)據(jù)位Bit1:0=107位數(shù)據(jù)位Bit1:0=118位數(shù)據(jù)位LCR用來設定通訊所需的一些基本參數(shù)。Bit7為1指定波特率因子寄存器有效,為0則指定發(fā)送/接收及IER有效。Bit6置1會將發(fā)送端置為0,這將會使接收端產(chǎn)生一個“間斷”。Bit3-5用來設定
44、是否使用奇偶校驗以及奇偶校驗的類型,Bit3=1時使用校驗,Bit4為0則為奇校驗,1為偶校驗,而Bit5則強制校驗為1或0,并由Bit4決定具體為0或1。Bit2用來設定停止位的長度,0表示1位停止位,為1則根據(jù)數(shù)據(jù)長度的不同使用1.5-2位停止位。Bit0:1用來設定數(shù)據(jù)長度。MODEM控制寄存器(MCR):位 注 釋 Bit7未使用Bit6未使用Bit5自動流量控制(僅16750)Bit4環(huán)路測試Bit3輔助輸出2Bit2輔助輸出1Bit1設置RTSBit0設置DSRMCR寄存器可讀可寫,Bit4=1進入環(huán)路測試模式。Bit3-0用來控制對應的管腳。線路狀態(tài)寄存器(LSR):位 注 釋
45、Bit7FIFO中接收數(shù)據(jù)錯誤Bit6發(fā)送移位寄存器空Bit5發(fā)送保持寄存器空Bit4間斷Bit3幀格式錯Bit2奇偶錯Bit1超越錯Bit0接收數(shù)據(jù)就緒LSR為只讀寄存器,當發(fā)生錯誤時Bit7為1,Bit6為1時標示發(fā)送保持及發(fā)送移位寄存器均空,Bit5為1時標示僅發(fā)送保持寄存器空,此時,可以由軟件發(fā)送下一數(shù)據(jù)。當線路狀態(tài)為0時Bit4置位為1,幀格式錯時Bit3置位為1,奇偶錯和超越錯分別將Bit2及Bit1置位為1。Bit0置位為1表示接收數(shù)據(jù)就緒。MODEM狀態(tài)寄存器(MSR):位 注 釋 Bit7載波檢測Bit6響鈴指示Bit5DSR準備就緒Bit4CTS有效Bit3DCD已改變Bi
46、t2RI已改變Bit1DSR已改變Bit0CTS已改變MSR寄存器的高4位分別對應MODEM的狀態(tài)線,低4位表示MODEM的狀態(tài)線是否發(fā)生了變化。以上我們詳細介紹了PC機的串行通訊硬件環(huán)境,以下將分別給出使用查詢及中斷驅動的方法編寫的串行口驅動程序。這些程序僅使用RXD/TXD,無需硬件握手信號。(2) 使用查詢方法的串行通訊程序設計:polling.c #include #include #include #define PortBase 0x2F8 void com_putch(unsigned char); int com_chkch(void); main() int c; unsig
47、ned char ch; outportb(PortBase + 1 , 0); /* Turn off interrupts - Port1 */ /* Set COM1: 9600,8,N,1*/ outportb(PortBase + 3 , 0x80); outportb(PortBase + 0 , 0x0C); outportb(PortBase + 1 , 0x00); outportb(PortBase + 3 , 0x03); clrscr(); while(1) c = com_chkch(); if(c!=-1) c &= 0xff; putch(c); if(c=n)
48、putch(r); if(kbhit() ch = getch(); com_putch(ch); void com_putch(unsigned char ch) unsigned char status; while(1) status = inportb(PortBase+5); if(status&0x01) inportb(PortBase+0); else break; outportb(PortBase,ch); int com_chkch(void) unsigned char status; status = inportb(PortBase+5); status &= 0x01; if(status) return(int)inportb(PortBase+0); else return(-1); 使用查詢方式的通訊程序適合9600bps以下的應用。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年園林景觀工程施工監(jiān)理合同范本3篇
- 2024年度高端養(yǎng)生浴池租賃合作協(xié)議3篇
- 2024年標準協(xié)議免責條款模板版B版
- 2024年度文化旅游資源招商引資居間合同3篇
- 2024年度知識產(chǎn)權交易與評估合同范本3篇
- 2024年度校企合作人才培養(yǎng)與科研項目合作合同范本3篇
- 貴州省前期物業(yè)服務合同2025
- 食品肉食銷售合同范例
- 貨物托管代租合同范例
- 牧草收割合同范例
- 年產(chǎn)10萬噸燒堿10萬噸聚氯乙烯項目可行性研究報告
- 北師大版(2019)必修第二冊Unit 5 Humans and nature Lesson 3 Race to the pole教學設計
- 2024年國家氣象系統(tǒng)招聘(864人)高頻難、易錯點500題模擬試題附帶答案詳解
- 中央空調工程售后服務的方案
- 核酸是遺傳信息的攜帶者課件 2024-2025學年高一上學期生物人教版必修1
- 2024內置直驅動力刀塔
- TTJSFB 002-2024 綠色融資租賃項目評價指南
- 統(tǒng)編版(2024新版)七年級上冊歷史期末復習課件
- 2024-2030年串番茄行業(yè)市場發(fā)展分析及前景趨勢與投資研究報告
- 制造業(yè)數(shù)據(jù)架構設計頂層規(guī)劃方案
- 新《建設工程施工合同司法解釋》逐條解讀
評論
0/150
提交評論