基于RS-485總線的PC與多單片機間的串行通信_第1頁
基于RS-485總線的PC與多單片機間的串行通信_第2頁
基于RS-485總線的PC與多單片機間的串行通信_第3頁
基于RS-485總線的PC與多單片機間的串行通信_第4頁
基于RS-485總線的PC與多單片機間的串行通信_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上0  前言    單片機因其優(yōu)越的性價比和靈活的功能配置而被廣泛的應(yīng)用于測控領(lǐng)域。而PC則因為豐富的軟、硬件資源,被廣泛應(yīng)用于網(wǎng)絡(luò)監(jiān)控系統(tǒng)中。這就是一臺PC與多臺單片機所組成的主從式網(wǎng)絡(luò)測控系統(tǒng)。串行通信是計算機和外部設(shè)備進行數(shù)據(jù)交換的重要渠道,由于其成本低,性能穩(wěn)定并遵循統(tǒng)一的標(biāo)準(zhǔn),因而在工程中被廣泛應(yīng)用。本文以華東石油局的一臺油田鉆井的滾動軸承信號采集系統(tǒng)為例,討論一種基于串行通信標(biāo)準(zhǔn)的測控系統(tǒng)的通信協(xié)議及其具體的軟、硬件實現(xiàn)。在本系統(tǒng)中,上位機以PC和Windows操作系統(tǒng)為軟、硬件資源;下位機采用ATMEL公司89C51

2、,總線標(biāo)準(zhǔn)采用的是測控系統(tǒng)常用的RS-485。1  通信系統(tǒng)的硬件設(shè)計盡管RS-232有些缺點,但在兩臺短距離設(shè)備間的短距離信息傳輸時,最通用的還是RS-232。但對于多臺設(shè)備的長距離傳輸,它就很難實現(xiàn)。而RS-485是一個多引出線接口,這個接口可以有多個驅(qū)動器和接收器,可以實現(xiàn)一臺PC和多臺單片機之間的串行通信;而且RS-485的最長的傳輸距離為1200m,適合中距離的傳輸。本文針對油田鉆井的滾動軸承信號采集及傳輸,根據(jù)工地實際工作環(huán)境,采用RS-485通信接口。1.1 PC和RS-485總線的接口3該接口的主要功能是完成RS-232到RS-485的轉(zhuǎn)變,完成這個功能的芯片很多,比

3、如MAX-485,我們的系統(tǒng)采用的是ADAM公司的ADAM4250,RS-232/RS-485轉(zhuǎn)換器,結(jié)構(gòu)如圖(1)所示:                                         

4、60;    圖1  ADAM4250  1.2  89c51和RS-485總線的接口1,4      由于MAX48x/49x系列收發(fā)器組成的差分平衡系統(tǒng)抗干擾能力強,接收器可檢測到200mV的信號,傳輸?shù)臄?shù)據(jù)可以在千米以外得到恢復(fù),特別適合遠(yuǎn)距離通信,可以組成標(biāo)準(zhǔn)的通信網(wǎng)絡(luò)。本系統(tǒng)采用MAX487接口芯片作為收發(fā)器,由于它的輸入阻抗是標(biāo)準(zhǔn)接收器的4倍,因此最多可以掛128個接收器。1.3 系統(tǒng)的總體連接    本系統(tǒng)采用一

5、主多從的總線型連接方式,如圖2所示。為了消除反射,吸收噪音,采用2個120 的匹配電阻R1和R2連在總線的兩端。其中n不大于128。                            圖2    系統(tǒng)總體連接圖 2  通信協(xié)議的設(shè)計   由于RS-485通

6、信是一種半雙工通信,發(fā)送和接受共用同一物理通道,在任意時刻只允許一臺單片機處于發(fā)送狀態(tài),因此要求應(yīng)答的單片機必須在偵聽到總線上呼叫信號已經(jīng)發(fā)送完畢,并且在沒有其他單片機應(yīng)答信號的情況下才能應(yīng)答。如果在時序上配合不好,就會發(fā)生總線沖突,使整個系統(tǒng)的通信癱瘓,無法正常工作。上位機與下位機之間如何進行數(shù)據(jù)傳輸,怎么提高通信的效率和可靠性,以及對通信過程中的故障處理,幀格式的約定,都需要一套詳盡的通信協(xié)議。RS-485總線只制定了物理層電氣標(biāo)準(zhǔn),對上層通信協(xié)議沒有規(guī)定。這給設(shè)計者提供了很大的靈活性。一套完整的通信協(xié)議既要求結(jié)構(gòu)簡單,功能完備,又要求具有可擴充性與兼容性,并且盡量標(biāo)準(zhǔn)化。本系統(tǒng)的協(xié)議就是

