<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > PC與單片機的串行通信及數據處理

PC與單片機的串行通信及數據處理

作者: 時(shí)間:2011-12-29 來(lái)源:網(wǎng)絡(luò ) 收藏

  引言

  Matlab是由美國Mathworks公司開(kāi)發(fā)的面向理論分析研究、工程計算和緩圖的一套具有強大功能的軟件系統。其中Matlab語(yǔ)言是一種以矩陣為基本運算單元的解釋執行的高級語(yǔ)言,編程簡(jiǎn)例,只要幾條語(yǔ)句就能實(shí)現諸如FFT變換、FIR/IIR濾波等數據分析處理,易于掌握。從Matlab6.0版本開(kāi)始,Mathworks公司在軟件中增加了設備控制箱(instrument control toolbox),提供了對RS-232/RS-485通信標準的串口通信的正式支持。利用該工具箱的serial類(lèi)及instrcallback()回調函數,能可靠地進(jìn)行實(shí)時(shí)串地通信。為此,筆者充分結合單片機和Matlab的優(yōu)點(diǎn),基于事件驅動(dòng)的中斷通信機制,提出了一種Matlab環(huán)境下PC機與單片機實(shí)時(shí)方法,極大地簡(jiǎn)化開(kāi)發(fā)流程,提高了系統開(kāi)發(fā)效率。另外,與目前普遍采用的基于Matlab查詢(xún)方式下的非實(shí)時(shí)技術(shù)相比,這種方法的實(shí)用性也大大增強了。

  1 系統總體設計簡(jiǎn)介

  下面以Mircochip公司的PIC16F876單片機為下位機,PC機為上位機組成的實(shí)時(shí)數據采集處理系統為例,介紹基于Matlab環(huán)境下PC機與單片機的實(shí)時(shí)方法的實(shí)現。數據采集系統的結構框圖如圖1所示。PC機串口與單片機USART口通過(guò)MAX232電平轉換芯片相連,系統工作時(shí),Matlab通過(guò)調用設備控制工具箱中的serial類(lèi)及相關(guān)函數。來(lái)創(chuàng )建串口設備對象,得到設備的文件句柄,從而以操作文件的方式實(shí)現對PC機串行口的讀寫(xiě)操作。因而PC機可以通過(guò)Matlab向串行口發(fā)送特殊指令,PIC單片機應用系統對此作出相應的反應,將A/D采樣數據通過(guò)串行口回送給PC機。此時(shí),Matlab通過(guò)中斷的方式,實(shí)時(shí)接收單片機發(fā)送的數據,并完成對數據的分析處理、文件存儲、FIR濾波及圖形顯示。

  2 PIC16F876與PC機串行通信接口的設計

  2.1 PIC16F876單片機串行通信接口的硬件設計

  PIC16F876微處理器芯片內部集成了一個(gè)串行通信(SCI)模塊。該模塊是一個(gè)通用的同步/異步收發(fā)(USART)通信接口。

  PIC16F876的SCI通信接口有兩個(gè)外部引腳——RC6/TX(SCI發(fā)送輸出引腳)和RC7/RX(SCI接收輸入引腳),引腳的信號電平為T(mén)TL類(lèi)型;而PC機串口的異步串行通信基于RS232標準。兩者通信信號的邏輯電平不一致,必須進(jìn)行信號電平轉換。為此,在電路中選用Maxim公司的MAX232芯片,以實(shí)現TTL電平與RS-232電平的雙向轉換。RS-232通信距離一般以不超過(guò)12m為宜,在工業(yè)控制現場(chǎng)很受限制。為保證硬件設計的兼容性和易擴展性,能夠應用于不同場(chǎng)合,考慮到實(shí)際應用的需要,在硬件電路中還可選用一個(gè)MAX491芯片,添加了一個(gè)RS-485通信接口。

  如圖2所示,實(shí)際使用過(guò)程中,系統可以根據需要,靈活使用不同的通信標準,十分方便。當PIC單片機SCI通信接口引腳直接通過(guò)MAX232芯片與PC機串口相連時(shí),系統采用RS-232的通信標準;當PIC單片機SCI通信接口口引腳與MAX489芯片的DI、RO引腳相連時(shí),系統采用RS-485的通信標準。另外,還可通過(guò)PIC單片機控制MAX489芯片的DE、RE引腳,隨時(shí)使能或屏蔽掉MAX489的數據接收和數據發(fā)送功能。

  2.2 PIC16F876與PC機串行通信接口的軟件設計

  本通信系統中規定的字符格式為:每一幀的數據占10位——1位起始位,8位數據位,1位停止位,無(wú)奇偶校驗位。中間的8位數據位即為有效的通信傳輸字節。雙方的波特率設置為115.2kb/s,以較高速度進(jìn)行通信。同時(shí),為了增強通信的可靠性、減少通信的誤碼率,在通信過(guò)程中約定了雙方的軟件握手方法。為了不致使通信過(guò)于復雜,提高通信速度,可以直接將握手信號0xFF嵌入到數據包中。軟件握手協(xié)議規定如下:PC機發(fā)送符合握手信號0xFF給單片機,PIC單片機接收到的上位機數據若為握手信號0xFF,則回送兩次A/D采樣數據包,并將握手信號0xFF嵌入到數據包作為第一個(gè)數據,兩次發(fā)送數據的時(shí)間間隔為5ms;單片機接收到的上位機數據若不是握手信號,則繼續等待。若PC機接收到的數據包的第1個(gè)字節不是0xFF,則屏棄該數據包;若是,則表示握手成功,經(jīng)校驗正確后將該數據包直接存儲接收,并從中分解有效的A/D采樣數據信息。

