單片機IO口模擬串行實現(xiàn)數(shù)據(jù)通信_第1頁
單片機IO口模擬串行實現(xiàn)數(shù)據(jù)通信_第2頁
單片機IO口模擬串行實現(xiàn)數(shù)據(jù)通信_第3頁
單片機IO口模擬串行實現(xiàn)數(shù)據(jù)通信_第4頁
單片機IO口模擬串行實現(xiàn)數(shù)據(jù)通信_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目錄1設計任務與要求.1總體方案設計.1 2.1串行通信的方式設計.1 2.1.1并行I/O口.12.1.2通信的基本原理.22.1.3 89C51的串行口.5 2.1.4 用IO口模擬串口通信.7 2.2 數(shù)碼管顯示設計.7 2.3 LED燈顯示設計.8單元電路設計.8 3.1硬件設計.8 3.1.1復位電路設計.10 3.1.2時鐘電路.10 3.1.3 顯示電路設計.11 3.1.4電平轉(zhuǎn)換電路.12 3.2軟件設計.14 3.2.1 程序設計流程圖.14 3.2.2 單片機IO口模擬串口實現(xiàn)數(shù)據(jù)通信的源程序.154系統(tǒng)仿真.185收獲與體會.206參考文獻.21單片機IO口模擬串口實現(xiàn)

2、數(shù)據(jù)通信1設計任務與要求本設計為單片機IO口模擬串口實現(xiàn)數(shù)據(jù)通信,它可以用單片機的IO口實現(xiàn)單片機RX和TX的功能。具體要求如下:l 用單片機的P3.4和P3.5分別模擬RX和TX的串行通信功能,能夠接收和發(fā)送數(shù)據(jù)。l 通過PC機的鍵盤輸入字符,并傳送給單片機,由單片機接收后,發(fā)達給PC機,由PC機加以顯示。l 單片機接收由鍵盤輸入的數(shù)據(jù)后,如果是數(shù)字,則由數(shù)碼管顯示,并由LED燈表示其ASCII碼,如果是其他字符,則由僅由LED燈顯示其ASCII碼??傮w方案設計2.1串行通信的方式設計本設計要求用單片機的IO口來模擬串口的串行通信,因此有必要先簡要介紹一下單片機的IO和通信的基本原理與串行口

3、P3.0和P3.1。2.1.1并行I/O口MCS-51單片機共有4個雙向的8位并行I/O端口(Port),分別記作P0-P3,共有32根口線,各口的每一位均由鎖存器、輸出驅(qū)動器和輸入緩沖器所組成。實際上P0-P3已被歸入特殊功能寄存器之列。這四個口除了按字節(jié)尋址以外,還可以按位尋址。由于它們在結構上有一些差異,故各口的性質(zhì)和功能有一些差異。P0口是雙向8位三態(tài)I/O口,此口為地址總線(低8位)及數(shù)據(jù)總線分時復用口,可驅(qū)動8個LS型TTL負載。P1口是8位準雙向I/O口,可驅(qū)動4個LS 型負載。P2口是8位準雙向I/O口,與地址總線(高8位)復用,可驅(qū)動4個LS型TTL負載。P3口是8位準雙向I

4、/O口,是雙功能復用口,可驅(qū)動4個LS型TTL負載。P1口、P2口、P3口各I/O口線片內(nèi)均有固定的上拉電阻,當這3個準雙向I/O口做輸入口使用時,要向該口先寫“1”,另外準雙向I/O口無高阻的“浮空”狀態(tài),故稱為雙向三態(tài)I/O 口。2.1.2通信的基本原理串行通信只用一位數(shù)據(jù)線傳送數(shù)據(jù)的位信號,即使加上幾條通信聯(lián)絡控制線,也用不了很多電纜線。因此串行通信適合遠距離數(shù)據(jù)傳送。,如大型主機與其遠程終端之間、處于兩地的計算機之間采用串行通信就非常經(jīng)濟。當然串行通信要求有轉(zhuǎn)換數(shù)據(jù)格式、時間控制等邏輯電路,這些電路目前已被集成在大規(guī)模集成電路(稱為可編程串行通信控制器),使用很方便。通信方式有兩種:并