7、從這幾個方面考慮的,它主要包括以下幾個部分:2.1 上下位機間的通信過程(1)通信均有上位機發(fā)起,下位機不主動申請通信;(2)當(dāng)處于輪詢狀態(tài)時,上位機依據(jù)下位機地址,定時向下位機發(fā)送呼叫指令。此時,每臺下位機都中斷接受并判斷,地址不相符的下位機中斷返回,執(zhí)行其他下位機任務(wù);反之則把本機地址及其狀態(tài)作為應(yīng)答信號發(fā)送給上位機。上位機接收到應(yīng)答信號后,可以作進一步的處理。2.2 通信協(xié)議本系統(tǒng)采用比較簡單的通信協(xié)議:PC機需要與單片機通信時,首先發(fā)送一個字節(jié)的信號,以16進制表示為AAH,單片機接收到AAH后,就將需要發(fā)送的數(shù)據(jù)連續(xù)地向PC機發(fā)送;PC機與單片機通信結(jié)束時,向單片機發(fā)送一個字節(jié)的信號

8、,以16進制表示為55H,結(jié)束數(shù)據(jù)發(fā)送。單片機發(fā)送給PC機的數(shù)據(jù)格式為: 開始碼數(shù)據(jù)體校驗和結(jié)束碼00HDATA0DATA1DATAN-1DATASUMFFH 3 通信系統(tǒng)的軟件設(shè)計3.1 上位機通信軟件設(shè)計  本系統(tǒng)的上位機軟件用VB6.0實現(xiàn),利用VB6.0提供的MSComm通信控件,可以方便的訪問串口,實現(xiàn)數(shù)據(jù)的接收和發(fā)送。由于本系統(tǒng)用一臺上位機監(jiān)控多臺下位機,所以上位機監(jiān)控界面主要包括3個:(1)輪詢界面,即主監(jiān)控界面。可以監(jiān)測到下位機的狀態(tài)(運行,停機,故障)。考慮到通用型,下位機的臺數(shù)可以根據(jù)實際需要添加或刪除,最多可帶128臺下位機。本系統(tǒng)默認(rèn)為50

9、臺。(2)下位機運行監(jiān)視和控制界面。主要是對某一臺定位控制器進行狀態(tài)監(jiān)視和位置給定。(3)下位機內(nèi)部參數(shù)設(shè)定界面??梢愿鶕?jù)實際需要對某一臺定位控制器的運行參數(shù)進行修改。      開發(fā)通信程序的關(guān)鍵是發(fā)送和接受數(shù)據(jù)。下面給出上位機中數(shù)據(jù)發(fā)送和接收的部分程序:      MSComml.Settings=Settings               ; 串口的波特率設(shè)置

10、     send_arr0(0)=&H02                        數(shù)據(jù)發(fā)送數(shù)組     send_arr1(0)=BPQ_Address          send_arr7(0)=se

11、nd_arr1(0)Xor send_arr2(0)Xor send_arr6(6)      Output_Enable=False                     ; 關(guān)閉輪詢     Open_Port        

12、0;                       開串口     MSComm1.RTSEnable=False                  置發(fā)送狀態(tài)  

13、0;  MSComm1.Output=send_arr0                 發(fā)送     Choose_Delay                      

14、0;      發(fā)送延時     MSComm1.Output=send_arr1     Choose_Delay          MSComm1.Output=sen_arr7     Choose_Delay     MSComm1.RTSEnable=True    &

15、#160;              置接收狀態(tài)     Choose_Frame_delay                      ; 接收延時     Accept_arr=MSCo

16、mm1.Input                 數(shù)據(jù)接收數(shù)組     For j=Lbound(Accept_arr)To Ubound(Accept_arr)        If Ubound(Accept_arr)=7 Then        

17、0;   Buf(j)=buf(j)+Str(Accept_arr(j)  由于程序較長,對程序其它部分不詳細(xì)敘述,這里只列幾個注意點:(1)由于采用半雙工傳輸方式,開始發(fā)送前要禁止接受。發(fā)送結(jié)束后要先關(guān)閉發(fā)送再開啟接收,以保證數(shù)據(jù)傳輸?shù)恼_性。(2)發(fā)送以字節(jié)為單位,每個字節(jié)間要考慮延時,以免因溢出而丟失數(shù)據(jù)。延時時間主要取決于傳輸時所確定的波特率。(3)接收數(shù)據(jù)也要考慮延時,以等待下位機將一個單位的數(shù)據(jù)全部發(fā)給上位機。3.2 下位機通信軟件的設(shè)計2本系統(tǒng)中的單片機采用的是ATMEL公司89C51,這是在國內(nèi)應(yīng)用相當(dāng)廣泛的一款單片機,程序用C51來編寫

