畢業(yè)設(shè)計(論文)單片機(jī)與PC機(jī)的串行通信設(shè)計_第1頁
畢業(yè)設(shè)計(論文)單片機(jī)與PC機(jī)的串行通信設(shè)計_第2頁
畢業(yè)設(shè)計(論文)單片機(jī)與PC機(jī)的串行通信設(shè)計_第3頁
畢業(yè)設(shè)計(論文)單片機(jī)與PC機(jī)的串行通信設(shè)計_第4頁
畢業(yè)設(shè)計(論文)單片機(jī)與PC機(jī)的串行通信設(shè)計_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、江蘇信息職業(yè)技術(shù)學(xué)院畢業(yè)論文題目: 單片機(jī)與pc機(jī)的串行通信 系 別: 計算機(jī)信息工程系 專 業(yè): 計算機(jī)應(yīng)用 學(xué) 號: 29 姓 名: 指導(dǎo)老師: 2006年 05月10日前言在實際應(yīng)用中,單片機(jī)往往不是作為一個獨立的控制單元而存在,它還要和其他控制單元進(jìn)行通信。這些控制單元可以是另一個單片機(jī),也可以是pc機(jī)。大多數(shù)單片機(jī)都含有一個可編程全雙工串行通信接口,每臺pc 機(jī)中都有內(nèi)置的rs232c串行端口,二者可以通過一定的硬件電路實現(xiàn)硬連接。如果雙方均遵循同樣的通信協(xié)議,就可以互相通行。而對于單片機(jī),串口(uart)是最常用的端口,尤其對于存在兩個或多個串口的單片機(jī)來說,充分利用串口進(jìn)行通信是

2、非常重要的。設(shè)備上想要具備通信傳輸?shù)墓δ?,最簡單的方法就是使用串行通信的方式。因為pc機(jī)具有強(qiáng)大的監(jiān)控和管理功能,而單片機(jī)則具有快速、容易控制的特點,在數(shù)據(jù)量不大、傳輸要求不高的情況下,一般都采用給計算機(jī)機(jī)配置的rs-232標(biāo)準(zhǔn)串行接口com1、com2等相連接來實現(xiàn)應(yīng)用系統(tǒng)與pc機(jī)之間的數(shù)據(jù)交換。一方面由于串行通信易于實現(xiàn),另一方面也是應(yīng)為串行通信的價格也很便宜。只要具備了串行通信的功能,使用者就可以和計算機(jī)作數(shù)據(jù)的交換,產(chǎn)品的價格馬上就會被提高?,F(xiàn)在單片機(jī)的應(yīng)用越來越廣泛,單片機(jī)與pc機(jī)之間的通信是一個非常重要的應(yīng)用。文中主要寫了利用vb來完成的單片機(jī)與pc機(jī)的串行通信并且通過實例來更深了

3、解到串行通信的內(nèi)容。摘要本文簡單介紹了vb的一些主要控件,和在vb環(huán)境下如何實現(xiàn)單片機(jī)與計算機(jī)之間實現(xiàn)串行通訊。本文共分四章:第一章主要了解到串行通信的基本概念。在此實驗中需要rs-232的接口,所以在文章中簡單的介紹了rs-232接口的應(yīng)用、串行通信和同步通信與異步通信的區(qū)別。第二章的單片機(jī)串口的方法講述了串口的工作方式和單片機(jī)收/發(fā)數(shù)據(jù)流程,在這流程中需要經(jīng)過2個串行緩沖器sbuf進(jìn)行。定時器/計數(shù)器有四種工作方式,其工作方式的選擇及控制都由兩個特殊功能寄存器(tmod和tcon)的內(nèi)容來決定。第三章中是關(guān)于vb通信組件的引用,屬性,事件。第四章主要從實例分析出單片機(jī)能正確接收pc機(jī)所發(fā)來

4、的命令和pc機(jī)能正確接收到單片機(jī)所發(fā)的數(shù)據(jù)信息。關(guān)鍵字:單片機(jī),vb,通信控件abstractthis article simply introduced vb some mainly control, how with realizes between the monolithic integrated circuit and the computer under the vb environment realizes the serial communication.this article altogether is divided four chapters: first chapte

5、r mainly understands the serial communication the basic concept. needs rs-232 in this experiment the connection, therefore in article simple introduction rs-232 connection application, serial communication and synchronous communication and asynchronous communication difference. second chapter the mo

6、nolithic integrated circuit string mouth method narrated the string mouth work way and the monolithic integrated circuit receives/sends the data flow, needs to pass through 2 serial buffers sbuf in this flow to carry on. the timer/counter has four work ways, its work way choice and control all by tw

7、o special functions registers (tmod and tcon) the content decided. in third chapter is about the vb correspondence module quotation, the attribute, the event. fourth chapter mainly analyzes the monolithic integrated circuit from the example can correctly receive the order and pc machine which pc mac