5、行通信和串行通信。通常根據(jù)傳送的的距離決定采用哪種通信方式。例如,在IBMPC機與外部設備(如打印機等)通信時,距離小于30m,則可采用并行通信方式,當距離大于30m時,則要采用串行通信方式。89C51單片機具有并行和串行兩種基本通信方式。并行通信是指數(shù)據(jù)的各位同時進行傳送(發(fā)送或接收)的通信方式。其優(yōu)點是傳送速度高;缺點是數(shù)據(jù)有多少位,就需要多少根傳送線。例如,89C51單片機與打印機之間的數(shù)據(jù)傳送就屬于并行通信。圖1所示為89C51單片機與外設之間8位數(shù)據(jù)并行通信的連接方法。并行通信在位數(shù)多、傳送距離又遠時就不太合適了。 圖1 兩種通信方式連接串行通信指數(shù)據(jù)是一位一位按順序傳送的通信方式。

6、它的突出優(yōu)點是只需一對傳輸線(利用電話線就可以作為傳輸線),這樣大大降低了傳送成本,特別適用于遠距離通信;其缺點是傳送速度較低。假設并行傳送N位數(shù)據(jù)所需時間為T,那么串行傳送的時間至少為NT,實際上問題總是大于NT的,圖1(b)所示為串行通信方式的連接方法。串行通信的傳送方式通常有3種:單向(或)單工配置,只允許數(shù)據(jù)向一個方向傳送;半雙向(或半雙工)配置,允許數(shù)據(jù)向兩個方向中的任一方向傳送,但每次只能有一個站點發(fā)送;全雙向(或全工)配置,允許同時雙向傳送數(shù)據(jù),因此,全雙工配置是一對單向配置,它要求兩端的通信設備都有完整和獨立的發(fā)送和接收能力。串行通信有兩種基本的通信方式:異步通信和同步通信。l

7、 異步通信在異步通信中,數(shù)據(jù)是一幀一幀(包括一個字符代碼或一字節(jié)數(shù)據(jù))傳送的,第一幀的數(shù)據(jù)格式如圖2所示。在幀格式中,一個字符由4部分組成:起始位、數(shù)據(jù)位、奇偶校驗位和停止位。首先是一個起始位(0),然后是58位數(shù)據(jù) (規(guī)定低位在前,高位在后),接下來是奇偶校驗位(可省略),最后是停止位(1)。起始位(0)信號只占一位,用來通知接收設備一個待接收的字符開始到達。線路上在不傳送字符時應保持為1。接收端不斷檢測線路的狀態(tài),若連續(xù)為1以后又測到一個0,就知道發(fā)來一個新字符,應馬上準備接收。字符的起始位還被用作同步接收端的時鐘,以保證以后的接收能正確進行。起始位后面緊接著是數(shù)據(jù)位,它可以 5位(D0D

8、4)、6位、7位或8位(D0D7)。奇偶校驗(D8)只占一位,但在字符中也可以規(guī)定不用奇偶校驗位,則這一位就可以省去。也可用這一位(1/0)來確定這一幀中的字符所代表信息的性質(zhì)(地址/數(shù)據(jù)等)。停止位用來表征字符的結束,它一定是高電位(邏輯1)。停止位可以是1位、1.5位或2位。接收端收到停止位后,知道上一字符已傳送完畢,同時也為接收下一個字符作好準備只發(fā)再接收到0,就是新字符的起始位。若停止位以后不是緊接著傳送下一個字符,則使線路電平保持為高電平(邏輯1)。圖2(a)表示一個字符緊接一個字符傳送的情況,上一個字符的停止位和下一個字符的起始位是緊鄰的;圖2(b)則是兩個字符間有空閑位的情況,空