18、,從實時性角度來考慮,下位機的通信方式采用中斷方式。這樣下位機程序就包括了下位機主程序和下位機中斷服務(wù)程序。主程序用于定時器T1初始化、串行口初始化和中斷初始化。中斷服務(wù)程序用于對上位機的通信。主程序和中斷服務(wù)程序的框圖如圖3、圖4所示。由于篇幅所限,程序這里就不做介紹。 圖(3) 下位機主程序框圖                     圖(4)  下位機中斷服務(wù)程序框圖49

19、9元 378元 780元 1200元 950元   480元4  結(jié)束語   本文設(shè)計并實現(xiàn)了一種應(yīng)用于油田鉆井滾動軸承的振動信號測控系統(tǒng)。該系統(tǒng)采用PC與多單片機之間的串行通信實現(xiàn)測控,采用RS-485總線標(biāo)準(zhǔn),半雙工傳輸方式。上位機采用Windows環(huán)境 下VB6.0開發(fā),編程簡單,界面良好,維護方便;下位機利用單片機內(nèi)自帶的USART通信接口,很好的實現(xiàn)異步串行通信。實驗表明,該方法對于工作環(huán)境比較惡劣的鉆井油田滾動軸承的振動信號的采集與傳輸,達(dá)到了實際要求,為滾動軸承故障檢測提供了方便而有效的振動信號。 參考文獻(xiàn)基金號:江蘇省

20、高校自然科學(xué)基金資助項目(03KJB)1  范逸之,陳立元  Visual Basic與RS-232串行通信控制  北京:中國青年出版社   20022  石東海  單片機數(shù)據(jù)通信技術(shù)從入門到精通  西安:西安電子出版社  20023  ADAM 4000 Data Acquisition Modules Users Manual     Advantech Co.Ltd  1999     &#

21、160;   4  王金成  王旭  一種基于RS-485總線的遠(yuǎn)程通信系統(tǒng)軟件實現(xiàn)  微計算機信息 2001年17卷第9期   系統(tǒng)晶振是 11.0592 MHz;51單片機發(fā)送單片機程序;此程序用Proteus仿真通過 ;此程序在硬件上測試通過;2007-05-27;附有簡化電路圖;為了使初學(xué)者能看懂,程序與圖盡可能的簡單扼要;實驗現(xiàn)象為,發(fā)送端的P1口的哪個鍵被接下,接收端的哪個燈對應(yīng)著亮;如果把兩個單片機的T和R通過無線模塊(如基于MCP2120芯片的模塊)來擴充,便可做成無線通信  &

22、#160;                 ORG                 0000H               

23、60;    AJMP                START                    ORG          

24、       0040HSTART:                    MOV                 SP,#60H     

25、                      MOV                 SCON,#50H          

26、0;        ;串口 方式 1                    MOV                 TMOD,#20H    

27、;               ;T1 方式2                    MOV               

28、;  TL1,#0FDH                   ;波特率 9600 的常數(shù)                    MOV       &

29、#160;         TH1,#0FDH                    SETB                TR1    

30、                  mov                 r5,#00h               

31、    WAIT:                    mov               p1,#0ffh          

32、          mov               a ,p1                    mov     

33、0;         r5,a                    lcall delay                    

34、;  ;讀鍵盤,這里去抖動,還要加幾句話                    mov               a ,p1           &

35、#160;         nop                    CJNE                A,5,WAIT    &

36、#160;           ;是否有鍵輸入                    MOV                 SBUF,a 

37、                     ;串口輸出鍵盤輸入的值                    NOPSS:        

38、;         JBC                 TI,WAIT                     ;是否發(fā)送完畢  

39、60;                 SJMP                SSDELAY:                &

40、#160;                     ;延時子程序                    PUSH        &

41、#160;       0                           ;保存現(xiàn)場                

42、;    PUSH                1                    MOV           

43、      0,#06HDELAY1: MOV                 1,#0H                    DJNZ     &

44、#160;          1,$                    DJNZ                0,DELAY1   &

45、#160;                POP                 1                 &

