版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計報告書</b></p><p> 設(shè)計名稱: 計算機(jī)控制技術(shù) </p><p> 題 目: AT89C51的串口通信 </p><p> 學(xué)生姓名: XXX </p><p> 專 業(yè): 計
2、算機(jī)科學(xué)與技術(shù) </p><p> 班 別: 計科本XXX班 </p><p> 學(xué) 號: XXXXXXXX </p><p> 指導(dǎo)老師: XXX </p><p> 日 期: 2012 年 7 月 12
3、 日</p><p> 一、主要內(nèi)容:本課程設(shè)計利用兩片AT89C51實現(xiàn)雙機(jī)串口通信;主機(jī)發(fā)送并顯示 10 以下的隨機(jī)數(shù),從機(jī)顯示該數(shù)的階乘值,通過開關(guān)改變主機(jī)輸出的數(shù)值。設(shè)計電路并編寫一個串行口方式1收發(fā)程序,實現(xiàn)兩片AT89C51之間的通信,甲機(jī)將數(shù)據(jù)發(fā)送到乙機(jī)并顯示出來,同樣,乙機(jī)也可將數(shù)據(jù)發(fā)送到甲機(jī)顯示出來。</p><p> 二、硬件電路設(shè)計及描述</p>
4、<p> 1、方案選擇及設(shè)計思想 </p><p><b> 2、工作原理</b></p><p> 在串行通信中,數(shù)據(jù)是在兩個站之間傳送的。按照數(shù)據(jù)傳送方向,串行通信可分為三種制式。</p><p> 1). 單工制式(Simplex)單工制式是指甲乙雙方通信只能單向傳送數(shù)據(jù)。單工制式如圖1所示。</p>&
5、lt;p> 2). 半雙工制式(Half duplex) 半雙工制式是指通信雙方都具有發(fā)送器和接收器,雙方既可發(fā)送也可接收,但接收和發(fā)送不能同時進(jìn)行,即發(fā)送時就不能接收,接收時就不能發(fā)送。半雙工制式如圖2所示。</p><p> 3). 全雙工制式(Full duplex) 全雙工制式是指通信雙方均設(shè)有發(fā)送器和接收器,并且將信道劃分為發(fā)送信道和接收信道,兩端數(shù)據(jù)允許同
6、時收發(fā),因此通信效率比前兩種高。全雙工制式如圖3所示。</p><p> AT89C51內(nèi)部有一個可編程全雙工串行通信接口。該部件不僅能同時進(jìn)行數(shù)據(jù)的發(fā)送和接收,也可作為一個同步移位寄存器使用。下面將對其內(nèi)部結(jié)構(gòu)、工作方式以及波特率進(jìn)行介紹。</p><p> 圖4 AT89C51串行口結(jié)構(gòu)框圖 </p><p><b> 串口通信方式1<
7、;/b></p><p><b> 1).方式1發(fā)送 </b></p><p> 方式1輸出時,數(shù)據(jù)由TXD輸出,一幀信息為10位,1位起始位0,8位數(shù)據(jù)位(先低位)和1位停止位1。當(dāng)執(zhí)行一條數(shù)據(jù)寫發(fā)送緩沖器SBUF的指令,就啟動發(fā)送。圖中TX時鐘的頻率就是發(fā)送的波特率。</p><p> 發(fā)送開始時,內(nèi)部發(fā)送控制信號變?yōu)橛行?。將?/p>
8、始位向TXD輸出,此后,每經(jīng)過一個TX時鐘周期,便產(chǎn)生一個移位脈沖,并由TXD輸出一個數(shù)據(jù)位。8位數(shù)據(jù)位全部發(fā)送完畢后,置“1” TI。</p><p><b> 2).方式1接收 </b></p><p> 數(shù)據(jù)從RXD(P3.0)腳輸入。當(dāng)檢測到起始位的負(fù)跳變時,開始接收數(shù)據(jù)。定時控制信號有兩種):接收移位時鐘(RX時鐘,頻率和波特率相同)和位檢測器采樣脈沖(
9、頻率是RX時鐘的16倍,1位數(shù)據(jù)期間,有16個采樣脈沖),當(dāng)采樣到RXD端從1到0的跳變時就啟動檢測器,接收的值是3次連續(xù)采樣(第7、8、9個脈沖時采樣)進(jìn)行表決以確認(rèn)是否是真正的起始位(負(fù)跳變)的開始。當(dāng)一幀數(shù)據(jù)接收完,須同時滿足兩個條件,接收才真正有效。</p><p> ?、?RI=0,即上一幀數(shù)據(jù)接收完成時,RI=1發(fā)出的中斷請求已被響應(yīng),SBUF中的數(shù)據(jù)已被取走,說明“接收SBUF”已空。</p&
10、gt;<p> ?、?SM2=0或收到的停止位=1(方式1時,停止位已進(jìn)入RB8),則收到的數(shù)據(jù)裝入SBUF和RB8(RB8裝入停止位),且置“1”中斷標(biāo)志RI。</p><p> 若這兩個條件不同時滿足,收到的數(shù)據(jù)將丟失。</p><p><b> 波特率</b></p><p> 波特率(band rate)是異步通信中
11、每秒鐘傳送的二進(jìn)制數(shù)碼的位數(shù)(比特數(shù)),單位是位/秒。 作用:1、反映串行通信的速率; 2、反映對傳輸通道的要求:波特率越高,要求的傳輸通道的頻帶寬度就越寬異步通信:波特率為每秒傳送的字符數(shù)和每個字符位數(shù)的乘積。方式 1、3: 波特率=2SMOD×(T1溢出率)/32</p><p> 對波特率需要說明的是,當(dāng)串行口工作在方式1或方式3,且要求波特率按規(guī)范取1200、2
12、400、4800、9600…時,若采用晶振12MHz和6MHz,按上述公式算出的T1定時初值將不是一個整數(shù),因此會產(chǎn)生波特率誤差而影響串行通信的同步性能。解決的方法只有調(diào)整單片機(jī)的晶振頻率fosc,為此有一種頻率為11.0592MHz的晶振,這樣可使計算出的T1初值為整數(shù)。表9-2列出了串行方式1或方式3在不同晶振時的常用波特率和誤差。 </p><p> 用兩塊AT89C51模擬主機(jī)和從機(jī),在主機(jī)的P2口低4
13、位處設(shè)4個按鍵,并連上高電平,通過按鍵來給P2口輸入0—9的隨機(jī)數(shù),在主機(jī)的程序里編寫的程序主要實現(xiàn)檢測P2口的數(shù)值,并通過LED顯示出來,然后把這個數(shù)發(fā)出到從機(jī)去。</p><p> 在從機(jī)里,先通過中斷程序取出接收到的數(shù)據(jù),然后處理,通過P1來控制片選,P2口來掃描輸出高低電平,讓LED顯示接收到的數(shù)的階乘值。</p><p> 2、原理電路圖,各元器件之間的實際連接關(guān)系</
14、p><p><b> 圖5 原理電路圖</b></p><p> 3、元器件清單列表:</p><p> 單片機(jī)(AT89C51)兩片 U1 U2</p><p> 按鍵開關(guān)6個 K1 K2 K3 K4 K5 K6</p><p> 電
15、容6個 C1(20pf) C2(20pf) C3(22uf) C4(20pf) C5(22pf) C6(20pf)</p><p> 電阻兩個(1K) R1 R2</p><p> 1位的共陰LED數(shù)碼管1個 </p><p> 2位的共陽LED數(shù)碼管1個</p><p> 4
16、位的共陽LED數(shù)碼管1個</p><p> 12Mhz的晶振兩個 X1 X2</p><p><b> 三、軟件設(shè)計</b></p><p><b> 源程序代碼</b></p><p><b> 發(fā)送程序:</b></p><
17、;p> #include <reg51.h></p><p> void csh()</p><p><b> {</b></p><p><b> P2=0;</b></p><p><b> SM0=0;</b></p><p
18、> SM1=1;//通信方式設(shè)為方式1</p><p><b> REN=1;</b></p><p><b> TI=0;</b></p><p><b> RI=0;</b></p><p><b> PCON=0;</b></p
19、><p><b> TH1=0xFd;</b></p><p><b> TL1=0XFd;</b></p><p> TMOD=0X20;</p><p><b> EA=1;</b></p><p><b> ET1=0;</b
20、></p><p><b> ES=1;</b></p><p><b> TR1=1;</b></p><p><b> }//初始化設(shè)置</b></p><p> void main()</p><p><b> {<
21、/b></p><p><b> int i,j;</b></p><p><b> char c=0;</b></p><p><b> csh();</b></p><p><b> while(1)</b></p><
22、;p><b> {</b></p><p><b> ES=0;</b></p><p><b> TI=0;</b></p><p> c=P2;//檢測P2口輸入的數(shù)據(jù)</p><p><b> if(P2==0)</b></p&
23、gt;<p> {P1=0x3f;};</p><p><b> if(P2==1)</b></p><p><b> {P1=6;};</b></p><p><b> if(P2==2)</b></p><p> {P1=0x5b;};</p&
24、gt;<p><b> if(P2==3)</b></p><p> {P1=0x4f;};</p><p><b> if(P2==4)</b></p><p> {P1=0x66;};</p><p><b> if(P2==5)</b></p
25、><p> {P1=0x6d;};</p><p><b> if(P2==6)</b></p><p> {P1=0x7d;};</p><p><b> if(P2==7)</b></p><p><b> {P1=7;};</b></p
26、><p><b> if(P2==8)</b></p><p> {P1=0x7f;};</p><p><b> if(P2==9)</b></p><p> {P1=0x6f;};//通過P1口輸出并顯示輸入的數(shù)據(jù)</p><p> SBUF=c;//把檢測到的數(shù)據(jù)
27、放到發(fā)送緩存區(qū)發(fā)送</p><p> while(!TI)</p><p><b> ;</b></p><p><b> TI=0;</b></p><p><b> ES=1;</b></p><p> for(j=0;j<30;j+
28、+)</p><p> for(i=0;i<5000;i++)//可以設(shè)置延時的長短來改變發(fā)送數(shù)據(jù)的快慢</p><p><b> ;</b></p><p><b> }</b></p><p><b> }</b></p><p>&l
29、t;b> 接收程序</b></p><p> #include <reg51.h></p><p><b> int c=0;</b></p><p> void csh()</p><p><b> {</b></p><p><
30、;b> P2=0xFF;</b></p><p><b> SM0=0;</b></p><p> SM1=1;//通信方式設(shè)為方式1 </p><p><b> REN=1;</b></p><p> TI=0;// 清串口發(fā)送中斷標(biāo)志</p><p
31、><b> RI=0;</b></p><p> PCON=0; //波特率不倍增</p><p> TH1=0xFd; //*設(shè)定初值,波特率9600</p><p><b> TL1=0XFd;</b></p><p> TMOD=0X20; //設(shè)置定時器1為工作方式2, 8-
32、bit 自動裝載方式</p><p> ET1=0; //禁止T1中斷</p><p><b> EA=1;</b></p><p> ES=1; //開串口中斷</p><p> TR1=1; //啟動定時器T1</p><p><b> }//初始化設(shè)置</b>
33、</p><p> void delay1ms(int count)</p><p><b> {int i;</b></p><p><b> int j;</b></p><p> for(i=0;i<count;i++)</p><p> for(j
34、=0;j<120;j++); }//定義一個延時函數(shù)</p><p> void intrr() interrupt 4</p><p><b> { </b></p><p> char temp;</p><p> temp=SBUF;</p><p> c=temp;//進(jìn)入
35、中斷取出接收到的數(shù)據(jù)</p><p><b> RI=0;</b></p><p><b> ES=1;</b></p><p><b> }</b></p><p> void main()</p><p><b> { </
36、b></p><p><b> csh();</b></p><p><b> while(1)</b></p><p><b> {if(c<=1)</b></p><p><b> { </b></p><p&g
37、t;<b> P1=1;</b></p><p><b> P2=0xF9;</b></p><p> delay1ms(2);</p><p><b> P1=2;</b></p><p><b> P2=0x40;</b></p>
38、<p> delay1ms(2);</p><p><b> P1=4;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);</p><p><b> P1=8;</b></p><
39、p><b> P2=0x40;</b></p><p> delay1ms(2);</p><p><b> P1=0x10;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);</p><
40、p><b> P1=0x20;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);</p><p> };//顯示000001</p><p><b> if(c==2)</b></p><
41、p><b> { </b></p><p><b> P1=1;</b></p><p><b> P2=0x24;</b></p><p> delay1ms(2);</p><p><b> P1=2;</b></p>&
42、lt;p><b> P2=0x40;</b></p><p> delay1ms(2);</p><p><b> P1=4;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);</p><
43、p><b> P1=8;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);</p><p><b> P1=0x10;</b></p><p><b> P2=0x40;</b><
44、/p><p> delay1ms(2);</p><p><b> P1=0x20;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);</p><p> };//顯示000002</p><p&g
45、t;<b> if(c==3)</b></p><p><b> { </b></p><p><b> P1=1;</b></p><p><b> P2=2;</b></p><p> delay1ms(2);</p><
46、p><b> P1=2;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);</p><p><b> P1=4;</b></p><p><b> P2=0x40;</b></p&
47、gt;<p> delay1ms(2);</p><p><b> P1=8;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);</p><p><b> P1=0x10;</b></p>
48、<p><b> P2=0x40;</b></p><p> delay1ms(2);</p><p><b> P1=0x20;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);</p>
49、<p> };//顯示000006</p><p><b> if(c==4)</b></p><p><b> { </b></p><p><b> P1=1;</b></p><p><b> P2=0x19;</b><
50、/p><p> delay1ms(2);</p><p><b> P1=2;</b></p><p><b> P2=0x24;</b></p><p> delay1ms(2);</p><p><b> P1=4;</b></p>
51、<p><b> P2=0x40;</b></p><p> delay1ms(2);</p><p><b> P1=8;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);</p>&
52、lt;p><b> P1=0x10;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);</p><p><b> P1=0x20;</b></p><p><b> P2=0x40;</b&g
53、t;</p><p> delay1ms(2);</p><p> };//顯示000024</p><p><b> if(c==5)</b></p><p><b> { </b></p><p><b> P1=1;</b></p&
54、gt;<p><b> P2=0x40;</b></p><p> delay1ms(2);</p><p><b> P1=2;</b></p><p><b> P2=0x24;</b></p><p> delay1ms(2);</p>
55、<p><b> P1=4;</b></p><p><b> P2=0xF9;</b></p><p> delay1ms(2);</p><p><b> P1=8;</b></p><p><b> P2=0x40;</b>&
56、lt;/p><p> delay1ms(2);</p><p><b> P1=0x10;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);</p><p><b> P1=0x20;</b>&
57、lt;/p><p><b> P2=0x40;</b></p><p> delay1ms(1);</p><p> };//顯示000120</p><p><b> if(c==6)</b></p><p><b> { </b></p&
58、gt;<p><b> P1=1;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);</p><p><b> P1=2;</b></p><p><b> P2=0x24;</b&g
59、t;</p><p> delay1ms(2);</p><p><b> P1=4;</b></p><p><b> P2=0x78;</b></p><p> delay1ms(2);</p><p><b> P1=8;</b><
60、/p><p><b> P2=0x40;</b></p><p> delay1ms(2);</p><p><b> P1=0x10;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);<
61、/p><p><b> P1=0x20;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);</p><p> };//顯示000720</p><p><b> if(c==7)</b><
62、/p><p><b> { </b></p><p><b> P1=1;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);</p><p><b> P1=2;</b>&
63、lt;/p><p><b> P2=0x19;</b></p><p> delay1ms(2);</p><p><b> P1=4;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);<
64、/p><p><b> P1=8;</b></p><p><b> P2=0x12;</b></p><p> delay1ms(2);</p><p><b> P1=0x10;</b></p><p><b> P2=0x40;&l
65、t;/b></p><p> delay1ms(2);</p><p><b> P1=0x20;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);</p><p> };//顯示005040</p&
66、gt;<p><b> if(c==8)</b></p><p><b> { </b></p><p><b> P1=1;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);&
67、lt;/p><p><b> P1=2;</b></p><p><b> P2=0x24;</b></p><p> delay1ms(2);</p><p><b> P1=4;</b></p><p><b> P2=0x30;&l
68、t;/b></p><p> delay1ms(2);</p><p><b> P1=8;</b></p><p><b> P2=0x40;</b></p><p> delay1ms(2);</p><p><b> P1=0x10;</
69、b></p><p><b> P2=0x19;</b></p><p> delay1ms(2);</p><p><b> P1=0x20;</b></p><p><b> P2=0x40;</b></p><p> delay1m
70、s(2);</p><p> };//顯示40320</p><p><b> if(c==9)</b></p><p><b> { </b></p><p><b> P1=1;</b></p><p><b> P2=0x40;
71、</b></p><p> delay1ms(3);</p><p><b> P1=2;</b></p><p><b> P2=0;</b></p><p> delay1ms(3);</p><p><b> P1=4;</b>
72、;</p><p><b> P2=0;</b></p><p> delay1ms(3);</p><p><b> P1=8;</b></p><p><b> P2=0x24;</b></p><p> delay1ms(3);</
73、p><p><b> P1=0x10;</b></p><p><b> P2=2;</b></p><p> delay1ms(3);</p><p><b> P1=0x20;</b></p><p><b> P2=0x30;<
74、;/b></p><p> delay1ms(2);</p><p> };//顯示362880</p><p> } ;//對接收到的數(shù)據(jù)處理,通過P1、P2口控制輸出顯示該數(shù)的階乘</p><p><b> }</b></p><p><b> 四.實驗體會:<
75、/b></p><p> 在此次計算機(jī)控制技術(shù)課程設(shè)計,從編輯程序到調(diào)試仿真到在試驗箱中做實驗,從理論到實踐,我學(xué)到了很多很多的的東西,不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于at89c51的雙機(jī)雙向通信設(shè)計
- 學(xué)年論文-基于at89c51的雙機(jī)串行通信設(shè)計
- at89c51單片機(jī)課程設(shè)計-----搶答器
- 單片機(jī)的雙機(jī)串口通信-課程設(shè)計
- at89c51單片機(jī)課程設(shè)計說明書
- 課程設(shè)計--基于at89c51單片機(jī)控制步進(jìn)電機(jī)
- 基于at89c51單片機(jī)音樂盒課程設(shè)計
- 單片機(jī)at89c51
- 基于at89c51單片機(jī)的電機(jī)控制綜合課程設(shè)計
- 基于單片機(jī)at89c51的電子時鐘的課程設(shè)計
- 基于at89c51單片機(jī)的多人搶答器設(shè)計課程設(shè)計
- 基于單片機(jī)at89c51控制的鍵控流水燈課程設(shè)計報告
- 單片機(jī)課程設(shè)計-基于at89c51的60秒倒計時設(shè)計
- 89c51單片機(jī)課程設(shè)計
- 單片機(jī)課程設(shè)計--基于at89c51的60秒倒計時設(shè)計
- 單片機(jī)課程設(shè)計---基于at89c51的60秒倒計時設(shè)計
- 基于at89c51的lcd音樂盒課程設(shè)計論文
- c51課程設(shè)計報告基于at89c51單片機(jī)的水位控制系統(tǒng)設(shè)計
- 串口通信c++課程設(shè)計
- at89c51單片機(jī)外文翻譯
評論
0/150
提交評論