8、hine sends in correctly receives the data message which the monolithic integrated circuit sends.key words:the monolithic integrated circuit, vb, the correspondence controls. 目 錄前言摘要abstract目錄第一章 串行通信的基礎(chǔ) ( 1 )1.1 什么是串行通信 ( 1 )1.2 rs-232 串行口 ( 1 )1.2.1 rs-232的串行通信 ( 2 )1.3 串行傳輸方式 ( 2 )1.同步通信與異步通信 ( 3

9、)2.波特率 ( 3 )1.4串口端口參數(shù)( 4 )第二章 單片機(jī)串行端口的使用方法 ( 6 )2.1定時器/計數(shù)器結(jié)構(gòu) ( 6 )2.2 串口工作方式 ( 8 )2.3 串行口控制寄存器 ( 9 )2.4單片機(jī)收/發(fā)數(shù)據(jù)流程 ( 10 )第三章 visual basic中的串行通信組件 ( 11 )3.1visual basic的組件引用步驟 (11)3.2 通信控件的屬性 (11)3.3 通信控件的事件 (13)第四章 單片機(jī)與pc機(jī)的實例 (14)4.1 通信流程的實現(xiàn) (14)4.2 單片機(jī)與pc機(jī)的串口通信的實現(xiàn)方法(14)4.2.1 單片機(jī)實現(xiàn)方法 (14)4.2.2 pc機(jī)實現(xiàn)方

10、法 (16)結(jié)束語 (18)致謝 (19)參考文獻(xiàn) (20)第一章 串行通信的基礎(chǔ)1.1什么是串行通信所謂“串行通信”是指外設(shè)和計算機(jī)間使用一根數(shù)據(jù)信號線(另外需要地線,可能還需要控制線),數(shù)據(jù)在一根數(shù)據(jù)信號線上一位一位地進(jìn)行傳輸,每一位數(shù)據(jù)都占據(jù)一個固定的時間長度。兩個設(shè)備之間交換信息時,必須有一條線路(或是多條線路)將兩者連接,因通過線上電壓的改變來達(dá)到數(shù)據(jù)交換的目的。為什么一定要通過電壓的改變呢?這是因為計算機(jī)本身并不知道什么是信息,在其內(nèi)部只知道0和1兩個狀態(tài),人類將這種0與1的組合通過不同的排列,來代表不同的意義。每一個0或1的狀態(tài),稱之為1個位,每8個位被稱為一個字節(jié)。串行通信(s

11、erial communication)指的是兩個欲交換信息者的信息流動,而且其信息流動的方式是一個位接著一個位,有順序地由一個方向向另一個方向流動。 計算機(jī)之間通過這種串行通信的方式傳送信息已經(jīng)有一段相當(dāng)久遠(yuǎn)的歷史,而且到了現(xiàn)在還是一直不斷地對串行傳輸作改進(jìn),希望能夠達(dá)到更遠(yuǎn)的距離和更好的效果。1.2 rs-232串行口在本次的實例中需要用到rs-232接口,所以簡單介紹一下rs-232接口。rs-232接口又稱之為rs-232口、串口、異步口或一個com(通信)口。rs-232是其最明確的名稱。 在計算機(jī)世界中,大量的接口是串口或異步口,但并不一定符合rs-232標(biāo)準(zhǔn),但我們也通常認(rèn)為它是

12、rs-232口。 嚴(yán)格地講rs-232接口是dte(數(shù)據(jù)終端設(shè)備)和dce(數(shù)據(jù)通信設(shè)備)之間的一個接口。1.2.1 rs-232的串行通信rs-232有單向,半雙向和全雙向三種通信方式。單向通信是一種最簡單的通信方式,rs-232接口僅有二根導(dǎo)線組成。一根信號線以精確的時間間隔傳輸一連串串行數(shù)據(jù)位,一次傳送1位數(shù)據(jù)0或1。另一根線是信號地線。這種僅在一個方向傳送數(shù)據(jù)的通信方式稱為單向通信,其二線接口稱為單向接口。在串行通信中,數(shù)據(jù)字節(jié)被拆成一連串0或1數(shù)據(jù)位在單根導(dǎo)線上從一端設(shè)備傳送到另一端設(shè)備。接收端設(shè)備需要知道發(fā)送端以多大傳送速率(用波特率表示)傳送數(shù)據(jù)位,以便重新將其組合成字節(jié)。通常有

13、兩種方法實施傳送速率的匹配,一種方法是,另用一根導(dǎo)線從發(fā)送端向接收端傳送一個時鐘信號,此法常用于同步通信中。另一種方法是,通信前,發(fā)送端和接收端必須使用雙方協(xié)商一致的通信協(xié)議,其中包括傳送速率的規(guī)定,此法常用于非同步通信,rs-232通信就采用此法。現(xiàn)在的工業(yè)應(yīng)用中,串行通信是一種使用相當(dāng)廣泛的通信方式,其速度雖然沒有并行通信那樣快,可是由于配線數(shù)少,實現(xiàn)容易,所以長久以來大家一直樂于采用。1.3 串行傳輸方式1.同步通信與異步通信串行通信中的數(shù)據(jù)線上的數(shù)據(jù)是具有瞬時性的,某位數(shù)據(jù)只能存在于某一特定的時間段內(nèi),如果接收方在該時間內(nèi)沒有對數(shù)據(jù)線進(jìn)行讀取,該位數(shù)據(jù)即會丟失。這就要求當(dāng)一方在發(fā)送數(shù)據(jù)