46、#160;         ;恢復(fù)現(xiàn)場                    POP                 0    &

47、#160;               RET                    END;系統(tǒng)晶振是 11.0592 MHz;51單片機接收單片機程序;此程序用Proteus仿真通過;此程序在硬件上測試通過;2007-05-27;附有簡化電路圖;為了使初學(xué)者能看懂,

48、程序與圖盡可能的簡單扼要;實驗現(xiàn)象為,發(fā)送端的P1口的哪個鍵被接下,接收端的哪個燈對應(yīng)著亮;如果把兩個單片機的T和R通過無線模塊(如基于MCP2120芯片的模塊)來擴充,便可做成無線通信                    ORG               

49、;  0000H                    AJMP                START            

50、        ORG                 0040HSTART:                        &#

51、160;  MOV                 SCON,#50H                   ;串口 方式 1          

52、60;         MOV                 TMOD,#20H                   ;T1 方式 2   

53、0;                MOV                 TL1,#0FDH                &#

54、160;  ;波特率 9600 的常數(shù)                    MOV                 TH1,#0FDH        

55、0;           SETB                TR1                       &

56、#160;     WAIT:                    JBC                 RI,DIS_REC      

57、0;           ;是否接收到數(shù)據(jù)                           sjmp           &#

58、160;    waitDIS_REC:                    MOV                 A,SBUF       &#

59、160;              ;讀串口接收到的數(shù)據(jù)                            mov       

60、;          p1,a                    SJMP                wait    &#

61、160;               end雙機通信怎么連,多機通信并上去就可以了 回答者: -    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

62、歐) 回答者: -    2009-4-3 10:01 給設(shè)計圖?RS-485單片機的話,單純從硬件來說,其實和RS-232串口非常類似,只是將232芯片替換成485芯片就可以了,多機通信的問題,485本身就支持點對多點通信的,只不過是半雙工的,在軟件編寫的時候要多注意一下仲裁機制而已。這個是根據(jù)協(xié)議來的,485總線設(shè)備是帶有地址碼的,打個比方吧,232串口通信就是兩個人通過電話進行通信,肯定只能點對點,而485則是教室里面一個老師和很多個學(xué)生交談,當(dāng)老師(主控設(shè)備)點名(即輪詢到某個485地址碼)要求某個學(xué)生(從設(shè)備)回答問題,這個學(xué)生如果沒有翹課(從設(shè)備故障或者通信故障

63、)的話,就應(yīng)答站起來回答問題。在老師點名,學(xué)生答問的過程中,都是只有一個人發(fā)言,因為485總線有這樣的仲裁機制,所以才可以實現(xiàn)點到多點的通信,而232的則沒有這個機制,所以不行。不知道這樣是否清楚。 下圖是使用MAX485芯片設(shè)計了一個RS232到RS485的轉(zhuǎn)換接口電路圖。AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節(jié)閃爍可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復(fù)擦除

64、100次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。外形及引腳排列如圖所示主要特性:·與MCS-51 兼容 ·4K字節(jié)可編程閃爍存儲器 ·壽命:1000寫/擦循環(huán)·數(shù)據(jù)保留時間:10年·全靜態(tài)工作:0Hz-24MHz·三級程序存儲器鎖定·128×8位內(nèi)部RA

65、M·32可編程I/O線·兩個16位定時器/計數(shù)器·5個中斷源 ·可編程串行通道·低功耗的閑置和掉電模式·片內(nèi)振蕩器和時鐘電路管腳說明:VCC:供電電壓。GND:接地。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TT

66、L門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器

67、的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口,如下表所示:口管腳 備選功能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

68、.7 /RD(外部數(shù)據(jù)存儲器讀選通)P3口同時為閃爍編程和編程校驗接收一些控制信號。RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間。ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳

69、被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。/EA/VPP:當(dāng)/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。振蕩器特性:XT

70、AL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅(qū)動器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。PC機與單片機AT89C51的串行通信  在以單片機為基礎(chǔ)的數(shù)據(jù)采集和實時控制系統(tǒng)中,通過計算機中的 RS-232 接口進行計算機與單片機之間的命令和數(shù)據(jù)傳送,就可以利用計算機對生產(chǎn)現(xiàn)場進行監(jiān)測和控制。由于計算機上的 RS-232 所傳送的距離不超過 30m ,所以,在遠(yuǎn)距離的數(shù)據(jù)傳送和控制時,可以用 的接口轉(zhuǎn)換芯片