9、閑位為期不遠,線路處于等待狀態(tài)。存在空閑位正是異步通信的特征之一。例如規(guī)定用ASCII編碼,字符為7位,加1個奇偶校驗位、1個起始位、1個停止位,則一幀共10位。l 同步通信 同步通信中,在數(shù)據(jù)開始傳送前用同步字符來指示(常約定12個),并由時鐘來實現(xiàn)發(fā)送端和接收端同步,即檢測到規(guī)定的同步字符后,下面就連續(xù)按順序傳送數(shù)據(jù),直到通信告一段落。同步傳送時,字符與字符之間沒有間隙,也不用起始位和停止位,僅在數(shù)據(jù)塊開始時用同步字符SYNC來指示。波特率 波特率,即數(shù)據(jù)傳送速率,表示每秒鐘傳送二進制代碼的位數(shù),它的單位是b/s。波特率對于CPU與外界的通信是很重要的。假設數(shù)據(jù)傳送速率是120字符/s,而

10、每個字符格式包含1個代碼位(1個起始位、1個終位、8個數(shù)據(jù)位)。這時,傳送的波特率為: 10b字符×120字符s1200bs每一位代碼的傳送時間Td為波特率的倒數(shù)。 Td1b(1200bs-1)0.833ms異步通信的傳送速率在50b/s-19200b/s之間,常用于計算機到終端機和打印機之間的通信、直通電報以及無線電通信的數(shù)據(jù)發(fā)送等。 圖2 異步通信的一般數(shù)據(jù)格式串行通信協(xié)議: 通信協(xié)議是對數(shù)據(jù)傳送方式的規(guī)定,包括數(shù)據(jù)格式定義和數(shù)據(jù)位定義等。通信雙方必須遵守統(tǒng)一的通信協(xié)議。串行通信協(xié)議包括同步協(xié)議和異步協(xié)議兩種。在此只討論異步串行通信協(xié)議和異步串性協(xié)議規(guī)定的字符數(shù)據(jù)的傳送格式。(1

11、)起始位通信線上沒有數(shù)據(jù)被傳送時處于邏輯1狀態(tài)。當發(fā)送設備要發(fā)送一個字符數(shù)據(jù)時,首先發(fā)出一個邏輯0信號,這個邏輯低電平就是起始位。起始位通過通信線傳向接收設備,接收設備檢測到這個邏輯低電平后,就開始準備接收數(shù)據(jù)位信號。起始位所起的作用就是設備同步,通信雙方必須在傳送數(shù)據(jù)位前協(xié)調(diào)同步。(2)數(shù)據(jù)位當接收設備收到起始位后,緊接著就會收到數(shù)據(jù)位。數(shù)據(jù)位的個數(shù)可以是5、6、7或8。IBM-PC中經(jīng)常采用7位或8位數(shù)據(jù)傳送,89C51串行口采用8位或9位數(shù)據(jù)傳送。這些數(shù)據(jù)位被接收到移位寄存器中,構成傳送數(shù)據(jù)字符。在字符數(shù)據(jù)傳送過程中,數(shù)據(jù)位從最低有效位開始發(fā)送,依次順序在接收設備中被轉(zhuǎn)換為并行數(shù)據(jù)。(3

12、)奇偶校驗位數(shù)據(jù)位發(fā)送完之后,可以發(fā)送奇偶校驗位。奇偶校驗用于有限差錯檢測,通信雙方需約定已知的奇偶校驗方式。如果選擇偶校驗,那么組成數(shù)據(jù)位和奇偶位的邏輯1的個數(shù)必須是偶數(shù);如果選擇奇校驗,那么邏輯1的個數(shù)必須是奇數(shù)。(4)停止位約定 在奇偶位或數(shù)據(jù)位(當無奇偶校驗時)之后發(fā)送的是停止位。停止位是一個字符數(shù)據(jù)的結束標志,可以是1位,1.5位或2位的高電平。接收設備收到停止位之后,通信線路上便又恢復邏輯1狀態(tài),直至下一個字符數(shù)據(jù)的起始位到來。(5)波特率設置 通信線上傳送的所有位信號都保持一致的信號持續(xù)時間,每一位的信號持續(xù)時間都由數(shù)據(jù)傳送速度確定,而傳送速度是以每秒多少個二進制位來衡量的,這個