14、時,另一方必須也在同步接收。所謂的同步是指接收方在數(shù)據(jù)線上讀得某位數(shù)據(jù)的頻率與發(fā)送方在數(shù)據(jù)線上發(fā)送某位數(shù)據(jù)的頻率必須是嚴(yán)格一致的。如何保證這種同步性呢?通常有2種解決方法:采用同步通信方式或異步通信方式。同步通信是指收發(fā)雙方使用相同的時鐘,由于時鐘頻率的相同性,因此就保證了收發(fā)雙方能夠以相同的頻率進(jìn)行數(shù)據(jù)的發(fā)送/接收操作。采用同步通信方式在傳送數(shù)據(jù)時,要對數(shù)據(jù)進(jìn)行分組(幀),每組的開始和結(jié)束需加上規(guī)定的碼元序列作為標(biāo)志序列。在發(fā)送數(shù)據(jù)之前,必須先發(fā)送此標(biāo)志序列,接收方通過檢測此標(biāo)志序列獲知某組(幀)數(shù)據(jù)的開始與結(jié)束。采用同步通信的方式進(jìn)行通信時,一般很難保證收發(fā)雙方的時鐘嚴(yán)格一致。如果收發(fā)雙方

15、的時鐘有微小的偏差,即使不至于影響單個字符的接收,但在傳送批量數(shù)據(jù)時出現(xiàn)的誤差累積效應(yīng)達(dá)到一定程度時足以使接收數(shù)據(jù)出錯;而且如果接收方由于某種原因(如躁聲等)漏掉一位,則所有以下接收的數(shù)據(jù)都是不正確的。一般人們利用異步通信方式來解決同步通信方式的不足。異步通信中,發(fā)送和接收雙方分別使用自己的時鐘,以單個字符作為最小發(fā)送/接收單元。也就是說,在這種通信方式下,每個字符作為獨立的信息單元,可以隨機(jī)地出現(xiàn)在數(shù)據(jù)流中,而每個字符出現(xiàn)在數(shù)據(jù)流中的相對時間是隨機(jī)的。然而一個字符一旦開始發(fā)送,就必須連著將該字符其他位發(fā)送出去。由此可見,所謂的“異步”是指字符與字符間的異步,而在每個字符內(nèi)部,收發(fā)雙方的時鐘頻

16、率仍然需要保持同步。異步通信方式有效地解決了同步通信方式的弊端。在異步通信中,規(guī)定數(shù)據(jù)線在不傳送數(shù)據(jù)時保持為“1”狀態(tài),在發(fā)送每個字符時,硬件自動在每個字符前添加一個“起始信號”,其長度為1位,值為“0”。在每個字符的后邊添加一個“停止”信號,其長度為1、1.5或2位,值為“1”。有時為了減少誤碼率,經(jīng)常在數(shù)據(jù)之后停止位之前添加一位的“奇偶校驗位”。這樣,所發(fā)送的數(shù)據(jù)不再是原來的數(shù)據(jù),而是經(jīng)過“包裝”后的數(shù)據(jù)。之所以這樣包裝是為了接收方能夠正常接收數(shù)據(jù)。接收方在接收數(shù)據(jù)時,將一直對數(shù)據(jù)線進(jìn)行監(jiān)視,當(dāng)數(shù)據(jù)線上一旦出現(xiàn)“由1至0的跳變”即表明有數(shù)據(jù)到來,接收方開始接收數(shù)據(jù),一直到正確接收到停止位時

17、,才算完成對一個字符的接收。2.波特率 波特率是指信號傳輸速率,是衡量數(shù)據(jù)通信能力的一個重要指標(biāo)。單位是波特(baud)。在信號為二進(jìn)制位的特例下,它表征了每秒鐘所傳送的二進(jìn)制的位數(shù)。同時,它也反應(yīng)了收/發(fā)時鐘的頻率,或者更確切地說,收方時鐘的頻率決定了波特率的大小。在同步通信中,波特率等同于收/發(fā)時鐘的頻率;而在異步通信中,其值一般為收/發(fā)時鐘頻率的1/16。波特率的設(shè)定是十分重要的,在實際開發(fā)中出現(xiàn)的不能正常接收數(shù)據(jù)的現(xiàn)象,大多是因影響波特率的相關(guān)參數(shù)設(shè)置不對所致。1.4 串口端口參數(shù)串行端口的通信方式將字節(jié)拆分成一個接著一個的位再傳送出去。接到此電位信號的一方再將此一個一個的為組合成原來