71、將 RS-232 轉(zhuǎn)換成 RS-485 協(xié)議進行遠(yuǎn)距離傳送。在發(fā)送和接收端都進行協(xié)議轉(zhuǎn)換后, RS-485 協(xié)議對數(shù)據(jù)傳送來說是相對透明的,所以依然可以使用計算機中的 RS-232 進行遠(yuǎn)距離的數(shù)據(jù)傳送和控制。在最簡單的 RS-232 直接傳送通信系統(tǒng)中,只要發(fā)送和接收雙方同時準(zhǔn)備好,僅用信號發(fā)送端 (TXD) ,信號接收端 (RXD) 和信號地 (GND)3 根線即可進行通信;若以應(yīng)答方式進行數(shù)據(jù)通信,可使用請求發(fā)送 (RTS) 、清除發(fā)送 (CTS) 或數(shù)據(jù)終端準(zhǔn)備 (DTR) 、數(shù)據(jù)裝置準(zhǔn)備 (DSR) 進行硬件握手。在 Windows95 下,可以很方便地使用 Win32 通信 API

72、 函數(shù)來實現(xiàn)這些硬件的握手以及數(shù)據(jù)的傳送。在 89C51 單片機系統(tǒng)中,分別從 P3.0 和 P3.1 引出串口線 RXD 和 TXD 通過專用的電平轉(zhuǎn)換芯片轉(zhuǎn)換成 RS-232 接口標(biāo)準(zhǔn)的電平,這樣,二者之間就可以通過 RS-232 接口進行數(shù)字信號的傳送。單片機也可以以直接傳送或應(yīng)答握手的方式進行數(shù)據(jù)通信,但由于握手方式占用其他的端口,而單片機的端口數(shù)量有限,所以,計算機與單片機的通信常采用直接傳送的方式,本文將重點介紹。      1 Windows95 下的通信編程      Windows95 通信體系提

73、供了 1 個改進的串行應(yīng)用程序接口 SAPI 用來進行交互式串行通信。其中,串口和其他通信設(shè)備是作為文件進行處理的,串口的打開、關(guān)閉、讀取和寫入所用的函數(shù)和操作文件的函數(shù)相同。 通信會話以調(diào)用 CreateFile 函數(shù)開始, CreateFile 函數(shù)為讀訪問或?qū)懺L問打開串口,打開成功后返回該串口句柄,供讀寫串口時使用。 CreateFile 函數(shù)的使用如下: CreateFile(szDevice,fdwAccess,fdwShareMode,lpsa,fdwCreate,fdwAttrsAndFlags,hTemplateFile) 其中,第 1 個參數(shù) szDevice 是要打開的串口

74、邏輯名,如 COM1 或 COM2 ;第 2 個參數(shù) fdwAccess 指定串口的訪問類型,如讀、寫或兩者兼而有之,大部分通信是雙向的,因而通常設(shè)置為: GENERICREAD GENERICWRITE ;第 3 個參數(shù) fdwShareMode 指定串口的共享屬性,串口不能共享,所以它必須為 0 ;第 4 個參數(shù) lpsa 引用安全性屬性結(jié)構(gòu);第 5 個參數(shù) fdwCreate 指定如果 CreateFile 正被已有的文件調(diào)用時應(yīng)做些什么,既然串口總是存在,此參數(shù)就必須被設(shè)置為 OPENEXISTING 。第 6 個參數(shù) fdwAttrsAndFlags 描述了該端口的各種屬性,對串口而

75、言,唯一有意義的設(shè)置是 FILEFLAGOVERLAPPED ,指定該設(shè)置時,端口 I/O 可以在后臺進行;最后 1 個參數(shù) hTemplateFile 是指向模板文件的句柄,當(dāng)端口打開時,該參數(shù)為 NULL 。      打開串口后,在 Windows95 下可以對串口進行合適的配置。 Windows95 提供了 COMMPROP 結(jié)構(gòu), COMMPROP 結(jié)構(gòu)中包含了對串口允許的設(shè)置,如波特率、數(shù)據(jù)位數(shù)、停止位的個數(shù)以及奇偶校驗方法等,如果串口連接到調(diào)制解調(diào)器, COMMPROP 結(jié)構(gòu)中還包含調(diào)制解調(diào)器支持的設(shè)置。但 COMMPROP 結(jié)構(gòu)給出的只是

