單片機(jī)IO口模擬串行實現(xiàn)數(shù)據(jù)通信.doc
《單片機(jī)IO口模擬串行實現(xiàn)數(shù)據(jù)通信.doc》由會員分享,可在線閱讀,更多相關(guān)《單片機(jī)IO口模擬串行實現(xiàn)數(shù)據(jù)通信.doc(24頁珍藏版)》請在裝配圖網(wǎng)上搜索。
目錄 1設(shè)計任務(wù)與要求...............................................1 2總體方案設(shè)計.................................................1 2.1串行通信的方式設(shè)計.......................................1 2.1.1并行I/O口............................................1 2.1.2通信的基本原理.......................................2 2.1.3 89C51的串行口.......................................5 2.1.4 用IO口模擬串口通信..................................7 2.2 數(shù)碼管顯示設(shè)計...........................................7 2.3 LED燈顯示設(shè)計...........................................8 3單元電路設(shè)計................................................8 3.1硬件設(shè)計...............................................8 3.1.1復(fù)位電路設(shè)計.......................................10 3.1.2時鐘電路...........................................10 3.1.3 顯示電路設(shè)計.......................................11 3.1.4電平轉(zhuǎn)換電路.......................................12 3.2軟件設(shè)計...............................................14 3.2.1 程序設(shè)計流程圖.....................................14 3.2.2 單片機(jī)IO口模擬串口實現(xiàn)數(shù)據(jù)通信的源程序............15 4系統(tǒng)仿真....................................................18 5收獲與體會..................................................20 6參考文獻(xiàn)....................................................21 單片機(jī)IO口模擬串口實現(xiàn)數(shù)據(jù)通信 1設(shè)計任務(wù)與要求 本設(shè)計為單片機(jī)IO口模擬串口實現(xiàn)數(shù)據(jù)通信,它可以用單片機(jī)的IO口實現(xiàn)單片機(jī)RX和TX的功能。具體要求如下: l 用單片機(jī)的P3.4和P3.5分別模擬RX和TX的串行通信功能,能夠接收和發(fā)送數(shù)據(jù)。 l 通過PC機(jī)的鍵盤輸入字符,并傳送給單片機(jī),由單片機(jī)接收后,發(fā)達(dá)給PC機(jī),由PC機(jī)加以顯示。 l 單片機(jī)接收由鍵盤輸入的數(shù)據(jù)后,如果是數(shù)字,則由數(shù)碼管顯示,并由LED燈表示其ASCII碼,如果是其他字符,則由僅由LED燈顯示其ASCII碼。 2總體方案設(shè)計 2.1串行通信的方式設(shè)計 本設(shè)計要求用單片機(jī)的IO口來模擬串口的串行通信,因此有必要先簡要介紹一下單片機(jī)的IO和通信的基本原理與串行口P3.0和P3.1。 2.1.1并行I/O口 MCS-51單片機(jī)共有4個雙向的8位并行I/O端口(Port),分別記作P0-P3,共有32根口線,各口的每一位均由鎖存器、輸出驅(qū)動器和輸入緩沖器所組成。實際上P0-P3已被歸入特殊功能寄存器之列。這四個口除了按字節(jié)尋址以外,還可以按位尋址。由于它們在結(jié)構(gòu)上有一些差異,故各口的性質(zhì)和功能有一些差異。 P0口是雙向8位三態(tài)I/O口,此口為地址總線(低8位)及數(shù)據(jù)總線分時復(fù)用口,可驅(qū)動8個LS型TTL負(fù)載。P1口是8位準(zhǔn)雙向I/O口,可驅(qū)動4個LS 型負(fù)載。P2口是8位準(zhǔn)雙向I/O口,與地址總線(高8位)復(fù)用,可驅(qū)動4個LS型TTL負(fù)載。P3口是8位準(zhǔn)雙向I/O口,是雙功能復(fù)用口,可驅(qū)動4個LS型TTL負(fù)載。P1口、P2口、P3口各I/O口線片內(nèi)均有固定的上拉電阻,當(dāng)這3個準(zhǔn)雙向I/O口做輸入口使用時,要向該口先寫“1”,另外準(zhǔn)雙向I/O口無高阻的“浮空”狀態(tài),故稱為雙向三態(tài)I/O 口。 2.1.2通信的基本原理 串行通信只用一位數(shù)據(jù)線傳送數(shù)據(jù)的位信號,即使加上幾條通信聯(lián)絡(luò)控制線,也用不了很多電纜線。因此串行通信適合遠(yuǎn)距離數(shù)據(jù)傳送。,如大型主機(jī)與其遠(yuǎn)程終端之間、處于兩地的計算機(jī)之間采用串行通信就非常經(jīng)濟(jì)。當(dāng)然串行通信要求有轉(zhuǎn)換數(shù)據(jù)格式、時間控制等邏輯電路,這些電路目前已被集成在大規(guī)模集成電路(稱為可編程串行通信控制器),使用很方便。 通信方式有兩種:并行通信和串行通信。通常根據(jù)傳送的的距離決定采用哪種通信方式。例如,在IBM—PC機(jī)與外部設(shè)備(如打印機(jī)等)通信時,距離小于30m,則可采用并行通信方式,當(dāng)距離大于30m時,則要采用串行通信方式。89C51單片機(jī)具有并行和串行兩種基本通信方式。 并行通信是指數(shù)據(jù)的各位同時進(jìn)行傳送(發(fā)送或接收)的通信方式。其優(yōu)點(diǎn)是傳送速度高;缺點(diǎn)是數(shù)據(jù)有多少位,就需要多少根傳送線。例如,89C51單片機(jī)與打印機(jī)之間的數(shù)據(jù)傳送就屬于并行通信。圖1所示為89C51單片機(jī)與外設(shè)之間8位數(shù)據(jù)并行通信的連接方法。并行通信在位數(shù)多、傳送距離又遠(yuǎn)時就不太合適了。 圖1 兩種通信方式連接 串行通信指數(shù)據(jù)是一位一位按順序傳送的通信方式。它的突出優(yōu)點(diǎn)是只需一對傳輸線(利用電話線就可以作為傳輸線),這樣大大降低了傳送成本,特別適用于遠(yuǎn)距離通信;其缺點(diǎn)是傳送速度較低。假設(shè)并行傳送N位數(shù)據(jù)所需時間為T,那么串行傳送的時間至少為NT,實際上問題總是大于NT的,圖1(b)所示為串行通信方式的連接方法。 串行通信的傳送方式通常有3種:單向(或)單工配置,只允許數(shù)據(jù)向一個方向傳送;半雙向(或半雙工)配置,允許數(shù)據(jù)向兩個方向中的任一方向傳送,但每次只能有一個站點(diǎn)發(fā)送;全雙向(或全工)配置,允許同時雙向傳送數(shù)據(jù),因此,全雙工配置是一對單向配置,它要求兩端的通信設(shè)備都有完整和獨(dú)立的發(fā)送和接收能力。 串行通信有兩種基本的通信方式:異步通信和同步通信。 l 異步通信 在異步通信中,數(shù)據(jù)是一幀一幀(包括一個字符代碼或一字節(jié)數(shù)據(jù))傳送的,第一幀的數(shù)據(jù)格式如圖2所示。 在幀格式中,一個字符由4部分組成:起始位、數(shù)據(jù)位、奇偶校驗位和停止位。首先是一個起始位(0),然后是5—8位數(shù)據(jù) (規(guī)定低位在前,高位在后),接下來是奇偶校驗位(可省略),最后是停止位(1)。起始位(0)信號只占一位,用來通知接收設(shè)備一個待接收的字符開始到達(dá)。線路上在不傳送字符時應(yīng)保持為1。接收端不斷檢測線路的狀態(tài),若連續(xù)為1以后又測到一個0,就知道發(fā)來一個新字符,應(yīng)馬上準(zhǔn)備接收。字符的起始位還被用作同步接收端的時鐘,以保證以后的接收能正確進(jìn)行。 起始位后面緊接著是數(shù)據(jù)位,它可以 5位(D0—D4)、6位、7位或8位(D0—D7)。 奇偶校驗(D8)只占一位,但在字符中也可以規(guī)定不用奇偶校驗位,則這一位就可以省去。也可用這一位(1/0)來確定這一幀中的字符所代表信息的性質(zhì)(地址/數(shù)據(jù)等)。 停止位用來表征字符的結(jié)束,它一定是高電位(邏輯1)。停止位可以是1位、1.5位或2位。接收端收到停止位后,知道上一字符已傳送完畢,同時也為接收下一個字符作好準(zhǔn)備—只發(fā)再接收到0,就是新字符的起始位。若停止位以后不是緊接著傳送下一個字符,,則使線路電平保持為高電平(邏輯1)。圖2(a)表示一個字符緊接一個字符傳送的情況,上一個字符的停止位和下一個字符的起始位是緊鄰的;圖2(b)則是兩個字符間有空閑位的情況,空閑位為期不遠(yuǎn),線路處于等待狀態(tài)。存在空閑位正是異步通信的特征之一。 例如規(guī)定用ASCII編碼,字符為7位,加1個奇偶校驗位、1個起始位、1個停止位,則一幀共10位。 l 同步通信 同步通信中,在數(shù)據(jù)開始傳送前用同步字符來指示(常約定1—2個),并由時鐘來實現(xiàn)發(fā)送端和接收端同步,即檢測到規(guī)定的同步字符后,下面就連續(xù)按順序傳送數(shù)據(jù),直到通信告一段落。同步傳送時,字符與字符之間沒有間隙,也不用起始位和停止位,僅在數(shù)據(jù)塊開始時用同步字符SYNC來指示。 波特率 波特率,即數(shù)據(jù)傳送速率,表示每秒鐘傳送二進(jìn)制代碼的位數(shù),它的單位是b/s。波特率對于CPU與外界的通信是很重要的。假設(shè)數(shù)據(jù)傳送速率是120字符/s,而每個字符格式包含1個代碼位(1個起始位、1個終位、8個數(shù)據(jù)位)。這時,傳送的波特率為: 10b/字符120字符/s=1200b/s 每一位代碼的傳送時間Td為波特率的倒數(shù)。 Td=1b/(1200bs-1)=0.833ms 異步通信的傳送速率在50b/s--19200b/s之間,常用于計算機(jī)到終端機(jī)和打印機(jī)之間的通信、直通電報以及無線電通信的數(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)起始位 通信線上沒有數(shù)據(jù)被傳送時處于邏輯1狀態(tài)。當(dāng)發(fā)送設(shè)備要發(fā)送一個字符數(shù)據(jù)時,首先發(fā)出一個邏輯0信號,這個邏輯低電平就是起始位。起始位通過通信線傳向接收設(shè)備,接收設(shè)備檢測到這個邏輯低電平后,就開始準(zhǔn)備接收數(shù)據(jù)位信號。起始位所起的作用就是設(shè)備同步,通信雙方必須在傳送數(shù)據(jù)位前協(xié)調(diào)同步。 (2)數(shù)據(jù)位 當(dāng)接收設(shè)備收到起始位后,緊接著就會收到數(shù)據(jù)位。數(shù)據(jù)位的個數(shù)可以是5、6、7或8。IBM-PC中經(jīng)常采用7位或8位數(shù)據(jù)傳送,89C51串行口采用8位或9位數(shù)據(jù)傳送。這些數(shù)據(jù)位被接收到移位寄存器中,構(gòu)成傳送數(shù)據(jù)字符。在字符數(shù)據(jù)傳送過程中,數(shù)據(jù)位從最低有效位開始發(fā)送,依次順序在接收設(shè)備中被轉(zhuǎn)換為并行數(shù)據(jù)。 (3)奇偶校驗位 數(shù)據(jù)位發(fā)送完之后,可以發(fā)送奇偶校驗位。奇偶校驗用于有限差錯檢測,通信雙方需約定已知的奇偶校驗方式。如果選擇偶校驗,那么組成數(shù)據(jù)位和奇偶位的邏輯1的個數(shù)必須是偶數(shù);如果選擇奇校驗,那么邏輯1的個數(shù)必須是奇數(shù)。 (4)停止位約定 在奇偶位或數(shù)據(jù)位(當(dāng)無奇偶校驗時)之后發(fā)送的是停止位。停止位是一個字符數(shù)據(jù)的結(jié)束標(biāo)志,可以是1位,1.5位或2位的高電平。接收設(shè)備收到停止位之后,通信線路上便又恢復(fù)邏輯1狀態(tài),直至下一個字符數(shù)據(jù)的起始位到來。 (5)波特率設(shè)置 通信線上傳送的所有位信號都保持一致的信號持續(xù)時間,每一位的信號持續(xù)時間都由數(shù)據(jù)傳送速度確定,而傳送速度是以每秒多少個二進(jìn)制位來衡量的,這個速度叫波特率。如果數(shù)據(jù)以300個二進(jìn)制位每秒在通信線上傳送,那么傳送速度為300波特,通常記為300b/s。 2.1.3 89C51的串行口 89C51單片機(jī)除具有4個8位并行口外,還具有串行接口。此串行接口是一個全雙工串行通信接口,即能同時進(jìn)行串行發(fā)送和接收數(shù)據(jù)。它可以作UATR(通用異步接收和發(fā)送器)用,也可以作同步移位寄存器用。使用串行接口可以實現(xiàn)89C51單片機(jī)系統(tǒng)之間點(diǎn)對點(diǎn)的單機(jī)通信和89C51與系統(tǒng)機(jī)(如IBM-PC機(jī)等)的單機(jī)或多機(jī)通信。 通信和89C51與系統(tǒng)機(jī)(如IBM-PC機(jī)等)的單機(jī)或多機(jī)通信。 圖3 串行口內(nèi)部結(jié)構(gòu)示意圖 l 結(jié) 構(gòu) 89C51通過引腳RXD(P3.0,串行數(shù)據(jù)接收端)和引腳TXD(P3.1,串行數(shù)據(jù)發(fā)送端)與外界進(jìn)行通信。其內(nèi)部結(jié)構(gòu)簡化示意圖如圖3所示。 圖3中有兩個物理獨(dú)立的接收、發(fā)送緩沖器SBUF,它們占用同一低值99H,可同時發(fā)送、接收數(shù)據(jù)。發(fā)送緩沖器只能寫入,不能讀出;接收緩沖器只能讀出,不能寫入。 串行發(fā)送與接收的速率與移位時鐘同步。89C51用定時器T1作為串行通信的波特率發(fā)生器,T1溢出率經(jīng)2分頻(或不分頻)后又經(jīng)16分頻作為串行發(fā)送或接收的移位脈沖。移位脈沖的速率即是波特率。 從圖中可看出,接收器是雙緩沖結(jié)構(gòu),在前一個字節(jié)被從接收緩沖器SBUF讀出之前,第二個字節(jié)即開始被接收(串行輸入至移位寄存器),但是,在第二個字節(jié)接收完畢而前一個字節(jié)CPU未讀取時,會丟失前一個字節(jié)。 串行口的發(fā)送和接收都是以特殊功能寄存器SBUF的名義進(jìn)行讀或?qū)懙摹.?dāng)向SBUF發(fā)“寫”命令時(執(zhí)行“MOV SBUF,A”指令),即是向發(fā)送緩沖器SBUF裝載并開始由TXD引腳向外發(fā)送一幀數(shù)據(jù),發(fā)送完便使發(fā)送中斷標(biāo)志位TI=1。 在滿足串行口接收中斷標(biāo)志位RI(SCON.0)=0的條件下,置允許接收位REN(SCON.4)=1就會接收一幀數(shù)據(jù)進(jìn)入移位寄存器,并裝載到接收SBUF中,同時使RI=1。當(dāng)發(fā)讀SBUF命令時(執(zhí)行“MOV A,SBUF”命令),便由接收緩沖器(SBUF)取出信息通過89C51內(nèi)部總線送CPU。 對于發(fā)送緩沖器,因為發(fā)送時CPU是主動的,不會產(chǎn)生重疊錯誤,一般不需要用雙緩沖器結(jié)構(gòu)來保持最大傳送速率。 l 串行口控制字及控制寄存器 89C51串行口是可編程接口,對它初始化編程只用兩個控制字分別寫入特殊功能寄存器SCON(98H)和電源控制寄存器PCON(87H)中即可。 2.1.4 用IO口模擬串口通信 IO口沒有89C51的串口結(jié)構(gòu),因此IO不能自動發(fā)送數(shù)據(jù)和接收數(shù)據(jù),也沒有發(fā)送中斷標(biāo)志和接收中斷標(biāo)志。而89C51串口還有T1計時器的參與,用來產(chǎn)生波特率。因此,需要在程序中模擬串口的通信方式以及定義數(shù)據(jù)的格式。 模擬串口的通信方式采用方式1,即為10位為一幀數(shù)據(jù)接口,1個起始位、8位數(shù)據(jù)位(低位在前)和1位停止位,共10位。并且每位持續(xù)的時間為100us。先發(fā)送或接收起始位0,接著準(zhǔn)備發(fā)送或接收8位數(shù)據(jù)位,最后發(fā)送或接收停止位1。 本設(shè)計中采用P3.4來模擬TX串口發(fā)送端口,用P3.5來模擬RX串口接收端口。因此發(fā)送的10位數(shù)據(jù)由P3.4送出,接收的10位數(shù)據(jù)由P3.5輸入,并等待CPU進(jìn)行處理。 2.2 數(shù)碼管顯示設(shè)計 本設(shè)計主要在于顯示,顯示由鍵盤輸入的字符的ASCII碼,如果是數(shù)字,則由一位LED數(shù)據(jù)管顯示,并由LED燈顯示。若為其他的字符,僅由LED燈顯示。從鍵盤輸入字符通過軟件模擬或者通過PC機(jī)中附件中終端設(shè)備來顯示。輸入與顯示可以由C函數(shù)庫存中的函數(shù)printf和scanf來實現(xiàn)。 單片機(jī)中通常使用7段LED構(gòu)成字型“8”,另外,還有一個小數(shù)點(diǎn)發(fā)光二極管,以顯示數(shù)字、符號及小數(shù)點(diǎn)。這種顯示器有共陰極和共陽極兩種。發(fā)光二極管的陽極連在一起的(公共端K0)稱為共陽極顯示器,陰極連在一起的(公共端K0)稱為共陰極顯示器。一位顯示器由8個發(fā)光二極管組成,其中,7個發(fā)光二極管構(gòu)成字型“8”的各個筆劃a-g,另一個小數(shù)點(diǎn)為dp發(fā)光二極管。當(dāng)在某段發(fā)光二極管上施加一定的正向電壓時,該段筆劃即亮;不加電壓則暗。為了保護(hù)各段LED不被損壞,須外加限流電阻。 以共陰極LED為例,各LED公共陰極K0接地。若向個控制端a、b、…、g、dp順次送入11100001信號,則該顯示器顯示“7.”字型 共陰極與共陽極7段LED顯示數(shù)字0-9的編碼(a段為最低位,dp點(diǎn)為最高位)。如表1所示。 表1 共陰極和共陽極7段LED顯示字型編碼表 顯示字符 0 1 2 3 4 5 6 7 8 9 共陰極 段選碼 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é)省單片機(jī)的外部資源,采用動態(tài)顯示技術(shù)。但是,本設(shè)計只需要采用一位數(shù)碼管顯示ASCII碼,因此無須采用動態(tài)顯示,因為P口有鎖存器的功能,只要將待輸出的七段碼輸出到接數(shù)碼管的P口即可無須重復(fù)掃描。數(shù)碼管的顯示會維持到下一個七段碼輸出改變?yōu)橹埂? 2.3 LED燈顯示設(shè)計 LED,即發(fā)光二極管,當(dāng)它的兩端正向?qū)〞r,電阻很小,有電流通過,當(dāng)加反向電壓時,電阻可以看成無窮大,無電流通過。因此它有普通二極管的功能,另外,它的另一個重要用途是將電信號變?yōu)楣庑盘?,通過光纜傳輸,然后再用光電二極管接收驅(qū)動一光電二極管。 因此,發(fā)光二極管有電平指示作用。在本設(shè)計中,將LED燈的負(fù)極接到P口,也是為了防止一上電就導(dǎo)通。若將正極接到P口,一上電復(fù)位,P口輸出即為高電平,LED導(dǎo)通,沒有對信號的指示作用。因此,必須將負(fù)極接到P口,然后正極通過一個限流電阻接到5V電源。當(dāng)P口輸出高電平時(包括復(fù)位的高電平),LED燈滅,當(dāng)P口輸出低電平時,LED燈亮,指示輸出為低電平。 3單元電路設(shè)計 3.1硬件設(shè)計 本設(shè)計的總體硬件電路原理圖如下: 圖4 設(shè)計的總體電路原理圖 3.1.1復(fù)位電路設(shè)計 MCS-51單片機(jī)的復(fù)位是由外部的復(fù)位電路來實現(xiàn)的。復(fù)位引腳RST通過一個斯密特觸發(fā)器與復(fù)位電路相連,斯密特觸發(fā)器用來抑制噪聲,在每個機(jī)器周期的S5P2,斯密特觸發(fā)器的輸出電平由復(fù)位電路采樣一次,然后才能得到內(nèi)部復(fù)位操作所需要的信號。 上電復(fù)位:上電復(fù)位電路是—種簡單的復(fù)位電路,只要在RST復(fù)位引腳接一個電容到VCC,接一個電阻到地就可以了。上電復(fù)位是指在給系統(tǒng)上電時,復(fù)位電路通過電容加到RST復(fù)位引腳一個短暫的高電平信號,這個復(fù)位信號隨著VCC對電容的充電過程而回落,所以RST引腳復(fù)位的高電平維持時間取決于電容的充電時間。為了保證系統(tǒng)安全可靠的復(fù)位,RST引腳的高電平信號必須維持足夠長的時間。 電路圖如圖5所示。 圖5 復(fù)位電路 3.1.2時鐘電路 時鐘是單片機(jī)的心臟,單片機(jī)各功能部件的運(yùn)行都是以時鐘頻率為基準(zhǔn),有條不紊的一拍一拍地工作。因此,時鐘頻率直接影響單片機(jī)的速度,時鐘電路的質(zhì)量也直接影響單片機(jī)系統(tǒng)的穩(wěn)定性。常用的時鐘電路有兩種方式:一種是內(nèi)部時鐘方式,另一種為外部時鐘方式。本文用的是內(nèi)部時鐘方式。 電路圖如圖6所示。 圖6 時鐘電路 MCS-51單片機(jī)內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器,該高增益反向放大器的輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2。這兩個引腳跨接石英晶體振蕩器和微調(diào)電容,就構(gòu)成一個穩(wěn)定的自激振蕩器。 3.1.3 顯示電路設(shè)計 本設(shè)計的顯示電路包括兩部分,即數(shù)碼管顯示部分和LED燈顯示部分。 數(shù)碼管顯示電路如圖7所示。 圖7 數(shù)碼管顯示電路 采用P0口作為段碼輸出端口,由于只有一位數(shù)碼管顯示,位選端可以直接接地,一直處于選通狀態(tài)。另外,P0有特殊的物理結(jié)構(gòu),即漏極開路電路,所以得在輸出端接上拉電阻,通過上拉電阻接到5V電源,上拉電阻一般采用1K大小。 數(shù)碼管顯示子程序比較簡單,只要通過查表找到對應(yīng)的七段碼,輸出到數(shù)碼管,就可以顯示出想要的符號或數(shù)字。如輸入的數(shù)字為9,經(jīng)過查找共陰極的七段碼表找到Dis_Table[9],即0x6f,將0x6f,即01101111B對應(yīng)的dpgfedcba輸出到P0口,即gfdcba六段為高電平,顯示為亮,即顯示數(shù)字9。 LED燈顯示電路如圖8所示。 圖8 LED燈顯示電路 LED燈顯示由P1口來完成,由于是低電平輸出有效,即燈滅才表示輸出的是高電平,因此不符合習(xí)慣,需要對將要輸出的段碼進(jìn)行取反運(yùn)算。 比如從鍵盤輸入數(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單片機(jī)的串行口與PC機(jī)的串行口COM1或COM2進(jìn)行串行通信,將單片機(jī)采集的數(shù)據(jù)傳送到PC機(jī)中,由PC機(jī)的高級語言或數(shù)據(jù)庫語言對數(shù)據(jù)進(jìn)行整理及統(tǒng)計等復(fù)雜處理;或者實現(xiàn)PC機(jī)對遠(yuǎn)程前沿單片機(jī)進(jìn)行控制。 在實現(xiàn)計算機(jī)與計算機(jī)、計算機(jī)與外設(shè)間的串行通信時,通常采用標(biāo)準(zhǔn)通信接口、這樣就能很方便地把各種計算機(jī)、外部設(shè)備、測量儀器等有機(jī)地連接起來,進(jìn)行串行通信。 ELA RS-232C是目前最常用的串行接口標(biāo)準(zhǔn),用于實現(xiàn)計算機(jī)與計算機(jī)之間、計算機(jī)與外設(shè)之間的數(shù)據(jù)通信。 該標(biāo)準(zhǔn)的目的是定義數(shù)據(jù)終端設(shè)備(DTE)之間接口的電氣特性。一般的串行通信系統(tǒng)是指微機(jī)和調(diào)制解調(diào)器(modem),如圖7-20。調(diào)制解調(diào)器叫數(shù)據(jù)電路終端設(shè)備(簡稱DCE)。 RS-232C提供了單片機(jī)與單片機(jī)、單片機(jī)與PC機(jī)間串行數(shù)據(jù)通信的標(biāo)準(zhǔn)接口。通信距離可達(dá)到 15 m。 為了保證二進(jìn)制數(shù)據(jù)能夠正確傳送,設(shè)備控制準(zhǔn)確完成,有必要使所用的信號電平保持一致。為滿足此要求,RS-232C標(biāo)準(zhǔn)規(guī)定了數(shù)據(jù)和控制信號的電壓范圍。由于RS-232C是在TTL集成電路之前研制的,所以它的電平不是+5V和地,而是采用負(fù)邏輯,規(guī)定+3V—15V之間的任意電壓表示邏輯0電平,-3V—15V之間的任意電壓表示邏輯1電平。 本設(shè)計中采用MAX232芯片,電路如圖9所示。 圖9 電路轉(zhuǎn)換電路圖 此電路圖中,從MAX232芯片中兩路發(fā)送接收中任選擇一路作為接口。應(yīng)注意其發(fā)送、接收的引腳要對應(yīng)。如果使T1 IN接單片機(jī)的發(fā)送端TXD,也就是T0,則PC機(jī)的RS—232的接收端RXD一定要對應(yīng)接T1 OUT引腳。同時,R1 OUT接單片機(jī)的RXD引腳,PC機(jī)的RS—232的發(fā)送端TXD對應(yīng)妝R1 IN引腳。 3.2 軟件設(shè)計 3.2.1 程序設(shè)計流程圖. 發(fā)送字符串1和2 初始化四個P口 由PC機(jī)顯示字符串1和字符串2,并準(zhǔn)備接收數(shù)據(jù) 接收PC機(jī)鍵盤輸入的數(shù)據(jù) 在P1口用LED顯示接收到的字符的ASCII碼 用數(shù)碼管顯示數(shù)字字符 接收到的字符為數(shù)字? 發(fā)送字符到PC機(jī),并由PC機(jī)顯示 發(fā)送換行字符 接收到回車鍵 開始 圖10 程序設(shè)計流程圖 本設(shè)計的主要程序部分是發(fā)送和接收數(shù)據(jù),即發(fā)送和接收10位數(shù)據(jù)。在數(shù)據(jù)發(fā)送和接收時,關(guān)鍵在于延時,延時的長短決定了波特率,即數(shù)據(jù)傳送的速率。識別此數(shù)據(jù)傳送完和是否開始傳送的標(biāo)志是起始位和停止位。因此在發(fā)送數(shù)據(jù)前要發(fā)送起始位0,然后再發(fā)送8位數(shù)據(jù),最后發(fā)送1位停止位。接收時,是否是新的數(shù)據(jù),即是否決定接收數(shù)據(jù),得判定是否為起始位0,接收完后,再判定接收的是否為停止位1。 3.2.2 單片機(jī)IO口模擬串口實現(xiàn)數(shù)據(jù)通信的源程序 單片機(jī)IO口模擬串口實現(xiàn)數(shù)據(jù)通信的源程序如下: #include- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 單片機(jī) IO 模擬 串行 實現(xiàn) 數(shù)據(jù)通信
鏈接地址:http://ioszen.com/p-6625647.html