18、的字節(jié),如此形成一個字節(jié)的完整傳送。在傳輸進(jìn)行的過程中,雙方明確傳送信息的具體方式,否則雙方就沒有一套共同的譯碼方式,從而無法了解對方所傳過來的信息的意義。因此,雙方為了進(jìn)行通信,必須遵守一定的通信規(guī)則,這個共同的規(guī)則就是通信端口的初始化。通信端口的初始化必須對以下幾項進(jìn)行設(shè)置: 信息的傳送單位:串行通信端口以字符的形式傳送信息,工業(yè)界使用的字符形式有ascii字符碼及jis字符碼。ascii碼中8個位形成一個字符,而jis碼中7個位形成一個字符??梢园l(fā)現(xiàn),歐美的設(shè)備大多數(shù)使用8個位的信息組,而日本的設(shè)備則大多數(shù)使用7個位為一個信息組。對于實際的rs-232傳輸來說,由于工業(yè)界常使用的plc大

19、多數(shù)只是傳送文字碼,因此只要7個位就可以將ascii碼的0127號字碼表達(dá)出來(2的7次方=128,共有128種組合方式),所有的可見字符也在此范圍內(nèi),所以只要7個信息位數(shù)就夠了。但是在某些場合,根據(jù)使用的協(xié)議,會使用到不同的傳送單位。使用多少個位組成一個字節(jié)必須事先確定。 起始位和停止位:當(dāng)雙方準(zhǔn)備要開始傳送信息時,發(fā)送端會在所送出的字符前后分別加上低電位的起始位及高電位的停止位,接收端會根據(jù)起始位和停止位來判斷是否收到字符;加入了起始位和停止位以后才比較容易實現(xiàn)多字符的接收能力。起始位固定為1個位,而停止位則有1、1.5、2個位等多種選擇,只要通信雙方協(xié)議通過即可。 奇偶校驗位:奇偶校驗位

20、是用來檢查所傳送信息的正確性的一種核對碼,這其中又分成奇校驗位和偶校驗位兩種,分別是檢查字符碼中1的數(shù)目是奇數(shù)或偶數(shù)。以偶校驗位為例,a的ascii碼是41h(16進(jìn)位),將它以2進(jìn)位表示時,是01000001,其中的1的數(shù)目是2,因此偶校驗位便是0,使1的數(shù)目保持偶數(shù)。同樣的,奇偶校驗位是奇校驗位時,a的奇偶校驗位便是1,使1的數(shù)目保持在奇數(shù)。我們再下圖予以表示。原狀態(tài)10011100狀態(tài)1的數(shù)目有4個如果設(shè)置偶校驗應(yīng)傳送100111000如果設(shè)置奇校驗應(yīng)傳送100111001將傳送字符依上述的說明組合起來之后,就形成了傳輸?shù)男畔⒏袷?,在串行通信上的信息格式如下表示?起始位 + 傳送字符

21、+ 奇偶校驗位 + 停止位因此,假設(shè)在傳輸時用了1個起始位、傳送字符為8個位、1個停止位,不使用奇偶校驗位檢查,這時,每次所傳輸?shù)男畔⑽桓袷綖椋?1個起始位 + 8個信息位 + 0個奇偶校驗位 + 1停止位總共有10個位,所以此時最小的傳輸單位是以10位為單位。如果采用不同的信息位數(shù)、奇偶校驗位檢查、停止位,則每次傳輸?shù)淖止?jié)中的位數(shù)都不相同。另外,也可以從傳輸速度算出實際的傳輸字符數(shù)。假設(shè)信息格式為以下的格式: 1個起始位 + 8個信息位 + 0個奇偶校驗位 + 1停止位總共有10個位。若采用19200bps的傳輸速度,每一秒便可以傳輸19200/10=1920(byte)的信息。一般容易弄混

22、淆的地方就是:一個字節(jié)是8個位,所以19200bps的傳輸速率每秒可以傳送2400個字節(jié)的信息(19200/8=2400);可是從上面的討論中已經(jīng)很清楚地了解到實際的傳輸速率是每秒鐘1920個字節(jié),這個數(shù)字就是一個不小的差異了。那么這樣的差異有什么值得重視的地方嗎?假如,如果使用rs -232的傳輸技術(shù)建立了一個控制系統(tǒng),如何向別人描述系統(tǒng)的反映速度?因為任何形式的傳輸時就是所謂的系統(tǒng)效率,時間越短,越能顯示出系統(tǒng)的卓越性能,所以這種時間的計算在評估系統(tǒng)的反應(yīng)速度時十分重要。當(dāng)下達(dá)命令要求設(shè)備傳送信息回計算機(jī)時,在命令到達(dá)設(shè)備后,設(shè)備不可能立即將信息傳送完成,設(shè)備傳送信息所需要的最短時間可以根