76、單純的信息,它不能用來改變串口的設(shè)置。 Windows95 下串口設(shè)置的改變是通過改變它的 DCB 結(jié)構(gòu)來實現(xiàn)的, DCB 結(jié)構(gòu)中包含了所有串口的設(shè)置,其中包括硬件的握手、流控制等。     Windows95 提供 GetCommState 函數(shù)來得到當(dāng)前串口的設(shè)置情況,該函數(shù)接收 1 個打開的端口句柄和 1 個指向 DCB 結(jié)構(gòu)的指針,在 DCB 結(jié)構(gòu)中返回信息, GetCommState 函數(shù)的補充函數(shù)是 SetCommState 函數(shù), SetCommState 函數(shù)將 DCB 結(jié)構(gòu)中的內(nèi)容寫向串口設(shè)置,這 2 個函數(shù)的調(diào)用如下:  &

77、#160;   BOOLGetCommState(hComm,&dcb)      BOOLSetCommState(hComm,&dcb)      其中, hComm 為打開串口的句柄, dcb 為 1 個指向 DCB 的結(jié)構(gòu)。      Windows95 中實現(xiàn)串口的讀寫函數(shù)與文件的讀寫函數(shù)相同,讀寫函數(shù)的使用格式如下:      ReadFile(hComm,inbuff,nBytes,&a

78、mp;nBytesRead,&overlapped)      WriteFile(hComm,outbuff,nBytes,&nBytesWrite,&overlapped)      其中,第 1 個參數(shù)是打開串口的句柄,第 2 個參數(shù)是數(shù)據(jù)所使用的緩沖區(qū),第 3 個參數(shù)是要讀取的字節(jié)數(shù),第 4 個參數(shù)是實際讀取的字節(jié)數(shù),實際讀取的字節(jié)數(shù)可能小于要讀取的字節(jié)數(shù),最后 1 個參數(shù)指向 1 個覆蓋似的結(jié)構(gòu),當(dāng) CreateFile 中 dwAttrsAndFlags 參數(shù)設(shè)置為 FILEFL

79、AGOVERLAPPED 時,此參數(shù)可以指定 1 個 OVERLAPPED 結(jié)構(gòu),使數(shù)據(jù)的讀寫操作在后臺進行。      讀寫端口可以通過 4 種技術(shù)來實現(xiàn):查詢、同步 I/O 、異步 I/O( 后臺 I/O) 和事件驅(qū)動 I/O 。查詢方式直接、易于理解,但占用大量 CPU 時間;同步 I/O 直到讀取所指定字節(jié)數(shù)或超時時才返回,這樣很容易長時間地阻塞線程;異步 I/O 可以在后臺讀寫數(shù)據(jù),而在前臺做其他的事情;事件驅(qū)動 I/O 是由 Windows95 通知應(yīng)用程序某些事件什么時候發(fā)生,然后根據(jù)所發(fā)生的事情來對串口進行操作。   

80、   這 4 種不同的技術(shù),各有利弊和自己適用的領(lǐng)域,所以,在不同的通信系統(tǒng)中,可以根據(jù)不同的要求采用不同的技術(shù)。在監(jiān)測系統(tǒng)中,由于事件的偶然性和要求傳送的實時性,計算機常采用事件驅(qū)動 I/O 方式來進行現(xiàn)場監(jiān)測。      在事件驅(qū)動 I/O 方式下, Windows95 報告給應(yīng)用程序的事件由函數(shù) GetCommMask 返回,改變返回的事件時,可以使用 SetCommMask 函數(shù)設(shè)置,這 2 個函數(shù)的調(diào)用如下:     GetCommMask(hComm,&dwMask) 

81、60;    SetCommMask(hComm,dwMask)      第 1 個參數(shù)是打開串口的句柄,第 2 個參數(shù)是要等待的 1 個或多個事件的掩碼。在用 SetCommMask 設(shè)置了有用的事件后,應(yīng)用程序調(diào)用 WaitCommEvent 函數(shù)來等待事件的發(fā)生,直到事件發(fā)生, WaitCommEvent 函數(shù)返回。 WaitCommEvent 函數(shù)使用格式如下:      WaitCommEvent(hComm,&dwEvent,&overlapped) &#

82、160;    第 1 個參數(shù)是打開串口的句柄,第 2 個參數(shù)是返回的事件,第 3 個參數(shù)是指定同步或者異步操作。當(dāng)函數(shù)返回后,可根據(jù)返回的事件掩碼進行相應(yīng)的串口操作。 完成通信后,串口應(yīng)該關(guān)閉,否則,它始終處于打開狀態(tài),其他應(yīng)用程序就不能打開或使用它。關(guān)閉串口的函數(shù)為: CloseHandle(hComm) ,其中, hComm 為打開的串口句柄。      2 單片機下的通信編程      單片機 89C51 的串行端口有 4 種工作方式,通過編程設(shè)計,可以使其工作在任一方式,以滿