[next]

  PIC16F876端串行通信的C語(yǔ)言程序流程如圖3所示,相應的主要通信源代碼如下:

//串口相關(guān)寄存器的初始化子程序void sci_initial(){SPBRG=0C0A; //設置通信波特率為115.2kb/sTXSTA=0X04; //選擇異步高速通信模式RCSTA=0x80; //串行口使能,接收數據長(cháng)度為8位,無(wú)奇偶校驗TRISC6=0; //RC6引腳設置為輸出方式TRISC7=1; //PC7引腳設置為輸入方式}//串口接收和發(fā)送數據子程序void sci_com(){while(!RCIF); //查詢(xún)接收中斷標志位,等待上位機發(fā)送的串口數據rec_data[0]=RCREG;//接收串口數據if(rec_data[0]==0xFF){send_data[0]=rec_data[0]; //在第1組數據中嵌入回送握手數據0xFFfor(j=0;j33;j++){TXREG=send_data[j]; //發(fā)送第1組32字節的A/D轉換數據,包含握手信號0xFF為33個(gè)字節數據while(!TXIF); //查詢(xún)發(fā)送標志位,等待數據發(fā)送完畢再進(jìn)行下一次數據發(fā)送}delay_ms(5); //PIC單片機定時(shí)5ms發(fā)送第2組A/D轉換數據send1_data[0]=rec_data[0]; //在第2組數據中嵌入回送握手數據0xFFfor(j=0;j33;j++){TXREG=send1_data[j];//發(fā)送第2組32個(gè)字節A/D轉換數據及握手信號數據While(!TXIF); //查詢(xún)發(fā)送標志位,等待數據發(fā)送完畢再進(jìn)行下一次數據發(fā)送}}}

  3 Matlab環(huán)境下PC機與單片機的通信

  在Matlab6.0中新增的設備控制工具條(instrument control toolbox)用來(lái)負責上、下位機之間的通信。該設備控制工具箱的特色如下:

 ?、僦С只诖薪涌冢≧S-232、RS-422、RS-485)、GPIB總線(xiàn)(IEEE2488、HPIB標準)、VISA總線(xiàn)的通信;

 ?、谕ㄐ艛祿С侄M(jìn)制和文本(ASCII)兩種方式,文本方式支持SCPI(Standard Commands for Programmable Instruments)語(yǔ)言;

 ?、壑С之惒酵ㄐ藕屯酵ㄐ?;

 ?、苤С只谑录寗?dòng)的通信。

  從以上的Matlab設備控制工具箱的特點(diǎn)可以看到,Matlab完全可以滿(mǎn)足我們實(shí)現串行通信的要求。

  3.1 Matlab對串行口控制的基礎知識

  Matlab對串行口的編程控制主要分為四個(gè)步驟。

 ?、賱?chuàng )建串口設備對象并設置其屬性。

  scom=serial('com1');%創(chuàng )建串口1的設備對象scom

  scom.Terminator='CR';%設置終止符為CR(回車(chē)符),缺省為L(cháng)F(換行符)

  scom.InputBufferSize=1024;%輸入緩沖區為256B,缺省值為512B

  scom.OutputBufferSize=1024;%輸出緩沖區為256B,缺省值為512B

  scom.Timeout=0.5;%Y設置一次讀或寫(xiě)操作的最大完成時(shí)間為0.5s,缺省值為10s

  s.ReadAsyncMode='continuous'(缺省方式);%在異步通信模式方式下,讀取串口數據采用連續接收數據(continuous)的缺省方式,那么下位機返回的數據會(huì )自動(dòng)地存入輸入緩沖區中.

  注意:在些屬性只有在對象沒(méi)有被打開(kāi)時(shí)才能改變其值,如InputBufferSize、OutputBufferSize屬性等。對于一個(gè)RS-232/RS-422/RS-485串口設備對象,其屬性的缺省值為波特率9 600b/s,異步方式,通信數據格式為8位數據位,無(wú)奇偶校驗位,1位停止位。如果要設置的串口設置對象的屬性值與缺省值的屬性值相同,用戶(hù)可以不用另行設置。

  另外,設置串口設置對象的屬性也可以用一條指令完成,如:scom=serial('COM1','BaudRate',38400,'Parity','none','DataBits',8,'StopBits',1)。也可以用set命令,如set(scom,'BaudRate',19200,'Parity','even')。創(chuàng )建了對象后可以在Matlab命令窗口直接敲對象名并回車(chē),看到其基本屬性和當前狀態(tài)。若需要知道其全部的屬性,可以用get(scom)命令。

 ?、诖蜷_(kāi)串口設備對象。

  fopen(scom);

 ?、圩x寫(xiě)串口操作。初始化并打開(kāi)串口調協(xié)對象之后,現在可以對串口設備對象進(jìn)行讀寫(xiě)操作,串口的讀寫(xiě)操作支持二進(jìn)制和文本(ASCII)兩種方式。當Matlab通信數據采用西方(ASCII)方式時(shí),讀寫(xiě)串口設備的命令分別是fscanf、fpritf;當Matlab通信數據采用二進(jìn)制方式時(shí),讀寫(xiě)串口設備的命令分別是fread、fwrite。下面以文本方式讀寫(xiě)串口為例:

  a.讀串口。A=fscanf(scom,'%d',[10,100];%從串口設備對象scom中讀入10*100個(gè)數據填充到數組A[10,100]中,并以整型的數據格式存放。

單片機相關(guān)文章:單片機教程


單片機相關(guān)文章:單片機視頻教程


單片機相關(guān)文章:單片機工作原理


數字通信相關(guān)文章:數字通信原理


通信相關(guān)文章:通信原理




關(guān)鍵詞: 串行通信 數據處理

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>