23、據(jù)速度和傳輸量予以計算。例如,如果以19200bps的速度傳送1920個字節(jié)的信息,就需要等待1秒鐘的時間,在時間未達(dá)1秒鐘之前,信息是不可能從設(shè)備完全地傳送到計算機(jī)的,因此等待時間未達(dá)到1秒鐘前,所讀取的信息是不完整的,不可用來做處理。第二章 單片機(jī)串行端口的使用方法 51系列單片機(jī)的串行接口是由發(fā)送緩沖區(qū)、接收緩沖區(qū)及2個專用寄存器scon和pcon組成。它占用2條i/o口線(p3.0、p3.1口),分別為rxd和txd,從而構(gòu)成了全雙工的通信方式。2.1 定時器/計數(shù)器結(jié)構(gòu) 在串口方式中發(fā)送/接收數(shù)據(jù)用到定時器/計數(shù)器,所以介紹了一些定時器/計數(shù)器結(jié)構(gòu)。 定時器/計數(shù)器的基本部件是兩個8

24、位的計數(shù)器(其中th1、tl1是t1的計數(shù)器,th0、tl0是t0的計數(shù)器)拼裝而成。在作定時器使用時,輸入的時鐘脈沖是由晶體振蕩器的輸出經(jīng)12分頻后得到的,所以定時器也看做是對計算機(jī)機(jī)器周期的計數(shù)器(因為每個機(jī)器周期包含12個振蕩周期,故每一個機(jī)器周期定時器加1,可以把輸入的時鐘脈沖看成機(jī)器周期信號)。故其頻率為晶振頻率的1/12。如果晶振頻率為12mhz,則定時器每接收一個輸入脈沖的時間為1微秒。當(dāng)它用做對外部事件計數(shù)時,接相應(yīng)的外部輸入引腳t0(p3.4)或t1(p3.5)。在這種情況下,當(dāng)檢測到輸入引腳上的電平由高跳變到低時,計數(shù)器就加1(它在每個機(jī)器周期的s5p2時采樣外部輸入,當(dāng)采

25、樣值在這個機(jī)器周期為高,在下一個機(jī)器周期為低時,則計數(shù)器加1)。加1操作發(fā)生在檢測到這種跳變后的一個機(jī)器周期中的s3p1,因此需要兩個機(jī)器周期來識別一個從“1”到“0”的跳變,故最高計數(shù)頻率為晶振頻率的1/24。這就要求輸入信號的電平要在跳變后至少應(yīng)在一個機(jī)器周期內(nèi)保持不變,以保證在給定的電平再次變化前至少被采樣一次。定時器/計數(shù)器有四種工作方式,其工作方式的選擇及控制都由兩個特殊功能寄存器(tmod和tcon)的內(nèi)容來決定。用指定改變tmod或tcon的內(nèi)容后,則在下一條指令的第一個機(jī)器周期的s1p1時起作用。1. 定時器的方式寄存器tmod特殊功能寄存器tmod為定時器的方式控制寄存器,寄

26、存器中每為的定義如圖2-1所示。高4位用于定時器1,低4位用于定時器0。其中m1、m0用來確定所選的工作方式,如表2-1所示。1) m1、m0:定時器/計數(shù)器四種工作方式選擇,見表2-1d7 d6 d5 d4 d3 d2 d1 d0gatec/tm1m0gatec/tm1m0 t1 方式控制字 t0方式控制字 圖2-1m0 m1方式功能說明0 0013位定時器/計數(shù)器0 1116位定時器/計數(shù)器1 02自動裝入時間常數(shù)的8位定時器/計數(shù)器1 13對t0分為兩個8位獨立計數(shù)器;對t1置方式3時停止工作 表2-1 工作方式選擇表2) c/t :定時器方式或計數(shù)器方式選擇位。c/t=1時,為計數(shù)器方

27、式;c/t=0時,為定時器方式。3) gate:定時器/計數(shù)器運行控制位,用來確定對應(yīng)的外部中斷請求引腳是否參與t0或t1的操作控制。當(dāng)gate=0時,只要定時器控制寄存器中的tr0(或tr1)被置“1”時,t0(或t1)被允許開始計數(shù);當(dāng)gate=1時,不僅要tcon中的tr0或tr1置位,還需要p3口的int0或int1引腳為高電平,才允許計數(shù)。2. 定時器控制寄存器tcon特殊功能寄存器tcon用于控制定時器的操作及對定時器中斷的控制。其各位定義如圖2-2所示,其中d0d3位與外部中斷有關(guān)。d7 d6 d5 d4 d3 d2 d1 d0tf1tr1tf0tr0ie1it1ie0it0 用

28、于外部中斷 圖2-2 tcon寄存器各位定義a) tr0:t0的運行控制位。該位置1或清0用來實現(xiàn)啟動計數(shù)或停止計數(shù)。b) tf0:t0的溢出中斷標(biāo)志位。當(dāng)t0計數(shù)溢出時由硬件自動置1;在cpu中斷處理時由硬件清為0。若使用查詢方式,該位應(yīng)由軟件清0。c) tr1:t1的運行控制位,功能同tr0。d) tf1:t1的溢出中斷標(biāo)志位,功能同tf0。tmod和tcon寄存器在復(fù)位時其每一位均清0。從上一節(jié)知道這次的串口通信用的是工作方式2,因為工作方式2發(fā)送時ti=0,txd發(fā)送字符幀,發(fā)送后txd自動為1,此時ti=1須軟件清0,且觸發(fā)串行中斷,有第9位有效數(shù)據(jù)位,并將其裝入tb8,其值由用戶軟