83、足不同場合的需要。其中,方式 0 主要用于外接移位寄存器,以擴展單片機的 I/O 電路;方式 1 主要用于雙機之間或外設(shè)電路的通信;方式 2 、 3 除有方式 1 的功能外,還可用作多機通信,以構(gòu)成多微機系統(tǒng),方式 2 、 3 的區(qū)別在于波特率的不同。 單片機的串行通信的波特率可以程控設(shè)定,在不同的工作方式下,由時鐘振蕩頻率的分頻值或由定時器 T1 的定時溢出時間確定。 單片機的串行端口有 2 個控制寄存器,用來設(shè)置工作方式、發(fā)送或接收的狀態(tài)、特征位、數(shù)據(jù)傳送的波特率以及中斷標(biāo)志 TI 和 RI 。單片機的串行端口有 1 個數(shù)據(jù)寄存器 SBUF ,該寄存器為發(fā)送和接收所共有,在一定條件下,向

84、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ā)送或接收完后, TI/RI 自動置 1 ,請求串行中斷,若 CPU 響應(yīng)中斷,則執(zhí)行串行中斷服務(wù)程序,并把 TI/RI 清 0 以再次響應(yīng)中斷。對在方式 2 、 3 下的接收,還要視串口控制寄存器 SCON 的設(shè)置才可確定 RI 是否被置位以及串口中斷是否開放。 實時控制中,由于事件的突發(fā)性,常采用中斷的方式進行數(shù)據(jù)傳送,中斷方式能更大限度地

85、提高資源的利用率,使 CPU 在不進行數(shù)據(jù)通信時做其他的工作。下面重點介紹單片機在方式 1 下的中斷方式編程。 方式 1 是 10 位異步通信方式,其中包括 1 個起始位, 8 個數(shù)據(jù)位和 1 個停止位。波特率由定時器 T1 的溢出率和串口控制寄存器 SMOD 的狀態(tài)確定,在 CPU 的晶振為 11.0592MHz 時,波特率常采用 9600b/s 。 對 SBUF 進行寫操作就可啟動發(fā)送,在發(fā)送移位時鐘的同步下,從 TXD 先送出起始位,然后是 8 位數(shù)據(jù)位,最后是停止位,這樣, 1 幀數(shù)據(jù)發(fā)送完,中斷標(biāo)志 TI 置位。 在允許接收的條件下 (REN 1) ,當(dāng) RXD 出現(xiàn)由 1 到 0

86、的負(fù)跳變時,即被當(dāng)成是串行發(fā)送來的 1 幀數(shù)據(jù)的起始位,從而啟動 1 次接收過程。當(dāng) 8 位數(shù)據(jù)接收完,并檢測到高電平停止位后,即把收到的 8 位數(shù)據(jù)裝入 SBUF ,置位 RI , 1 幀數(shù)據(jù)的接收過程就完成了。 下面是單片機以方式 1 在直接傳送下的中斷接收和發(fā)送程序。由于沒有使用通信握手,所以通信雙方都應(yīng)做好通信準(zhǔn)備。在計算機接收、單片機發(fā)送時,由計算機先發(fā)送字母“ R ”,通知單片機計算機已準(zhǔn)備好,然后計算機在事件驅(qū)動 I/O 方式下等待接收到字符“ Y ”;當(dāng)單片機接收到“ R ”時,向計算機發(fā)送“ Y ”,表示單片機也已準(zhǔn)備好,這樣,一旦計算機接收到“ Y ”就表示雙方都已準(zhǔn)備好,

87、二者之間就可以進行數(shù)據(jù)交換了。在計算機發(fā)送、單片機接收時,計算機發(fā)送 1 幀數(shù)據(jù),單片機響應(yīng)中斷,接收數(shù)據(jù)。單片機程序的具體實現(xiàn)過程如下: org 0000h ajmp start org 0023h ;串行中斷入口 ljmp s&r org 0100h start: mov tmod,#20h ;設(shè)置定時器 T1 方式 2 mov pcon,#00h ;使 SMOD 為 0 mov tll,#0fdh ;波特率為 9600b/s mov thl,#0fdh setb ea ;開全局中斷 clr et1 ;關(guān) T1 中斷 setb es ;開串行中斷 setb trl ;開 T1 定時