13、速度叫波特率。如果數(shù)據(jù)以300個二進制位每秒在通信線上傳送,那么傳送速度為300波特,通常記為300b/s。2.1.3 89C51的串行口89C51單片機除具有4個8位并行口外,還具有串行接口。此串行接口是一個全雙工串行通信接口,即能同時進行串行發(fā)送和接收數(shù)據(jù)。它可以作UATR(通用異步接收和發(fā)送器)用,也可以作同步移位寄存器用。使用串行接口可以實現(xiàn)89C51單片機系統(tǒng)之間點對點的單機通信和89C51與系統(tǒng)機(如IBM-PC機等)的單機或多機通信。通信和89C51與系統(tǒng)機(如IBM-PC機等)的單機或多機通信。圖3 串行口內(nèi)部結構示意圖l 結 構89C51通過引腳RXD(P3.0,串行數(shù)據(jù)接收

14、端)和引腳TXD(P3.1,串行數(shù)據(jù)發(fā)送端)與外界進行通信。其內(nèi)部結構簡化示意圖如圖3所示。圖3中有兩個物理獨立的接收、發(fā)送緩沖器SBUF,它們占用同一低值99H,可同時發(fā)送、接收數(shù)據(jù)。發(fā)送緩沖器只能寫入,不能讀出;接收緩沖器只能讀出,不能寫入。串行發(fā)送與接收的速率與移位時鐘同步。89C51用定時器T1作為串行通信的波特率發(fā)生器,T1溢出率經(jīng)2分頻(或不分頻)后又經(jīng)16分頻作為串行發(fā)送或接收的移位脈沖。移位脈沖的速率即是波特率。從圖中可看出,接收器是雙緩沖結構,在前一個字節(jié)被從接收緩沖器SBUF讀出之前,第二個字節(jié)即開始被接收(串行輸入至移位寄存器),但是,在第二個字節(jié)接收完畢而前一個字節(jié)CP

15、U未讀取時,會丟失前一個字節(jié)。串行口的發(fā)送和接收都是以特殊功能寄存器SBUF的名義進行讀或?qū)懙?。當向SBUF發(fā)“寫”命令時(執(zhí)行“MOV SBUF,A”指令),即是向發(fā)送緩沖器SBUF裝載并開始由TXD引腳向外發(fā)送一幀數(shù)據(jù),發(fā)送完便使發(fā)送中斷標志位TI=1。在滿足串行口接收中斷標志位RI(SCON.0)=0的條件下,置允許接收位REN(SCON.4)=1就會接收一幀數(shù)據(jù)進入移位寄存器,并裝載到接收SBUF中,同時使RI=1。當發(fā)讀SBUF命令時(執(zhí)行“MOV A,SBUF”命令),便由接收緩沖器(SBUF)取出信息通過89C51內(nèi)部總線送CPU。 對于發(fā)送緩沖器,因為發(fā)送時CPU是主動的,不會

16、產(chǎn)生重疊錯誤,一般不需要用雙緩沖器結構來保持最大傳送速率。l 串行口控制字及控制寄存器89C51串行口是可編程接口,對它初始化編程只用兩個控制字分別寫入特殊功能寄存器SCON(98H)和電源控制寄存器PCON(87H)中即可。2.1.4 用IO口模擬串口通信 IO口沒有89C51的串口結構,因此IO不能自動發(fā)送數(shù)據(jù)和接收數(shù)據(jù),也沒有發(fā)送中斷標志和接收中斷標志。而89C51串口還有T1計時器的參與,用來產(chǎn)生波特率。因此,需要在程序中模擬串口的通信方式以及定義數(shù)據(jù)的格式。模擬串口的通信方式采用方式1,即為10位為一幀數(shù)據(jù)接口,1個起始位、8位數(shù)據(jù)位(低位在前)和1位停止位,共10位。并且每位持續(xù)的