29、件設(shè)定(setb或clr);接收時ri=0和ren=1,rxd接收數(shù)據(jù),接收到的第9位數(shù)據(jù)應(yīng)滿足ri=0和sm2=0或接收到是第9位數(shù)據(jù)。2.2 串口工作方式 串口的工作方式有scon的sm0和sm1定義,共有4種工作方式。其中,方式0是作為同步移位寄存器,可以通過外接移位寄存器芯片實現(xiàn)擴(kuò)展i/o接口功能,一般不用于通信,故在此不介紹;其他3種方式均是異步通信方式。方式1:8位數(shù)據(jù)異步通信接口。波特率可變,波特率由定時器t1或t2的溢出率分頻后得到。方式2:9位數(shù)據(jù)異步通信接口。波特率由主頻fosc分頻得到,當(dāng)smod=1時,波特率為fosc/32;當(dāng)smod=0時,波特率為fosc/64。方

30、式3:9位數(shù)據(jù)異步通信接口。2.3 串行口控制寄存器 控制串行口的寄存器有兩個特殊功能寄存器:即串行口控制寄存器scon和電源控制器pcon。1. 串行口控制寄存器sconpcon是一個特殊功能寄存器(如下圖所示),沒有位尋址功能,字節(jié)地址為87h。 d7 d6 d5 d4 d3 d2 d1 d0sm0sm1sm2rentb8rb8tiri其中d7位(smod)為波特率選擇位,其他均無意義。復(fù)位時的smod值為0??捎胢ou pcon,#80h或mov 87h,#80h指令使該位置1。當(dāng)smod=1時,在串行口方式1、2或3情況下,波特率提高一倍。2. pcon中的波特率選擇位特殊功能寄存器s

31、con用于定義串行口的操作方式和控制它的某些功能。其字節(jié)地址為98h。寄存器中各位內(nèi)容如下:n sm0、sm1:串行口操作方式選擇位,兩個選擇位對應(yīng)于四種狀態(tài),所以串行口能以四種方式工作,見表3-1。圖 3-1 串行口方式選擇sm0 sm1方式功能說明波特率0 0 0移位寄存器方式fosc/120 1 18位uart可變1 029位uartfosc/64或fosc/321 139位uart可變n sm2:允許方式2和3的多機(jī)通信使能位,在方式2或3中,若sm2置為1,且接收到的第九位數(shù)據(jù)(rb8)為0,則接收中斷標(biāo)志ri不會被激活,在方式1中,若sm2=1,則只有收到有效的停止位時才會激活ri

32、。在方式0中,sm2必須置為0n ren:允許串行接收位。由軟件置位或清零,使其允許接收或禁止接收。n tb8:是在方式2和3中要發(fā)送的第九位數(shù)據(jù)可按需要由軟件置位或復(fù)位。n rb8:是方式2和3中已接收到的第九位數(shù)據(jù)。在方式1中,若sm2=0,rt8是接收到的停止位。在方式0中,不使用rb8位。n ti:發(fā)送中斷標(biāo)志。在方式0中當(dāng)串行發(fā)送完第8位數(shù)據(jù)時由硬件置位;在其他方式中,在發(fā)送停止位的開始說由硬件置位。當(dāng)ti=1時,申請中斷,cpu響應(yīng)中斷后,發(fā)送下一楨數(shù)據(jù)。在任何方式中,該位都必須由軟件清0。n ri:接收中斷標(biāo)志。在方式0中串行接收到第8位結(jié)束時,由硬件置位。在其他方式中,在接收到

33、停止位的中間時刻,由硬件置位。ri=1時申請中斷,要求cpu取走數(shù)據(jù)。但在方式1中,當(dāng)sm2=1時,若未接收到有效的停止位,則不會對ri置位。在任何工作方式中,該位都必須由軟件清0。在系統(tǒng)復(fù)位時,scon中的所有位都被清0。2.4 單片機(jī)收/發(fā)數(shù)據(jù)流程mcs51單片機(jī)串行口發(fā)送/接收數(shù)據(jù)時,需經(jīng)過2個緩沖器sbuf進(jìn)行。這2個緩沖器使用同一個地址,但在物理上是獨立的,其中接收緩沖器只能讀出不能寫入,發(fā)送緩沖器只能寫入不能讀出。發(fā)送過程:由指令mov sbuf,a啟動,此時待傳送的數(shù)據(jù)由a累加器傳入串行發(fā)送緩沖器sbuf,有硬件自動在發(fā)送字符的始、末加上起始位(低電平)、停止位(高電平)及其他控