88、 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,re ;是否接收到“ 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,$ clrt

89、i incr0 end tr:reti ;中斷返回      3 結(jié)束語 串口通信是一種廣泛應(yīng)用于各個領(lǐng)域的通信方式,由于目前大部分計算機都安裝了 Windows95 操作系統(tǒng),所以本文具體實現(xiàn)了在 Windows95 下利用它的 SDK 函數(shù)來與單片機進行串口通信。本文所提出的實現(xiàn)函數(shù)在所有當(dāng)前流行軟件如 VC+ 、 Delphi 等中都可實現(xiàn)。它不僅可以用于近距離的 RS-232 通信,而且,還可以實現(xiàn)中遠(yuǎn)距離 RS-485 通信。在使用該程序的通信系統(tǒng)中,近遠(yuǎn)距離的通信都取得良好的效果。      參考文獻(xiàn)

90、     1 MirhoCA,TerrisseA 著,賀軍,高勝友譯 .WINDOWS95 通信編程 . 北京:清華大學(xué)出版社, 1997      2 陳光東,趙性初 . 單片微型計算機原理與接口技術(shù) . 武漢:華中理工大學(xué)出版社, 1993PC機與單片機AT89C51的串行通信22009-02-16 15:08線路控制寄存器(LCR):位 注 釋 Bit7=1允許訪問波特率因子寄存器Bit7=0允許訪問接收/發(fā)送及中斷允許寄存器Bit6設(shè)置間斷,0-禁止,1-設(shè)置Bit5:3=XX0無校驗Bit5:3=001奇

91、校驗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è)定通訊所需的一些基本參數(shù)。Bit7為1指定波特率因子寄存器有效,為0則指定發(fā)送/接收及IER有效。Bit6置1會將發(fā)送端置為0,這將會使接收端產(chǎn)生一個“間斷”。Bit3-5用來設(shè)定是否使用奇偶校驗以及奇偶校驗的類型,Bit3=1時使用校驗,Bit4為0則為奇校驗,1為偶校驗,而Bit5則強

92、制校驗為1或0,并由Bit4決定具體為0或1。Bit2用來設(shè)定停止位的長度,0表示1位停止位,為1則根據(jù)數(shù)據(jù)長度的不同使用1.5-2位停止位。Bit0:1用來設(shè)定數(shù)據(jù)長度。MODEM控制寄存器(MCR):位 注 釋 Bit7未使用Bit6未使用Bit5自動流量控制(僅16750)Bit4環(huán)路測試Bit3輔助輸出2Bit2輔助輸出1Bit1設(shè)置RTSBit0設(shè)置DSRMCR寄存器可讀可寫,Bit4=1進入環(huán)路測試模式。Bit3-0用來控制對應(yīng)的管腳。線路狀態(tài)寄存器(LSR):位 注 釋 Bit7FIFO中接收數(shù)據(jù)錯誤Bit6發(fā)送移位寄存器空Bit5發(fā)送保持寄存器空Bit4間斷Bit3幀格式錯Bi

93、t2奇偶錯Bit1超越錯Bit0接收數(shù)據(jù)就緒LSR為只讀寄存器,當(dāng)發(fā)生錯誤時Bit7為1,Bit6為1時標(biāo)示發(fā)送保持及發(fā)送移位寄存器均空,Bit5為1時標(biāo)示僅發(fā)送保持寄存器空,此時,可以由軟件發(fā)送下一數(shù)據(jù)。當(dāng)線路狀態(tài)為0時Bit4置位為1,幀格式錯時Bit3置位為1,奇偶錯和超越錯分別將Bit2及Bit1置位為1。Bit0置位為1表示接收數(shù)據(jù)就緒。MODEM狀態(tài)寄存器(MSR):位 注 釋 Bit7載波檢測Bit6響鈴指示Bit5DSR準(zhǔn)備就緒Bit4CTS有效Bit3DCD已改變Bit2RI已改變Bit1DSR已改變Bit0CTS已改變MSR寄存器的高4位分別對應(yīng)MODEM的狀態(tài)線,低4位表示MODEM的狀態(tài)線是否發(fā)生了變化。以上我們詳細(xì)介紹了PC機的串行通訊硬件環(huán)境,以下將分別給出使用查詢及中斷驅(qū)動的方法編寫的串行口驅(qū)動程序。這些程序僅使用RXD/TXD,無需硬件握手信號。(2) 使用查詢方法的串行通訊程序設(shè)計:pollin

溫馨提示

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

評論

0/150

提交評論