17、時間為100us。先發(fā)送或接收起始位0,接著準備發(fā)送或接收8位數(shù)據(jù)位,最后發(fā)送或接收停止位1。本設計中采用P3.4來模擬TX串口發(fā)送端口,用P3.5來模擬RX串口接收端口。因此發(fā)送的10位數(shù)據(jù)由P3.4送出,接收的10位數(shù)據(jù)由P3.5輸入,并等待CPU進行處理。2.2 數(shù)碼管顯示設計本設計主要在于顯示,顯示由鍵盤輸入的字符的ASCII碼,如果是數(shù)字,則由一位LED數(shù)據(jù)管顯示,并由LED燈顯示。若為其他的字符,僅由LED燈顯示。從鍵盤輸入字符通過軟件模擬或者通過PC機中附件中終端設備來顯示。輸入與顯示可以由C函數(shù)庫存中的函數(shù)printf和scanf來實現(xiàn)。單片機中通常使用7段LED構成字型“8”

18、,另外,還有一個小數(shù)點發(fā)光二極管,以顯示數(shù)字、符號及小數(shù)點。這種顯示器有共陰極和共陽極兩種。發(fā)光二極管的陽極連在一起的(公共端K0)稱為共陽極顯示器,陰極連在一起的(公共端K0)稱為共陰極顯示器。一位顯示器由8個發(fā)光二極管組成,其中,7個發(fā)光二極管構成字型“8”的各個筆劃a-g,另一個小數(shù)點為dp發(fā)光二極管。當在某段發(fā)光二極管上施加一定的正向電壓時,該段筆劃即亮;不加電壓則暗。為了保護各段LED不被損壞,須外加限流電阻。以共陰極LED為例,各LED公共陰極K0接地。若向個控制端a、b、g、dp順次送入11100001信號,則該顯示器顯示“7.”字型共陰極與共陽極7段LED顯示數(shù)字0-9的編碼(

19、a段為最低位,dp點為最高位)。如表1所示。表1 共陰極和共陽極7段LED顯示字型編碼表顯示字符0123456789共陰極段選碼3F(B)06(36)5B(DB)4F(CF)66(F6)6D(FD)7D(FD)07(87)7F(FF)6F(EF)共陽極段選碼C0(40)F9(79)A4(24)B0(30)99(19)92(12)82(02)F8(78)80(00)90(10)LED顯示器有靜態(tài)顯示和動態(tài)顯示兩種方式。為了節(jié)省單片機的外部資源,采用動態(tài)顯示技術。但是,本設計只需要采用一位數(shù)碼管顯示ASCII碼,因此無須采用動態(tài)顯示,因為P口有鎖存器的功能,只要將待輸出的七段碼輸出到接數(shù)碼管的P口

20、即可無須重復掃描。數(shù)碼管的顯示會維持到下一個七段碼輸出改變?yōu)橹埂?.3 LED燈顯示設計LED,即發(fā)光二極管,當它的兩端正向?qū)〞r,電阻很小,有電流通過,當加反向電壓時,電阻可以看成無窮大,無電流通過。因此它有普通二極管的功能,另外,它的另一個重要用途是將電信號變?yōu)楣庑盘?,通過光纜傳輸,然后再用光電二極管接收驅(qū)動一光電二極管。因此,發(fā)光二極管有電平指示作用。在本設計中,將LED燈的負極接到P口,也是為了防止一上電就導通。若將正極接到P口,一上電復位,P口輸出即為高電平,LED導通,沒有對信號的指示作用。因此,必須將負極接到P口,然后正極通過一個限流電阻接到5V電源。當P口輸出高電平時(包括復位

21、的高電平),LED燈滅,當P口輸出低電平時,LED燈亮,指示輸出為低電平。單元電路設計3.1硬件設計 本設計的總體硬件電路原理圖如下:圖4 設計的總體電路原理圖3.1.1復位電路設計MCS-51單片機的復位是由外部的復位電路來實現(xiàn)的。復位引腳RST通過一個斯密特觸發(fā)器與復位電路相連,斯密特觸發(fā)器用來抑制噪聲,在每個機器周期的S5P2,斯密特觸發(fā)器的輸出電平由復位電路采樣一次,然后才能得到內(nèi)部復位操作所需要的信號。上電復位:上電復位電路是種簡單的復位電路,只要在RST復位引腳接一個電容到VCC,接一個電阻到地就可以了。上電復位是指在給系統(tǒng)上電時,復位電路通過電容加到RST復位引腳一個短暫的高電平

