單片機(jī)與PC機(jī)串口通訊設(shè)計(jì)_第1頁
單片機(jī)與PC機(jī)串口通訊設(shè)計(jì)_第2頁
單片機(jī)與PC機(jī)串口通訊設(shè)計(jì)_第3頁
單片機(jī)與PC機(jī)串口通訊設(shè)計(jì)_第4頁
單片機(jī)與PC機(jī)串口通訊設(shè)計(jì)_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第一章串口通訊的系統(tǒng)組成與原理系統(tǒng)組成及通訊原理系統(tǒng)組成一、MSP430F149功能簡(jiǎn)介:本設(shè)計(jì)采用的主要芯片為MSP430F149,該單片機(jī)屬于德州儀器公司MSP430F14X/16XFLASH系列。該系列是一組工業(yè)級(jí)超低功耗的微控制器,運(yùn)行環(huán)境溫度為-40~+85攝氏度工作電壓范圍~,MSP430單片機(jī)之因此有超低的功耗,是由于其在降低芯片的電源電壓及靈便而可控的運(yùn)行時(shí)鐘方面都有其獨(dú)到之處。由于擁有16位RISC(精簡(jiǎn)指令集)結(jié)構(gòu),16位寄存器和常數(shù)寄存器,MSP430達(dá)到了最大的代碼效率。數(shù)字控制的振蕩器供應(yīng)快速?gòu)乃械凸哪J角逍训交顒?dòng)模式的能力時(shí)間少于6ms。MSP430F149有較高的辦理速度,在8MHz晶體驅(qū)動(dòng)下指令周期為125ns。別的它帶有兩個(gè)16位準(zhǔn)時(shí)器(帶看門狗功能)、速度極快的8通道12位A/D變換器(ADC)(帶內(nèi)部參照電壓、采樣保持和自動(dòng)掃描功能)、一個(gè)內(nèi)部比較器和兩個(gè)通用同步/異步發(fā)射接收器、48個(gè)I/O口(均可獨(dú)立控制)的微辦理器結(jié)構(gòu)。硬件乘法器提高了單片機(jī)的性能并使單片機(jī)在編碼和硬件上可兼容[3]。這些特點(diǎn)保證了可編制出高效率的源程序。二、系統(tǒng)組成1、系統(tǒng)框圖系統(tǒng)組成如圖1-1所示,由上位機(jī)(即工業(yè)控制計(jì)算機(jī))、通訊接口和下位機(jī)3部分組成。上位機(jī)采用的是工控機(jī),智能終端由單片機(jī)MSP430F149和外面?zhèn)鞲衅鞣糯箅娐返冉M成(本設(shè)計(jì)部涉及該部分的設(shè)計(jì))。單片機(jī)與PC機(jī)之間通訊方式為串行異步方式(UART),下位機(jī)采用中斷方式進(jìn)行與上位機(jī)的數(shù)據(jù)交換,上位機(jī)采用準(zhǔn)時(shí)盤問方式對(duì)各串口進(jìn)行讀寫操作。單片機(jī)MSP430要想與PC串口連接也許其他帶有串口的終端設(shè)備連接,接口電路部分必定要進(jìn)行EIA-RS-232-C與MSP430電平和邏輯關(guān)系的變換[4]。本設(shè)計(jì)將采用MAX3221芯片,達(dá)成3V~5V電平與串口電平的雙向變換。圖1-1系統(tǒng)框圖通訊原理及協(xié)議一、MSP430的串口通訊模塊(USART)由于本設(shè)計(jì)解決的是串口通訊問題,因此通訊的基根源理是利用MSP430的串口通訊模塊(USART)來實(shí)現(xiàn)單片機(jī)和PC機(jī)之間的串口通訊。1、USART的硬件組成:SP430F169的串行通訊模塊(USART)的作用主若是實(shí)現(xiàn)對(duì)外通訊,它可以實(shí)現(xiàn)異步通訊(UART)和同步通訊(SPI)兩中通訊功能[5]。圖1-2是USART的通訊模塊。由圖1-2能夠看出USART模塊分別由波特率部分,接收部分,發(fā)送部分,端口IO部分組成。USART接收部分包括接收寄存器,接收移位寄存器以及控制模塊組成,它在接收信息的時(shí)候產(chǎn)生一些狀態(tài)信息,并設(shè)置相應(yīng)的中斷標(biāo)志位。USART的發(fā)送部分包括發(fā)送寄存器,發(fā)送移位寄存器以及控制模塊組成,它在發(fā)送的時(shí)候產(chǎn)生一些狀態(tài)信息,并能夠設(shè)置發(fā)送中斷標(biāo)志位。USART的波特率產(chǎn)生部分主要包括時(shí)鐘的選擇,波特率的產(chǎn)生以及波特率的調(diào)整部分組成,它經(jīng)過設(shè)置波特率寄存器和波特率調(diào)整寄存器來獲得需要的波特率。USART包括一個(gè)控制模塊,經(jīng)過控制模塊能夠選擇相應(yīng)的工作模式,同時(shí)設(shè)置相應(yīng)的管腳,比方對(duì)異步和同步工作方式的選擇,對(duì)奇偶校驗(yàn)位和停止位個(gè)數(shù)等所有設(shè)置都是經(jīng)過操作該模塊的寄存器來實(shí)現(xiàn)的。對(duì)于不相同系列的MSP單片機(jī)其USART模塊可能有一個(gè)也可能有兩個(gè),而MSP430F149有兩個(gè),分別是USART0和USART1。圖1-2USART模塊組成2、USART的控制寄存器和工作模式USART的控制寄存器是其八個(gè)寄存器之中的一個(gè),表1-1是其位的格式,表1-1控制寄存器PENVPEVSPCHARLISTENSYNCMMSWRSTUSART的控制寄存器有8個(gè)有效控制位,經(jīng)過對(duì)這些控制位的設(shè)置能夠?qū)ぷ髂J?,通訊協(xié)議,校驗(yàn)位等進(jìn)行選擇。用戶對(duì)USART的所有操作都是經(jīng)過操作該寄存器的控制位來達(dá)成的[6]。下面是各個(gè)位的簡(jiǎn)單功能描述,知道這些控制位的功能,有助于我們?cè)诤筮呥M(jìn)行硬件連接和軟件設(shè)計(jì).PENV:校驗(yàn)使能位。該位為0不相贊同校驗(yàn);為1時(shí),贊同校驗(yàn),且在發(fā)送時(shí)產(chǎn)生校驗(yàn)位,在接收時(shí)希望接收到校驗(yàn)位。在地址位多機(jī)模式中地址位包括在校驗(yàn)計(jì)算中。PEV:奇偶校驗(yàn)位。為0時(shí),奇校驗(yàn),為1時(shí)進(jìn)行偶校驗(yàn)。SP:停止位。接收時(shí)停止位只有一個(gè)。發(fā)送時(shí),該位為0,只有一個(gè)停止位;該位為1時(shí),有兩個(gè)停止位。CHAR:字符長(zhǎng)度位。該位為0表示發(fā)送的數(shù)據(jù)為7位,該位為1時(shí)表示發(fā)送的數(shù)據(jù)為8位。LISTEN:監(jiān)聽使能位。該位為0沒有反響;該位為1,有反響,發(fā)送的數(shù)據(jù)送到接收器,能夠進(jìn)行自環(huán)測(cè)試。SYNC:該位為0時(shí),USART為異步通訊(UART)模式;該位為1,USART為同步通訊(SPI)模式。MM:多機(jī)模式選擇。當(dāng)該位為0時(shí),多機(jī)模式選擇線路悠閑多機(jī)協(xié)議;該位為1時(shí),多機(jī)模式選擇地址位多機(jī)協(xié)議。SWRST:軟件復(fù)位使能位。也叫控制位。該位影響著其他控制位和狀態(tài)位的狀態(tài),在串行口的使用過程中,這一位比較重要。一次正確的USART模塊初始化應(yīng)該是這樣的序次:先在SWRST=1的情況下設(shè)置串口;爾后設(shè)置SWRST=0;最后若是使用中斷,則設(shè)置相應(yīng)的中斷使能。該位為0時(shí):USART模塊被贊同。該位為1時(shí):若是該地址位,則USART狀態(tài)機(jī)和操作運(yùn)行標(biāo)志位都被初使化成復(fù)位狀態(tài)(URXIFG=URXIE=UTXIE=0,UTXIFG=1);同時(shí)所受影響的邏輯位保持在復(fù)位狀態(tài),直到SWRST位復(fù)位。這意味著,當(dāng)系統(tǒng)復(fù)位后,只有對(duì)SWRST位復(fù)位,USART的功能才能被重新贊同;但是接收和發(fā)送標(biāo)志URXE和UTXE不受SWRST控制位的影響。二、通訊方式1、異步模式(UART)的選擇MSP430F149單片機(jī)支持兩種不相同的串行協(xié)議,異步通訊(UART)協(xié)講和同步通訊(SPI)協(xié)議。這兩種協(xié)議的選擇是經(jīng)過控制寄存器中的SYNC位來決定的[7]。本設(shè)計(jì)中主若是利用MSP430的異步通訊(UART)模式原理實(shí)現(xiàn)單片機(jī)與PC機(jī)之間的串口通訊的。MSP430控制寄存器內(nèi)的信息決定了USART的基本操作,選擇異步模式(UART)需要經(jīng)過設(shè)置SYNC=0來實(shí)現(xiàn);本設(shè)計(jì)中對(duì)于其他控制位的設(shè)置還有:設(shè)置CHAR=1,選擇字符長(zhǎng)度為8位;設(shè)置SP=0,選擇停止位1位;設(shè)置PEV=0,選擇奇校驗(yàn);設(shè)置MM=1,選擇地址位多機(jī)模式協(xié)議??刂莆坏倪x擇基本上決定了系統(tǒng)的通訊方式和通訊格式。2、UART模塊的特點(diǎn)由于MSP430單片機(jī)擁有兩個(gè)片內(nèi)的UART:串口0和串口1,實(shí)現(xiàn)兩個(gè)串口通訊相當(dāng)簡(jiǎn)單,只要要設(shè)置合適的寄存器就可以使串口工作起來,兩個(gè)串口都采用中斷方式,當(dāng)接收有數(shù)據(jù)時(shí),設(shè)置一個(gè)標(biāo)志通知主程序有數(shù)據(jù)到來,當(dāng)主程序有數(shù)局要發(fā)送時(shí),設(shè)置一其中斷標(biāo)志進(jìn)入中斷發(fā)送數(shù)據(jù)。本設(shè)計(jì)選用串口1與上位機(jī)進(jìn)行通訊。在異步模式下,接收部分自己實(shí)現(xiàn)幀的同步,通訊雙方只要使用相同的波特率即可。異步模式的幀格式有1位初步位、7位或8位數(shù)據(jù)位,校驗(yàn)位,1位地址位,1或2位停止位組成。在異步模式下,MSP430支持兩種多機(jī)模式:線路悠閑多機(jī)模式和地址位多機(jī)模式。線路悠閑模式下,數(shù)據(jù)塊被一段悠閑的時(shí)間切割。在字符的第一個(gè)停止位此后收到10個(gè)以上的1,表示檢測(cè)到線路悠閑;若是采用兩個(gè)停止位,則第二個(gè)停止位被認(rèn)為是悠閑周期的第一個(gè)信號(hào)。在使用地址位多機(jī)模式時(shí),字符包括一個(gè)附加的位作為地址表記,數(shù)據(jù)快的第一個(gè)字符帶有一個(gè)置位的地址位,用以表示該字符是一個(gè)地址。由于已經(jīng)設(shè)置了控制寄存器中的MM=1,故在本設(shè)計(jì)中選擇了地址位多機(jī)模式。下面是UART通訊的一些特點(diǎn):(1)、異步通訊模式,包括線路悠閑/地址位通訊協(xié)議。(2)、有兩個(gè)單獨(dú)的移位寄存器,輸入/輸出移位寄存器。3)、傳輸7位或8位數(shù)據(jù),可采用奇偶或無校驗(yàn)。4)、可編程實(shí)現(xiàn)波特率調(diào)整。5)、分別發(fā),收單獨(dú)中斷。6)、有效地檢測(cè)到初步位實(shí)現(xiàn)從低功耗喚醒。7)、狀態(tài)標(biāo)志檢測(cè)錯(cuò)誤也許地址位。三、基本通訊協(xié)議:PC機(jī)和多臺(tái)單片機(jī)的通訊中,確定一個(gè)明確而合理的通訊協(xié)議是要點(diǎn),包括對(duì)數(shù)據(jù)格式、通訊方式、傳達(dá)速度、傳達(dá)步驟、檢糾錯(cuò)方式以及控制字符定義等問題做出一致規(guī)定[6]。由于已經(jīng)選擇了UART的多機(jī)通訊模式.為了差異不相同的分機(jī),必定為每個(gè)分機(jī)分配一個(gè)唯一的地址,此地址唯一區(qū)別各單片機(jī)。數(shù)據(jù)格式采用數(shù)據(jù)包的形式,一次傳輸一組數(shù)據(jù)。數(shù)據(jù)包格式如表1-2所示:表1-2數(shù)據(jù)包格式起使標(biāo)志位下位機(jī)地址操作命令數(shù)據(jù)長(zhǎng)度數(shù)據(jù)內(nèi)容和校驗(yàn)結(jié)束標(biāo)志初步標(biāo)志位:1個(gè)字節(jié)分機(jī)地址:1個(gè)字節(jié)命令/數(shù)據(jù):1個(gè)字節(jié)數(shù)據(jù)長(zhǎng)度:1個(gè)字節(jié)數(shù)據(jù)內(nèi)容:n個(gè)字節(jié)和檢驗(yàn):2個(gè)字節(jié)結(jié)束標(biāo)志位:1個(gè)字節(jié)數(shù)據(jù)格式中的地址位表示與PC機(jī)通訊的單片機(jī)地址。操作命令則表示此次通訊要達(dá)成的操作。在單片機(jī)發(fā)送上位機(jī)接收的時(shí)候,協(xié)議規(guī)定數(shù)令FFH為上報(bào)數(shù)據(jù),此時(shí)數(shù)據(jù)包中的數(shù)據(jù)長(zhǎng)度、數(shù)據(jù)內(nèi)容、和檢驗(yàn)三個(gè)域便填充分際發(fā)送數(shù)據(jù)的個(gè)數(shù)、數(shù)據(jù)及和校驗(yàn);命令F0H-F3H則表示單片機(jī)給PC機(jī)的反響信息,此時(shí)數(shù)據(jù)包中的數(shù)據(jù)長(zhǎng)度、數(shù)據(jù)內(nèi)容和檢驗(yàn)三個(gè)域?yàn)榭?,其中?dāng)命令為F0H表示接收成功,F(xiàn)1H表示接收失敗并要求重發(fā),F(xiàn)2H表示單片機(jī)有數(shù)據(jù)上報(bào)要求,F(xiàn)3H表示單片機(jī)無數(shù)據(jù)上報(bào)要求。操作命令域在PC機(jī)發(fā)送單片機(jī)接收的時(shí)候也有相似的協(xié)議規(guī)定。第二章硬件電路設(shè)計(jì)接口電平電路設(shè)計(jì)2.1.1RS-232接口電路設(shè)計(jì)一、RS-232電氣標(biāo)準(zhǔn)1、RS-232基本電氣要求由于MSP430最大工作電壓為,因此在與PC機(jī)進(jìn)行串口通訊的時(shí)候需要進(jìn)行EIA-RS-232邏輯電平變換。EIA-RS-232是美國(guó)電子工業(yè)協(xié)會(huì)(EIA)制定的串口通訊協(xié)議,“C”表示標(biāo)準(zhǔn)修第幾次改正,其信號(hào)電平采用負(fù)邏輯,邏輯“1”的電平是-5V~-15V,邏輯“0”的電平為+5V~+15V,由于其有2V的噪聲容限,故最后限制接收器能鑒別低至+3V的信號(hào)作為邏輯“0”,高到-3V的信號(hào)作為邏輯“1”[8]。因此,實(shí)質(zhì)工作時(shí),應(yīng)保證電平在±(3~15)V之間。S-232-C最高傳輸速率為20kb/s,最大直接連接長(zhǎng)度為15m。2、RS-232常用接口RS-232-C標(biāo)準(zhǔn)接口有25條線:4條數(shù)據(jù)線、11條控制線、3條準(zhǔn)時(shí)線、7條備用和不決義線。其中常用的只有9根,它們是:(1)6條聯(lián)系控制信號(hào)線:數(shù)據(jù)裝置準(zhǔn)備好(Datasetready-DSR)——有效時(shí)(ON)狀態(tài),表示MODEM處于能夠使用的狀態(tài)。數(shù)據(jù)終端準(zhǔn)備好(Datasetready-DTR)——有效時(shí)(ON)狀態(tài),表示數(shù)據(jù)終端能夠使用。央求發(fā)送(Requesttosend-RTS)——用來表示DTE央求DCE發(fā)送數(shù)據(jù),即當(dāng)終端要發(fā)送數(shù)據(jù)時(shí),使該信號(hào)有效(ON狀態(tài))。贊同發(fā)送(Cleartosend-CTS)——用來表示DCE準(zhǔn)備好接收DTE發(fā)來的數(shù)據(jù),是對(duì)央求發(fā)送信號(hào)RTS的響應(yīng)信號(hào)。該信號(hào)有效時(shí),則通知終端開始沿發(fā)送數(shù)據(jù)線TxD發(fā)送數(shù)據(jù)。接收線信號(hào)檢出(ReceivedLinedetection-RLSD)——用來表示DCE已接通通訊鏈路,見告DTE準(zhǔn)備接收數(shù)據(jù)。此線也叫做數(shù)據(jù)載波檢出(DataCarrierdectection-DCD)線。振鈴指示(Ringing-RI)——該信號(hào)有效(ON狀態(tài))表示通知終端,已被呼叫。上述控制信號(hào)線何時(shí)有效,何時(shí)無效的序次表示了接口信號(hào)的傳達(dá)過程。比方,只有當(dāng)DSR和DTR都處于有效(ON)狀態(tài)時(shí),才能在DTE和DCE之間進(jìn)行傳達(dá)操作。若DTE要發(fā)送數(shù)據(jù),則起初將DTR線置成有效(ON)狀態(tài),等CTS線上收到有效(ON)狀態(tài)的回答后,才能在TxD線上發(fā)送串行數(shù)據(jù)。這種序次的規(guī)定對(duì)半雙工的通訊線路特別適用,由于半雙工的通訊才能確定DCE已由接收方向改為發(fā)送方向,這時(shí)線路才能開始發(fā)送(2)2條數(shù)據(jù)發(fā)送與接收線:發(fā)送數(shù)據(jù)(Transmitteddata-TxD)——經(jīng)過TxD終端將串行數(shù)據(jù)發(fā)送已經(jīng)發(fā)送。接收數(shù)據(jù)(Receiveddata-RxD)——經(jīng)過RxD線終端接收從PC發(fā)來的串行數(shù)據(jù),(DCE→DTE)。(3)一條地線信號(hào)地——SG,無方向。二、接口電路設(shè)計(jì)RS-232接口電路連接方式依照需要有三線、六線、八線、兩線多種。當(dāng)通訊速率較低時(shí)能夠采用三線對(duì)接法,按圖2-2所示。圖2-1RS-232電纜連接圖在本設(shè)計(jì)中采用一塊MAX3221芯片把從MSP430中USART過來的信號(hào)進(jìn)行電平變換后輸出到PC,把從PC發(fā)過來的信號(hào)發(fā)送給USART,設(shè)計(jì)中的RS-232接口電路如圖2-2所示:2-2RS-232接口電路圖2-2中DB9為即為我們采用的RS-232連接器——9針串行口,其插針分別對(duì)應(yīng)RS-232-C標(biāo)準(zhǔn)接口9根常用線。其對(duì)應(yīng)關(guān)系如表2-1所示[9]。表2-19針串行口插針對(duì)應(yīng)關(guān)系表DB9管腳號(hào)插針功能說明標(biāo)志1接收線信號(hào)檢出DCD2接收數(shù)據(jù)RD3發(fā)送數(shù)據(jù)TD4數(shù)據(jù)終端就緒DTR5信號(hào)地SG6數(shù)據(jù)傳輸設(shè)備就緒DSR7央求發(fā)送RTS8贊同發(fā)送CTS9振鈴指示RI由圖2-2以及表2-1能夠知道,接收使能EN接地,時(shí)鐘有效;掉電模式控制腳FORCEOFF向來拉高,即MAX3221向來處在工作狀態(tài)。USART(本設(shè)計(jì)中選擇UART1)的TXD腳與MAX3221的11腳(DIN)相連,USART的RXD腳與MAX3221的9腳(ROUT)相連;輸入DIN的信號(hào)變換為RS-232電平后,MAX3221的13腳(DOUT)輸出到J5(DB9)的2腳(DB9的2腳為串口的RXD腳),接口J5(DB9)的3腳(串口的TXD腳)與MAX3221的8腳(RIN)相連,這樣的連接方式已將USART的輸出腳TXD(本設(shè)計(jì)中UART1的管腳)和輸入腳RXD(本設(shè)計(jì)中UART1的管腳)連接對(duì)調(diào),能夠直接經(jīng)過延長(zhǎng)線與PC機(jī)相連。單片機(jī)電路設(shè)計(jì)單片機(jī)電路設(shè)計(jì)圖單片機(jī)電路比較簡(jiǎn)單,在與接口電路連接的的基礎(chǔ)上,分別采用單片機(jī)的一般I/O接口實(shí)現(xiàn)與其他電路的連接。由于是多路通訊,因此每一路的硬件設(shè)計(jì)基真相同,下面為單片機(jī)部分電路圖。圖2-3單片機(jī)部分電路圖由圖2-3能夠看出,在單片機(jī)的時(shí)鐘設(shè)計(jì)上與其他的單片機(jī)有必然區(qū)別,MSP430F149單片機(jī)采用兩個(gè)時(shí)鐘輸入,一個(gè)32KHZ的時(shí)鐘信號(hào),一個(gè)8MHZ的時(shí)鐘信號(hào),該系統(tǒng)的時(shí)鐘信號(hào)都是采用晶體振蕩器實(shí)現(xiàn)的.考慮到電源的輸入漣漪對(duì)單片機(jī)的影響,在電源的管腳增加一個(gè)μF的電容來實(shí)現(xiàn)濾波,以減小輸入端碰到的攪亂。別的單片機(jī)還有模擬電源的輸入端,因此這里需要考慮攪亂問題,在該系統(tǒng)中的攪亂比較小,因此模擬地和數(shù)字地共地,模擬電源輸入端增加一個(gè)濾波電容以減小攪亂[10]。第三章軟件設(shè)計(jì)功能描述上位機(jī)和下位機(jī)實(shí)現(xiàn)的功能一、功能描述:1、上位機(jī)功能向下位機(jī)進(jìn)行呼叫,接著發(fā)送字符串,最后發(fā)送結(jié)束標(biāo)志(2)依照必然的時(shí)間間隔對(duì)串口進(jìn)行讀操作,若是有數(shù)據(jù)需要接收,則進(jìn)行數(shù)據(jù)接收.2、下位機(jī)功能(1)接收功能:鑒別上位機(jī)發(fā)送的地址,若是地址般配則接收數(shù)據(jù),直到結(jié)束標(biāo)志到來,則停止接收。2)發(fā)送功能:下位機(jī)有數(shù)據(jù)需要發(fā)送時(shí),第一直上位機(jī)發(fā)送本機(jī)地址,爾后發(fā)送數(shù)據(jù),最后發(fā)送結(jié)束標(biāo)志。程序設(shè)計(jì)下位機(jī)程序設(shè)計(jì)一、下位機(jī)通訊協(xié)議分布式控制系統(tǒng)中的下位機(jī)的每臺(tái)單片機(jī)均有唯一的地址。通訊開始時(shí),先由PC機(jī)呼叫被叫單片機(jī)的地址,單片機(jī)在接收到PC機(jī)的呼叫后,第一判斷可否是自己的地址,若是不是就不予理睬。若是是,則發(fā)送呼叫應(yīng)答信號(hào),并依照上位機(jī)的命令進(jìn)行相應(yīng)的接收或發(fā)送。依照以上要求以及UART通訊協(xié)議基本內(nèi)容,能夠?qū)⑾挛粰C(jī)通訊協(xié)議設(shè)置以下表:表3-1下位機(jī)通訊協(xié)議格式地址數(shù)據(jù)結(jié)束地址:取值1—8,即上位機(jī)能夠呼叫的8個(gè)下位機(jī)之一,發(fā)送時(shí)地址位有效。數(shù)據(jù):取值9—127,為ASCⅡ可顯示字符。結(jié)束:0。二、下位機(jī)程序流程圖下位機(jī)(單片機(jī))程序設(shè)計(jì)包括初始化設(shè)計(jì)、串口中斷服務(wù)設(shè)計(jì)和主處理程序設(shè)計(jì)。本例誠(chéng)然有多個(gè)下位機(jī),但他們除了本機(jī)地址的設(shè)置不相同外,其他硬件電路都是相同的,因此各下位機(jī)的軟件設(shè)計(jì)也是相同的。依照通訊協(xié)議的要求能夠設(shè)計(jì)出如圖3-1的下位機(jī)程序流程。圖3-1下位機(jī)(單片機(jī))主程序流程圖三、初始化設(shè)置初始化設(shè)置包括時(shí)鐘初始化,端口初始化和串口初始化。1、時(shí)鐘初始化程序及說明:#include<>#include""voidInit_CLK(void){unsignedinti;BCSCTL1=0X00;4A1”1”面程序中“ProcessCMD(UART1_RX_Temp,nRX1_Len)”主要辦理接收到的數(shù)據(jù)并返回相應(yīng)的代碼以使主程序辦理。該函數(shù)的詳盡代碼為:intProcessCMD(charpBuf[],intnLen){intnTemp=-1;inti;if(nLen<=2)return-1;if(nLen==5){if((pBuf[0]=='A')&&(pBuf[1]=='T')(pBuf[2]=='E')&&(pBuf[3]=='0'))nTemp=1;if((pBuf[0]=='A')&&(pBuf[1]=='T')(pBuf[2]=='E')&&(pBuf[3]=='1'))nTemp=2;}returnnTemp;}上位機(jī)(PC機(jī))程序設(shè)計(jì)一、上位機(jī)串口通訊編程方法的選擇隨著Windows在國(guó)內(nèi)的普及,越來越多的微機(jī)用戶轉(zhuǎn)向了Windows操作系統(tǒng),因此在DOS環(huán)境下利用匯編語言和C語言對(duì)串口通訊的編程方式已經(jīng)不再被看好。在Windows操作系統(tǒng)下利用VC++開發(fā)平臺(tái)對(duì)串口通訊上位機(jī)編程,其軟件界面特別方便友好,編程工作量相對(duì)較小,只要進(jìn)行主要應(yīng)用功能的編程和少量界面控制的編程[12]。在Windows環(huán)境下,利用PC機(jī)串口進(jìn)行通訊的常用方法有以下幾種:一是利用WindowsAPI通訊函數(shù);二是利用VC的標(biāo)準(zhǔn)通訊函數(shù)_inp、_inpw、_inpd、_outp、_outpw、_outpd等直接對(duì)串口進(jìn)行操作;三是使用MicrosoftVisualC++的通訊控件(MSComm);四是利用第三方編寫的通訊類[13]。本設(shè)計(jì)將介紹用PComm開發(fā)PC機(jī)與單片機(jī)的通訊程序的解決方案。二、Pcomm主要命令碼PComm(ProfessionalCommToolforPC)串口通訊軟件包特地運(yùn)用WindowsNT/2000/XP。此刻WindowsNT/2000/XP已被廣泛應(yīng)用,而它供應(yīng)的Win32CommAPI卻復(fù)雜難用,而且沒有供應(yīng)如Zmodem等高階應(yīng)用函數(shù),這增加了通訊軟件工程師的負(fù)擔(dān)。針對(duì)這種情況,MOXA開發(fā)了一套簡(jiǎn)單易用的程式函數(shù)庫及功能富強(qiáng)的輔助工具—PComm。PCommPro支持多種編程語言,如VisualBasic、VC++、Delphi等,而且適用于任何在WindowsNT/2000/XP下以Win32COMMAPI為基礎(chǔ)的驅(qū)動(dòng)程式的其他品牌的多串口卡[14]。PComm的主要命令碼有以下幾種[15]:(1)sioopen(port);用于設(shè)置并打開串口,其中port的1、2、3、4分別代表COM、COM2、COM3、COM4。當(dāng)返回值為0時(shí),表示串口已經(jīng)打開,否則為串口打開出錯(cuò)。(2)sioclose(port);關(guān)閉串口,當(dāng)返回值為0時(shí),表示串口已經(jīng)關(guān)閉,否則為串口關(guān)閉出錯(cuò)。(3)sioioctl(portbaudmode);用于設(shè)置串口波特率、校驗(yàn)位、數(shù)據(jù)位、停止位等參數(shù)。(4)siogetch();從串口輸入緩沖區(qū)讀出一個(gè)字符,返回值為0表示已收到數(shù)據(jù)。(5)sio-read(portbuflen);用于從串口輸入緩沖區(qū)讀出一串字符,buf代表字符串?dāng)?shù)組len代表數(shù)組長(zhǎng)度,返回值為0表示未收到字符,大于0代表收到字符的個(gè)數(shù)。(6)sio-SetReadTimeoutsportTotalTimeouts(Inter-valTimeouts);在設(shè)定的等待時(shí)間內(nèi)連續(xù)讀串口輸入緩沖區(qū),TotalTimeouts代表設(shè)定的等待時(shí)間,Inter-valTimeouts代表每次讀出的間隔時(shí)間。(7)sio-flush(portfunc);用于清空緩沖區(qū)。當(dāng)func為0時(shí)清空輸入緩沖區(qū),為1時(shí)清空輸出緩沖區(qū),為2時(shí)清空輸入輸出緩沖區(qū)。(8)sio-putch(portterm);用于向串口緩沖區(qū)發(fā)送一個(gè)字符,返回值為0時(shí)表示發(fā)送正確,否則表示發(fā)送錯(cuò)誤。(9)sio-write(portbuflen);用于從串口緩沖區(qū)發(fā)送一串字符,buf代表字符串?dāng)?shù)組,len代表數(shù)組長(zhǎng)度。三、上位機(jī)(PC機(jī))通訊協(xié)議分布式控制系統(tǒng)中的每臺(tái)下位機(jī)均有唯一的地址。PC機(jī)發(fā)送數(shù)據(jù)時(shí)先發(fā)送被叫單片機(jī)地址,被叫單片機(jī)對(duì)地址進(jìn)行判斷,地址錯(cuò)誤就不予理睬,地址正確則向上位機(jī)發(fā)送呼叫應(yīng)答信號(hào)[16]。PC機(jī)在接收到呼叫應(yīng)答信號(hào)之后,將向單片機(jī)發(fā)出通訊命令字符串。以下是上位機(jī)(PC機(jī))的通訊協(xié)議格式。表3-2上位機(jī)通訊協(xié)議格式單片機(jī)號(hào)單片機(jī)號(hào)命令碼命令碼停止標(biāo)志其中,單片機(jī)號(hào)代表現(xiàn)場(chǎng)第幾臺(tái)單片機(jī),占用1個(gè)字節(jié),發(fā)送兩次的目的是為了防范攪亂;命令碼則代表上位機(jī)向下位機(jī)宣布的工作命令,它也占用1個(gè)字節(jié),發(fā)送兩次的目的也是為了防范攪亂。而停止標(biāo)志則表示上位機(jī)一次命令發(fā)送達(dá)成,使用時(shí)可依照該標(biāo)志判斷上位機(jī)的命令可否發(fā)送達(dá)成。四、上位機(jī)串口通訊實(shí)現(xiàn)過程在用PComm辦理PC機(jī)的串口通訊時(shí),其實(shí)現(xiàn)過程以下:1、啟動(dòng)VC++,新建一個(gè)基于對(duì)話框的應(yīng)用程序TxRx。同時(shí)增加靜態(tài)文本、編寫框和按鈕等控件[17]。如圖3-3所示。圖3-3基于對(duì)話框的接收發(fā)送數(shù)據(jù)程序依照實(shí)質(zhì)需要還可以夠增加更多控件,諸如串口的打開和關(guān)閉按鈕,波特率選擇框以及一些實(shí)現(xiàn)更加高級(jí)功能的控件等,在這里僅增加基本的發(fā)送接收等按鈕控件。2、依照表3-3為每個(gè)控件增加相應(yīng)的變量。表3-3TxRx應(yīng)用程序各控件的屬性控件ID變量名種類按鈕IDC_TRSMITT發(fā)送按鈕Edit1IDC_TXDATAM_TxDataCstringEdit2IDC_RXDATAM_RxDataCstring發(fā)送編寫控件的屬性增加過程如圖3-4所示。其他屬性以及其他控件的增加方法近似。圖3-4發(fā)送編寫控件ID屬性設(shè)置方法3、PComm.h和PComm.lib加入到工程中,并在文件中加入#include“PComm.h”頭文件,此后即可調(diào)用其供應(yīng)的通訊命令集[18]。4、文件中增加初始化程序代碼,也就是在OnInitiDialog函數(shù)中的TODO語句后加入以下代碼://TODOAddextrainitializationhereIntretport=1ret=sioopenport//打開串口1sioDTRport0//置DTR為低電平sioioctlportB9600PNONE|BIT8|STOP1//設(shè)置波特率為9600,8位數(shù)據(jù)位,1位停止位,無校驗(yàn)位。增加結(jié)果入圖3-5所示。圖3-5在里增加初始化程序四、上位機(jī)通訊程序?qū)ι衔粰C(jī)通訊程序的設(shè)計(jì)除了初始化串口外,剩下的就是對(duì)接收和發(fā)送程序的設(shè)計(jì)了,下面是一個(gè)簡(jiǎn)單的接收發(fā)送子程序,其功能是依照一準(zhǔn)時(shí)間間隔對(duì)串口進(jìn)行讀操作,并能夠每次向串口緩沖區(qū)發(fā)送5個(gè)字符[19]。voidCTXRXDlgSendRecv//收發(fā)數(shù)據(jù)子函數(shù){while1{Intret1Sioflushport2;//清空串口輸入輸出緩沖區(qū)sio-write(port,1,5);//向串口緩沖區(qū)發(fā)送5個(gè)字符sio-SetreadTimeouts(port,40,1);在40ms內(nèi)每隔1ms讀一次串口ret=sio-read(port,RecvBuf,1);if(ret1>0){sio-close(port);break;}//若收到數(shù)據(jù),關(guān)閉串口,跳出循環(huán)else;//若未收到數(shù)據(jù),對(duì)串口再一次發(fā)數(shù)據(jù)并再次盤問接收。}}以上可是一個(gè)簡(jiǎn)單的接收發(fā)送程序,在實(shí)質(zhì)應(yīng)用中依照實(shí)現(xiàn)功能的不相同還能夠設(shè)計(jì)更加復(fù)雜,可操作性更高的程序。結(jié)論串行通訊端口在系統(tǒng)控制的范圍中素來據(jù)有著及其重要的地位,它不但沒有由于時(shí)代的進(jìn)步而遭裁汰,反而在規(guī)格上越來越完滿,應(yīng)用也越來越廣泛。作為一種基本而又靈便方便的通訊方式,串口通訊被廣泛應(yīng)用于PC與PC也許PC與單片機(jī)之間的數(shù)據(jù)交換以及其他工業(yè)控制與自動(dòng)控制中[20]。本設(shè)計(jì)給出了在分布式控制系統(tǒng)中上位PC機(jī)與下位單片機(jī)(MSP430F149)之

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論