at89c51雙機(jī)串口通信課程設(shè)計(jì).doc_第1頁
at89c51雙機(jī)串口通信課程設(shè)計(jì).doc_第2頁
at89c51雙機(jī)串口通信課程設(shè)計(jì).doc_第3頁
at89c51雙機(jī)串口通信課程設(shè)計(jì).doc_第4頁
at89c51雙機(jī)串口通信課程設(shè)計(jì).doc_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

課程設(shè)計(jì)報(bào)告書設(shè)計(jì)名稱: 計(jì)算機(jī)控制技術(shù) 題 目: AT89C51的串口通信 學(xué)生姓名: XXX 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 班 別: 計(jì)科本XXX班 學(xué) 號(hào): XXXXXXXX 指導(dǎo)老師: XXX 日 期: 2012 年 7 月 12 日一、主要內(nèi)容:本課程設(shè)計(jì)利用兩片AT89C51實(shí)現(xiàn)雙機(jī)串口通信;主機(jī)發(fā)送并顯示 10 以下的隨機(jī)數(shù),從機(jī)顯示該數(shù)的階乘值,通過開關(guān)改變主機(jī)輸出的數(shù)值。設(shè)計(jì)電路并編寫一個(gè)串行口方式1收發(fā)程序,實(shí)現(xiàn)兩片AT89C51之間的通信,甲機(jī)將數(shù)據(jù)發(fā)送到乙機(jī)并顯示出來,同樣,乙機(jī)也可將數(shù)據(jù)發(fā)送到甲機(jī)顯示出來。二、硬件電路設(shè)計(jì)及描述1、方案選擇及設(shè)計(jì)思想 單片機(jī)(從機(jī))單片機(jī)(主機(jī))顯示階乘值顯示發(fā)的數(shù) 2、工作原理在串行通信中,數(shù)據(jù)是在兩個(gè)站之間傳送的。按照數(shù)據(jù)傳送方向,串行通信可分為三種制式。1). 單工制式(Simplex)單工制式是指甲乙雙方通信只能單向傳送數(shù)據(jù)。單工制式如圖1所示。2). 半雙工制式(Half duplex) 半雙工制式是指通信雙方都具有發(fā)送器和接收器,雙方既可發(fā)送也可接收,但接收和發(fā)送不能同時(shí)進(jìn)行,即發(fā)送時(shí)就不能接收,接收時(shí)就不能發(fā)送。半雙工制式如圖2所示。3). 全雙工制式(Full duplex) 全雙工制式是指通信雙方均設(shè)有發(fā)送器和接收器,并且將信道劃分為發(fā)送信道和接收信道,兩端數(shù)據(jù)允許同時(shí)收發(fā),因此通信效率比前兩種高。全雙工制式如圖3所示。AT89C51內(nèi)部有一個(gè)可編程全雙工串行通信接口。該部件不僅能同時(shí)進(jìn)行數(shù)據(jù)的發(fā)送和接收,也可作為一個(gè)同步移位寄存器使用。下面將對(duì)其內(nèi)部結(jié)構(gòu)、工作方式以及波特率進(jìn)行介紹。圖4 AT89C51串行口結(jié)構(gòu)框圖 串口通信方式11)方式1發(fā)送 方式1輸出時(shí),數(shù)據(jù)由TXD輸出,一幀信息為10位,1位起始位0,8位數(shù)據(jù)位(先低位)和1位停止位1。當(dāng)執(zhí)行一條數(shù)據(jù)寫發(fā)送緩沖器SBUF的指令,就啟動(dòng)發(fā)送。圖中TX時(shí)鐘的頻率就是發(fā)送的波特率。發(fā)送開始時(shí),內(nèi)部發(fā)送控制信號(hào)變?yōu)橛行?。將起始位向TXD輸出,此后,每經(jīng)過一個(gè)TX時(shí)鐘周期,便產(chǎn)生一個(gè)移位脈沖,并由TXD輸出一個(gè)數(shù)據(jù)位。8位數(shù)據(jù)位全部發(fā)送完畢后,置“1” TI。2)方式1接收 數(shù)據(jù)從RXD(P3.0)腳輸入。當(dāng)檢測(cè)到起始位的負(fù)跳變時(shí),開始接收數(shù)據(jù)。定時(shí)控制信號(hào)有兩種):接收移位時(shí)鐘(RX時(shí)鐘,頻率和波特率相同)和位檢測(cè)器采樣脈沖(頻率是RX時(shí)鐘的16倍,1位數(shù)據(jù)期間,有16個(gè)采樣脈沖),當(dāng)采樣到RXD端從1到0的跳變時(shí)就啟動(dòng)檢測(cè)器,接收的值是3次連續(xù)采樣(第7、8、9個(gè)脈沖時(shí)采樣)進(jìn)行表決以確認(rèn)是否是真正的起始位(負(fù)跳變)的開始。當(dāng)一幀數(shù)據(jù)接收完,須同時(shí)滿足兩個(gè)條件,接收才真正有效。 RI=0,即上一幀數(shù)據(jù)接收完成時(shí),RI=1發(fā)出的中斷請(qǐng)求已被響應(yīng),SBUF中的數(shù)據(jù)已被取走,說明“接收SBUF”已空。 SM2=0或收到的停止位=1(方式1時(shí),停止位已進(jìn)入RB8),則收到的數(shù)據(jù)裝入SBUF和RB8(RB8裝入停止位),且置“1”中斷標(biāo)志RI。若這兩個(gè)條件不同時(shí)滿足,收到的數(shù)據(jù)將丟失。波特率波特率(band rate)是異步通信中每秒鐘傳送的二進(jìn)制數(shù)碼的位數(shù)(比特?cái)?shù)),單位是位/秒。 作用:1、反映串行通信的速率; 2、反映對(duì)傳輸通道的要求:波特率越高,要求的傳輸通道的頻帶寬度就越寬異步通信:波特率為每秒傳送的字符數(shù)和每個(gè)字符位數(shù)的乘積。方式 1、3: 波特率=2SMOD(T1溢出率)/32對(duì)波特率需要說明的是,當(dāng)串行口工作在方式1或方式3,且要求波特率按規(guī)范取1200、2400、4800、9600時(shí),若采用晶振12MHz和6MHz,按上述公式算出的T1定時(shí)初值將不是一個(gè)整數(shù),因此會(huì)產(chǎn)生波特率誤差而影響串行通信的同步性能。解決的方法只有調(diào)整單片機(jī)的晶振頻率fosc,為此有一種頻率為11.0592MHz的晶振,這樣可使計(jì)算出的T1初值為整數(shù)。表9-2列出了串行方式1或方式3在不同晶振時(shí)的常用波特率和誤差。 用兩塊AT89C51模擬主機(jī)和從機(jī),在主機(jī)的P2口低4位處設(shè)4個(gè)按鍵,并連上高電平,通過按鍵來給P2口輸入09的隨機(jī)數(shù),在主機(jī)的程序里編寫的程序主要實(shí)現(xiàn)檢測(cè)P2口的數(shù)值,并通過LED顯示出來,然后把這個(gè)數(shù)發(fā)出到從機(jī)去。在從機(jī)里,先通過中斷程序取出接收到的數(shù)據(jù),然后處理,通過P1來控制片選,P2口來掃描輸出高低電平,讓LED顯示接收到的數(shù)的階乘值。2、原理電路圖,各元器件之間的實(shí)際連接關(guān)系圖5 原理電路圖3、元器件清單列表:?jiǎn)纹瑱C(jī)(AT89C51)兩片 U1 U2按鍵開關(guān)6個(gè) K1 K2 K3 K4 K5 K6電容6個(gè) C1(20pf) C2(20pf) C3(22uf) C4(20pf) C5(22pf) C6(20pf)電阻兩個(gè)(1K) R1 R21位的共陰LED數(shù)碼管1個(gè) 2位的共陽LED數(shù)碼管1個(gè)4位的共陽LED數(shù)碼管1個(gè)12Mhz的晶振兩個(gè) X1 X2三、軟件設(shè)計(jì)源程序代碼發(fā)送程序:#include void csh()P2=0;SM0=0;SM1=1;/通信方式設(shè)為方式1REN=1;TI=0;RI=0;PCON=0;TH1=0xFd;TL1=0XFd;TMOD=0X20;EA=1;ET1=0;ES=1;TR1=1;/初始化設(shè)置void main()int i,j;char c=0;csh();while(1)ES=0;TI=0;c=P2;/檢測(cè)P2口輸入的數(shù)據(jù)if(P2=0) P1=0x3f; if(P2=1) P1=6; if(P2=2) P1=0x5b; if(P2=3) P1=0x4f;if(P2=4) P1=0x66;if(P2=5) P1=0x6d;if(P2=6) P1=0x7d;if(P2=7) P1=7;if(P2=8) P1=0x7f;if(P2=9) P1=0x6f;/通過P1口輸出并顯示輸入的數(shù)據(jù)SBUF=c;/把檢測(cè)到的數(shù)據(jù)放到發(fā)送緩存區(qū)發(fā)送while(!TI);TI=0;ES=1;for(j=0;j30;j+)for(i=0;i5000;i+)/可以設(shè)置延時(shí)的長(zhǎng)短來改變發(fā)送數(shù)據(jù)的快慢;接收程序#include int c=0;void csh()P2=0xFF;SM0=0;SM1=1;/通信方式設(shè)為方式1 REN=1;TI=0;/ 清串口發(fā)送中斷標(biāo)志 RI=0; PCON=0; /波特率不倍增TH1=0xFd; /*設(shè)定初值,波特率9600 TL1=0XFd;TMOD=0X20; /設(shè)置定時(shí)器1為工作方式2, 8-bit 自動(dòng)裝載方式 ET1=0; /禁止T1中斷EA=1;ES=1; /開串口中斷TR1=1; /啟動(dòng)定時(shí)器T1/初始化設(shè)置void delay1ms(int count) int i; int j; for(i=0;icount;i+) for(j=0;j120;j+); /定義一個(gè)延時(shí)函數(shù) void intrr() interrupt 4 char temp;temp=SBUF; c=temp;/進(jìn)入中斷取出接收到的數(shù)據(jù) RI=0; ES=1;void main() csh();while(1) if(c=1) P1=1; P2=0xF9; delay1ms(2); P1=2; P2=0x40; delay1ms(2); P1=4; P2=0x40; delay1ms(2); P1=8; P2=0x40; delay1ms(2); P1=0x10; P2=0x40; delay1ms(2); P1=0x20; P2=0x40; delay1ms(2); ;/顯示000001 if(c=2) P1=1; P2=0x24; delay1ms(2); P1=2; P2=0x40; delay1ms(2); P1=4; P2=0x40; delay1ms(2); P1=8; P2=0x40; delay1ms(2); P1=0x10; P2=0x40; delay1ms(2); P1=0x20; P2=0x40; delay1ms(2); ;/顯示000002 if(c=3) P1=1; P2=2; delay1ms(2); P1=2; P2=0x40; delay1ms(2); P1=4; P2=0x40; delay1ms(2); P1=8; P2=0x40; delay1ms(2); P1=0x10; P2=0x40; delay1ms(2); P1=0x20; P2=0x40; delay1ms(2); ;/顯示000006 if(c=4) P1=1; P2=0x19; delay1ms(2); P1=2; P2=0x24; delay1ms(2); P1=4; P2=0x40; delay1ms(2); P1=8; P2=0x40; delay1ms(2); P1=0x10; P2=0x40; delay1ms(2); P1=0x20; P2=0x40; delay1ms(2); ;/顯示000024 if(c=5) P1=1; P2=0x40; delay1ms(2); P1=2; P2=0x24; delay1ms(2); P1=4; P2=0xF9; delay1ms(2); P1=8; P2=0x40; delay1ms(2); P1=0x10; P2=0x40; delay1ms(2); P1=0x20; P2=0x40; delay1ms(1); ;/顯示000120 if(c=6) P1=1; P2=0x40; delay1ms(2); P1=2; P2=0x24; delay1ms(2); P1=4; P2=0x78; delay1ms(2); P1=8; P2=0x40; delay1ms(2); P1=0x10; P2=0x40; delay1ms(2); P1=0x20; P2=0x40; delay1ms(2); ;/顯示000720 if(c=7) P1=1; P2=0x40; delay1ms(2); P1=2; P2=0x19; delay1ms(2); P1=4; P2=0x40; delay1ms(2); P1=8; P2=0x12; delay1ms(2); P1=0x10; P2=0x40; delay1ms(2); P1=0x20; P2=0x40; delay1ms(2); ;/顯示005040 if(c=8) P1=1; P2=0x40; delay1ms(2); P1=2; P2=0x24; delay1ms(2); P1=4; P2=0x30; delay1ms(2); P1=8; P2=0x40; delay1ms(2); P1=0x10; P2=0x19; delay1ms(2); P1=0x20; P2=0x40; delay1ms(2); ;/顯示40320 if(c=9) P1=1; P2=0x40; delay1ms(3); P1=2; P2=0; delay1ms(3); P1=4; P2=0; delay1ms(3); P1=8; P2=0x24; delay1ms(3); P1=0x10; P2=2; delay1ms(3); P1=0x20; P2=0x30; delay1ms(2); ;/顯示362880 ;/對(duì)接收到的數(shù)據(jù)處理,通過P1、P2口控制輸出顯示該數(shù)的階乘四實(shí)驗(yàn)體會(huì):在此次計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì),從編輯程序到調(diào)試仿真到在試驗(yàn)箱中做實(shí)驗(yàn),從理論到實(shí)踐,我學(xué)到了很多很多的的東西,不僅可以鞏固了以前所學(xué)過的知識(shí),而且學(xué)到了很多在書本上所沒有學(xué)到過的知識(shí)。通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是

溫馨提示

  • 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)論