34、制位(如奇偶位等),而后在移位脈沖的控制下,低位在前,高位在后,逐位從txd端(方式0除外)發(fā)出。接收過程:串行口的接收與否受制于允許接收位ren的狀態(tài),當(dāng)ren被軟件置“1”后,允許接收器接收。串口的接收器以所選波特率的16倍速對rxd線進(jìn)行監(jiān)視,當(dāng)“1到0跳檢測器”連續(xù)采樣到rxd線上低電平時,便認(rèn)定rxd端出現(xiàn)起始位,繼而接收控制器開始工作。在每位傳送時間的第7、8、9三個脈沖狀態(tài)采樣rxd線,依照“3取2”的原則,決定所接收的值為“0”或“1”。當(dāng)接收完停止位后,控制電路使中斷標(biāo)志ri置為“1”,此時程序可通過mov a,sbuf指令將接收到的字符從sbuf送入累加器a,從而完成一幀數(shù)

35、據(jù)的接收工作。第三章visual basic中的串行通信組件3.1 visual basic 的組件引用步驟剛打開的工具箱中的工具不夠用時,必須通過依次選擇“工程”/“部件”選擇適當(dāng)?shù)目丶?,步驟如下。 通過上述的幾個步驟,工具箱中就會出現(xiàn)的控件的圖標(biāo),選中此圖標(biāo)并在窗體上施放,即可在系統(tǒng)設(shè)計出所需的畫面或功能,這樣就能開始使用通信控件。3.2 通信控件的屬性通信控件的屬性眾多,將其重要屬性說明如下:(1)commport的屬性:設(shè)置或傳回通信連接端口代號。程序必須指定所要使用的串行端口的號碼,windows系統(tǒng)會使用所設(shè)置的通信端口與外界進(jìn)行通信。程序也可以通過此屬性讀回所使用的連接端口號碼,

36、在此所設(shè)置的通信端口號由1開始往上遞增,mscomm控件的最大值是16,當(dāng)然使用的通信端口號碼超過16時,此控件會通知錯誤信息。(2)settings的屬性:設(shè)置初始化參數(shù)。以字符串的形式設(shè)置或傳回連接速度、奇偶效驗、數(shù)據(jù)位、停止位等4個參數(shù)。其格式為“bbbb,p,d,s”,其中bbbb為連接速度,p為奇偶效驗方式,d為數(shù)據(jù)位數(shù),s為停止位數(shù)。默認(rèn)值是“9600,n,8,1”,其意為“所使用的通信端口是以每秒9600bit的速度作傳輸,不作奇偶效驗,每個元是8個bit,而停止位是1個bit”,而此4項必須是依照順序,不可前后對調(diào):其中的字母n可以是大寫或小寫。(3)portopen的屬性:設(shè)

37、置或傳回通信連接端口的狀態(tài)。使用串行端口之前必須先將要使用的串行端口打開。而在使用完畢之后,也必須執(zhí)行關(guān)閉的動作。串行通信端口的各項功能的完成都是在portopen的true與false之間。(4)input的屬性:從輸入寄存器傳回并移除字符。程序靠著這個指令將對方所傳至輸入寄存器的字符讀進(jìn)程序中,并清楚與寄存器中已被讀取的字符。(5)output的屬性:將一個字符串寫入輸出寄存器,當(dāng)程序需要傳輸字符串至對方時,可將字符串使用一條該指令寫入輸出寄存器中。(6)inpytlen的屬性:指定由串行端口讀入的字符串長度。vb所寫的程序可以使用input的指令將存放在輸入寄存器的字符讀入,但欲指定所讀

38、入的字符長度則應(yīng)通過本屬性開設(shè)置默認(rèn)值是0,此值會使得控件的input指令一次讀取所有輸入緩沖區(qū)中的數(shù)據(jù)。(7)rthreshold的屬性:設(shè)置或傳回引發(fā)接收時間的字符數(shù),即屬性頁上的“r閥值”。當(dāng)接收寄存器達(dá)到所設(shè)置的字符數(shù)時,將會引發(fā)oncomm事件中的接收事件。所以此屬性也就是引起接收事件的“門檻值”。此屬性的默認(rèn)值是0,其意義是無論寄存器中有多少字符均不會引起接收事件。3.3 通信控件的事件oncomm事件是通信控件唯一的事件,此事件可用來處理所有與通信相關(guān)的事件,不管是何種時間發(fā)生,通信控件只用一個commevebt的屬性予以代表。使用事件程序的好處是不需要一直讓程序處于檢測的狀態(tài)寫