22、信號,這個復位信號隨著VCC對電容的充電過程而回落,所以RST引腳復位的高電平維持時間取決于電容的充電時間。為了保證系統(tǒng)安全可靠的復位,RST引腳的高電平信號必須維持足夠長的時間。電路圖如圖5所示。圖5 復位電路3.1.2時鐘電路時鐘是單片機的心臟,單片機各功能部件的運行都是以時鐘頻率為基準,有條不紊的一拍一拍地工作。因此,時鐘頻率直接影響單片機的速度,時鐘電路的質(zhì)量也直接影響單片機系統(tǒng)的穩(wěn)定性。常用的時鐘電路有兩種方式:一種是內(nèi)部時鐘方式,另一種為外部時鐘方式。本文用的是內(nèi)部時鐘方式。電路圖如圖6所示。 圖6 時鐘電路MCS-51單片機內(nèi)部有一個用于構成振蕩器的高增益反相放大器,該高增益反向

23、放大器的輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2。這兩個引腳跨接石英晶體振蕩器和微調(diào)電容,就構成一個穩(wěn)定的自激振蕩器。3.1.3 顯示電路設計本設計的顯示電路包括兩部分,即數(shù)碼管顯示部分和LED燈顯示部分。 數(shù)碼管顯示電路如圖7所示。圖7 數(shù)碼管顯示電路采用P0口作為段碼輸出端口,由于只有一位數(shù)碼管顯示,位選端可以直接接地,一直處于選通狀態(tài)。另外,P0有特殊的物理結構,即漏極開路電路,所以得在輸出端接上拉電阻,通過上拉電阻接到5V電源,上拉電阻一般采用1K大小。數(shù)碼管顯示子程序比較簡單,只要通過查表找到對應的七段碼,輸出到數(shù)碼管,就可以顯示出想要的符號或數(shù)字。如輸入的數(shù)字為9,經(jīng)過查

24、找共陰極的七段碼表找到Dis_Table9,即0x6f,將0x6f,即01101111B對應的dpgfedcba輸出到P0口,即gfdcba六段為高電平,顯示為亮,即顯示數(shù)字9。LED燈顯示電路如圖8所示。圖8 LED燈顯示電路LED燈顯示由P1口來完成,由于是低電平輸出有效,即燈滅才表示輸出的是高電平,因此不符合習慣,需要對將要輸出的段碼進行取反運算。比如從鍵盤輸入數(shù)字7,ASCII碼為37,即00110111B,取反后,為11001000B,將此碼輸出到P1口,則P1.0、P1.1、P1.2和P1.4、P1.5亮,亮的位表示1,即顯示的是37。3.1.4電平轉(zhuǎn)換電路利用89C51單片機的串

25、行口與PC機的串行口COM1或COM2進行串行通信,將單片機采集的數(shù)據(jù)傳送到PC機中,由PC機的高級語言或數(shù)據(jù)庫語言對數(shù)據(jù)進行整理及統(tǒng)計等復雜處理;或者實現(xiàn)PC機對遠程前沿單片機進行控制。在實現(xiàn)計算機與計算機、計算機與外設間的串行通信時,通常采用標準通信接口、這樣就能很方便地把各種計算機、外部設備、測量儀器等有機地連接起來,進行串行通信。ELA RS-232C是目前最常用的串行接口標準,用于實現(xiàn)計算機與計算機之間、計算機與外設之間的數(shù)據(jù)通信。該標準的目的是定義數(shù)據(jù)終端設備(DTE)之間接口的電氣特性。一般的串行通信系統(tǒng)是指微機和調(diào)制解調(diào)器(modem),如圖7-20。調(diào)制解調(diào)器叫數(shù)據(jù)電路終端設

26、備(簡稱DCE)。 RS-232C提供了單片機與單片機、單片機與PC機間串行數(shù)據(jù)通信的標準接口。通信距離可達到 15 m。為了保證二進制數(shù)據(jù)能夠正確傳送,設備控制準確完成,有必要使所用的信號電平保持一致。為滿足此要求,RS-232C標準規(guī)定了數(shù)據(jù)和控制信號的電壓范圍。由于RS-232C是在TTL集成電路之前研制的,所以它的電平不是+5V和地,而是采用負邏輯,規(guī)定+3V15V之間的任意電壓表示邏輯0電平,-3V15V之間的任意電壓表示邏輯1電平。本設計中采用MAX232芯片,電路如圖9所示。圖9 電路轉(zhuǎn)換電路圖此電路圖中,從MAX232芯片中兩路發(fā)送接收中任選擇一路作為接口。應注意其發(fā)送、接收的