39、,只要事先將程序代碼寫好,一有事件發(fā)生,就會直接執(zhí)行相對應(yīng)的程序的代碼。通信事件參數(shù)設(shè)置及其值則如下表所示。常數(shù)值說明comevsend1傳輸寄存器中的字符數(shù)比sthreshold還少。comevreceive2收到rthreshold個字符。該事件將持續(xù)產(chǎn)生直到用input屬性從接收寄存器中移除數(shù)據(jù)。comevcts3clear to send線的狀態(tài)發(fā)生變化。comevdsr4data set ready線的狀態(tài)發(fā)生變化。該事件只在dst從1變到0時才發(fā)生。comevcd5carrier detect線的狀態(tài)發(fā)生變化。comevring6檢測到振鈴信號。一些uart(universal a

40、synchronous receiver-transmitters)可能不支持此事件。comeveof7收到數(shù)據(jù)結(jié)尾(ascii字符為26)字符。第四章 單片機(jī)與pc機(jī)的實例4.1通信流程的實現(xiàn)(1)如何保證單片機(jī)能正確接收到pc機(jī)所發(fā)來的命令信息? 判斷單片機(jī)是否正確接收到pc機(jī)所發(fā)來的命令信息,依然是靠單片機(jī)所發(fā)來的回應(yīng)信息。此時單片機(jī)的回應(yīng)信息,已非簡單的應(yīng)答信息。它可能是一幀數(shù)據(jù)(當(dāng)命令成功執(zhí)行時),也可能是表示命令執(zhí)行失敗的應(yīng)答,也可能表示未能成功接收pc所發(fā)命令的應(yīng)答。當(dāng)pc機(jī)收到這些信息時,即可獲知所發(fā)的命令是否已被正確接收。當(dāng)然,當(dāng)在規(guī)定時間內(nèi)未收到任何回應(yīng)信息時,表明通信鏈路

41、存在問題。(2)如何保證pc機(jī)能正確接收到單片機(jī)所發(fā)的數(shù)據(jù)信息?當(dāng)pc機(jī)沒有接收到正確的數(shù)據(jù)信息時,pc機(jī)通信流程不會進(jìn)入“重發(fā)讀數(shù)據(jù)命令”的狀態(tài),而仍將所接收的回應(yīng)信息交給應(yīng)用程序處理。這也就是說,在所設(shè)計的通信流程是不能保證pc機(jī)“發(fā)送讀數(shù)據(jù)命令”時能夠得到正確的數(shù)據(jù)信息。那么是由應(yīng)用程序來保證。應(yīng)用程序根據(jù)通信流程所返回的響應(yīng)信息,決定是否重發(fā)此命令,還是發(fā)送下一個命令,或是退出通信程序。進(jìn)一步而言,在pc機(jī)與單片機(jī)的通信中,命令只能由pc機(jī)發(fā)出,單片機(jī)只能被動回應(yīng),而不會向pc機(jī)發(fā)出任何命令。4.2 單片機(jī)與pc機(jī)的串口通信的實現(xiàn)方法4.2.1 單片機(jī)的實現(xiàn)方法在這次運行中需要用到ke

42、il c51應(yīng)用程序,一般可以按照下面的步驟來創(chuàng)建。l 新建一個工程項目文件;l 為工程選擇目標(biāo)器件(例如選擇phlips的p87c52x2);l 為工程項目設(shè)置軟硬件調(diào)試環(huán)境;l 創(chuàng)建源程序文件并輸入程序代碼;l 保存創(chuàng)建的源程序項目文件;l 把源程序文件添加到項目中。(1)新建一工程,雙擊keil c51圖標(biāo),進(jìn)入然后單擊工具欄的project的new project出現(xiàn)保存文件的對話框,以asm格式保存文件。將會出現(xiàn)下圖(2)如果選擇相應(yīng)的器件組并其器件型號,可單擊project的select device for target”target1”命令,然后重新加以選擇phlips的p87

43、c52x2。(3)至此,用戶建立一個空白工程項目文件,把下面的單片機(jī)的源代碼org 0000hljmp startorg 0100hstart: mov scon,#50h ;串口工作在方式1 mov tmod,#20h ;定時器t1工作在方式2,作為串口的波特率發(fā)生器 mov th1,#0fdh ; mov tl1,#0fdh ;9600bps的波特率 setb tr1 ;啟動定時器t1開始工作scan1:jb ri,cart1 ;等待數(shù)據(jù)接收完成(jb 位條件轉(zhuǎn)移指令) ljmp scan1cart1:mov a,sbuf ;從接收緩沖區(qū)取出接收到的數(shù)據(jù) inc a ;數(shù)據(jù)+1 clr r

44、i ;清除中斷標(biāo)志 mov sbuf,a ;把加1以后的數(shù)據(jù)發(fā)送出去wa1t:jbc ti,scan2 ;等待數(shù)據(jù)發(fā)送完成(等待ti=1) ljmp wa1tscan2:ljmp scan1end寫入項目中,保存到同一個文件中。再在選中source group1后并單擊add files to group命令。再搜索文件startup.a51到source group1中。(4)然后選擇project中的options for target中的targect和output。(5)經(jīng)過以上工作就可以編譯程序了。(6)下載程序,先要連接dp51單片機(jī)仿真實驗儀,把實驗儀開關(guān)打到load處,使其工作于下載狀態(tài)。(7)再雙擊dpflash下載軟件,將會出現(xiàn)dpflash編程界面,再進(jìn)行擦除工作,然后把開關(guān)的打到run處并按reset。此時再按編程就完成了。以下也可以用這界面來完成。4.2.2 pc機(jī)的實現(xiàn)方法最后就可以用sscom3.2軟件來完成最后的調(diào)試了,其運行界面如下:在發(fā)送區(qū)輸入111111接收區(qū)即會顯示發(fā)送的代碼+1。222222111111這次的程序的基本工作原理:

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論