27、引腳要對應。如果使T1 IN接單片機的發(fā)送端TXD,也就是T0,則PC機的RS232的接收端RXD一定要對應接T1 OUT引腳。同時,R1 OUT接單片機的RXD引腳,PC機的RS232的發(fā)送端TXD對應妝R1 IN引腳。 3.2 軟件設計 3.2.1 程序設計流程圖.發(fā)送字符串1和2初始化四個P口由PC機顯示字符串1和字符串2,并準備接收數(shù)據(jù)接收PC機鍵盤輸入的數(shù)據(jù)在P1口用LED顯示接收到的字符的ASCII碼用數(shù)碼管顯示數(shù)字字符接收到的字符為數(shù)字?發(fā)送字符到PC機,并由PC機顯示發(fā)送換行字符接收到回車鍵開始圖10 程序設計流程圖 本設計的主要程序部分是發(fā)送和接收數(shù)據(jù),即發(fā)送和接收10位數(shù)據(jù)

28、。在數(shù)據(jù)發(fā)送和接收時,關鍵在于延時,延時的長短決定了波特率,即數(shù)據(jù)傳送的速率。識別此數(shù)據(jù)傳送完和是否開始傳送的標志是起始位和停止位。因此在發(fā)送數(shù)據(jù)前要發(fā)送起始位0,然后再發(fā)送8位數(shù)據(jù),最后發(fā)送1位停止位。接收時,是否是新的數(shù)據(jù),即是否決定接收數(shù)據(jù),得判定是否為起始位0,接收完后,再判定接收的是否為停止位1。 3.2.2 單片機IO口模擬串口實現(xiàn)數(shù)據(jù)通信的源程序單片機IO口模擬串口實現(xiàn)數(shù)據(jù)通信的源程序如下:#include <reg52.h>#include <string.h>#include <intrins.h>typedef unsigned char

29、 uchar;typedef unsigned int uint;#define DISPLAY P0 #define LED P1 sbit TX = P34;sbit RX = P35;uchar code Dis_Table =0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x77,0x7C,0x39,0x5e,0x79,0x71; /0xed,0x88,0xb5,0xb9,0xd8,0x79,0x7d,0xa8,0xfd,0xf9;uchar Buf=0;uchar temp;bit Flag=0;void DelayMs(uin

30、t t) uchar i; while(t-) for(i = 0; i < 112; i+); void Uart_Delay() uchar t = 7;while(t-)_nop_(); void Intial() P1 = 0xFF; P2 = 0xFF; P0 = 0x00; P3 = 0xFF;void IOsend_char( unsigned char ch ) unsigned char h, da , temp; da = ch; TX = 0; Uart_Delay(); for( h = 0; h < 8; h+ ) temp = da & 0x01

31、; TX = temp; da = _cror_( da,1 ); Uart_Delay(); TX = 1; Uart_Delay(); void IOsend_string( unsigned char *str ) unsigned char k, l; l = strlen( str ); for( k = 0; k <= l; k+ ) IOsend_char( *( str+k ) );void IOrec_char(void)unsigned char h, da = 0; while( RX ) ; Uart_Delay(); Uart_Delay(); for( h =

32、 0; h < 7; h+ ) if( RX ) da |= 0x80; else da |= 0x00; da = _cror_( da,1 ); Uart_Delay(); _nop_();_nop_();_nop_();_nop_(); Uart_Delay(); Buf=da;main() uchar tab1= "WLECOME!rn" uchar tab2= "Da Cong,Please Press Keyboard!rn" uchar n; Intial(); IOsend_string(tab1); IOsend_string(tab2); while(1) IOrec_char(); P0 = 0x00; P1 = Buf; P2=0x02; if(

溫馨提示

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

評論

0/150

提交評論