版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)報(bào)告書(shū)</b></p><p> 設(shè)計(jì)名稱: 計(jì)算機(jī)控制技術(shù) </p><p> 題 目: AT89C51的串口通信 </p><p> 學(xué)生姓名: XXX </p><p> 專 業(yè): 計(jì)
2、算機(jī)科學(xué)與技術(shù) </p><p> 班 別: 計(jì)科本XXX班 </p><p> 學(xué) 號(hào): XXXXXXXX </p><p> 指導(dǎo)老師: XXX </p><p> 日 期: 2012 年 7 月 12
3、 日</p><p> 一、主要內(nèi)容:本課程設(shè)計(jì)利用兩片AT89C51實(shí)現(xiàn)雙機(jī)串口通信;主機(jī)發(fā)送并顯示 10 以下的隨機(jī)數(shù),從機(jī)顯示該數(shù)的階乘值,通過(guò)開(kāi)關(guān)改變主機(jī)輸出的數(shù)值。設(shè)計(jì)電路并編寫(xiě)一個(gè)串行口方式1收發(fā)程序,實(shí)現(xiàn)兩片AT89C51之間的通信,甲機(jī)將數(shù)據(jù)發(fā)送到乙機(jī)并顯示出來(lái),同樣,乙機(jī)也可將數(shù)據(jù)發(fā)送到甲機(jī)顯示出來(lái)。</p><p> 二、硬件電路設(shè)計(jì)及描述</p>
4、<p> 1、方案選擇及設(shè)計(jì)思想 </p><p><b> 2、工作原理</b></p><p> 在串行通信中,數(shù)據(jù)是在兩個(gè)站之間傳送的。按照數(shù)據(jù)傳送方向,串行通信可分為三種制式。</p><p> 1). 單工制式(Simplex)單工制式是指甲乙雙方通信只能單向傳送數(shù)據(jù)。單工制式如圖1所示。</p>&
5、lt;p> 2). 半雙工制式(Half duplex) 半雙工制式是指通信雙方都具有發(fā)送器和接收器,雙方既可發(fā)送也可接收,但接收和發(fā)送不能同時(shí)進(jìn)行,即發(fā)送時(shí)就不能接收,接收時(shí)就不能發(fā)送。半雙工制式如圖2所示。</p><p> 3). 全雙工制式(Full duplex) 全雙工制式是指通信雙方均設(shè)有發(fā)送器和接收器,并且將信道劃分為發(fā)送信道和接收信道,兩端數(shù)據(jù)允許同
6、時(shí)收發(fā),因此通信效率比前兩種高。全雙工制式如圖3所示。</p><p> AT89C51內(nèi)部有一個(gè)可編程全雙工串行通信接口。該部件不僅能同時(shí)進(jìn)行數(shù)據(jù)的發(fā)送和接收,也可作為一個(gè)同步移位寄存器使用。下面將對(duì)其內(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í),數(shù)據(jù)由TXD輸出,一幀信息為10位,1位起始位0,8位數(shù)據(jù)位(先低位)和1位停止位1。當(dāng)執(zhí)行一條數(shù)據(jù)寫(xiě)發(fā)送緩沖器SBUF的指令,就啟動(dòng)發(fā)送。圖中TX時(shí)鐘的頻率就是發(fā)送的波特率。</p><p> 發(fā)送開(kāi)始時(shí),內(nèi)部發(fā)送控制信號(hào)變?yōu)橛行?。將?/p>
8、始位向TXD輸出,此后,每經(jīng)過(guò)一個(gè)TX時(shí)鐘周期,便產(chǎn)生一個(gè)移位脈沖,并由TXD輸出一個(gè)數(shù)據(jù)位。8位數(shù)據(jù)位全部發(fā)送完畢后,置“1” TI。</p><p><b> 2).方式1接收 </b></p><p> 數(shù)據(jù)從RXD(P3.0)腳輸入。當(dāng)檢測(cè)到起始位的負(fù)跳變時(shí),開(kāi)始接收數(shù)據(jù)。定時(shí)控制信號(hào)有兩種):接收移位時(shí)鐘(RX時(shí)鐘,頻率和波特率相同)和位檢測(cè)器采樣脈沖(
9、頻率是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ù)跳變)的開(kāi)始。當(dāng)一幀數(shù)據(jù)接收完,須同時(shí)滿足兩個(gè)條件,接收才真正有效。</p><p> ?、?RI=0,即上一幀數(shù)據(jù)接收完成時(shí),RI=1發(fā)出的中斷請(qǐng)求已被響應(yīng),SBUF中的數(shù)據(jù)已被取走,說(shuō)明“接收SBUF”已空。</p&
10、gt;<p> ⑵ SM2=0或收到的停止位=1(方式1時(shí),停止位已進(jìn)入RB8),則收到的數(shù)據(jù)裝入SBUF和RB8(RB8裝入停止位),且置“1”中斷標(biāo)志RI。</p><p> 若這兩個(gè)條件不同時(shí)滿足,收到的數(shù)據(jù)將丟失。</p><p><b> 波特率</b></p><p> 波特率(band rate)是異步通信中
11、每秒鐘傳送的二進(jìn)制數(shù)碼的位數(shù)(比特?cái)?shù)),單位是位/秒。 作用:1、反映串行通信的速率; 2、反映對(duì)傳輸通道的要求:波特率越高,要求的傳輸通道的頻帶寬度就越寬異步通信:波特率為每秒傳送的字符數(shù)和每個(gè)字符位數(shù)的乘積。方式 1、3: 波特率=2SMOD×(T1溢出率)/32</p><p> 對(duì)波特率需要說(shuō)明的是,當(dāng)串行口工作在方式1或方式3,且要求波特率按規(guī)范取1200、2
12、400、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í)的常用波特率和誤差。 </p><p> 用兩塊AT89C51模擬主機(jī)和從機(jī),在主機(jī)的P2口低4
13、位處設(shè)4個(gè)按鍵,并連上高電平,通過(guò)按鍵來(lái)給P2口輸入0—9的隨機(jī)數(shù),在主機(jī)的程序里編寫(xiě)的程序主要實(shí)現(xiàn)檢測(cè)P2口的數(shù)值,并通過(guò)LED顯示出來(lái),然后把這個(gè)數(shù)發(fā)出到從機(jī)去。</p><p> 在從機(jī)里,先通過(guò)中斷程序取出接收到的數(shù)據(jù),然后處理,通過(guò)P1來(lái)控制片選,P2口來(lái)掃描輸出高低電平,讓LED顯示接收到的數(shù)的階乘值。</p><p> 2、原理電路圖,各元器件之間的實(shí)際連接關(guān)系</
14、p><p><b> 圖5 原理電路圖</b></p><p> 3、元器件清單列表:</p><p> 單片機(jī)(AT89C51)兩片 U1 U2</p><p> 按鍵開(kāi)關(guān)6個(gè) K1 K2 K3 K4 K5 K6</p><p> 電
15、容6個(gè) C1(20pf) C2(20pf) C3(22uf) C4(20pf) C5(22pf) C6(20pf)</p><p> 電阻兩個(gè)(1K) R1 R2</p><p> 1位的共陰LED數(shù)碼管1個(gè) </p><p> 2位的共陽(yáng)LED數(shù)碼管1個(gè)</p><p> 4
16、位的共陽(yáng)LED數(shù)碼管1個(gè)</p><p> 12Mhz的晶振兩個(gè) X1 X2</p><p><b> 三、軟件設(shè)計(jì)</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;//檢測(cè)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;};//通過(guò)P1口輸出并顯示輸入的數(shù)據(jù)</p><p> SBUF=c;//把檢測(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è)置延時(shí)的長(zhǎng)短來(lái)改變發(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è)置定時(shí)器1為工作方式2, 8-
32、bit 自動(dòng)裝載方式</p><p> ET1=0; //禁止T1中斷</p><p><b> EA=1;</b></p><p> ES=1; //開(kāi)串口中斷</p><p> TR1=1; //啟動(dòng)定時(shí)器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++); }//定義一個(gè)延時(shí)函數(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> } ;//對(duì)接收到的數(shù)據(jù)處理,通過(guò)P1、P2口控制輸出顯示該數(shù)的階乘</p><p><b> }</b></p><p><b> 四.實(shí)驗(yàn)體會(huì):<
75、/b></p><p> 在此次計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì),從編輯程序到調(diào)試仿真到在試驗(yàn)箱中做實(shí)驗(yàn),從理論到實(shí)踐,我學(xué)到了很多很多的的東西,不僅可以鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的知識(shí)。通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于at89c51的雙機(jī)雙向通信設(shè)計(jì)
- 學(xué)年論文-基于at89c51的雙機(jī)串行通信設(shè)計(jì)
- at89c51單片機(jī)課程設(shè)計(jì)-----搶答器
- 單片機(jī)的雙機(jī)串口通信-課程設(shè)計(jì)
- at89c51單片機(jī)課程設(shè)計(jì)說(shuō)明書(shū)
- 課程設(shè)計(jì)--基于at89c51單片機(jī)控制步進(jìn)電機(jī)
- 基于at89c51單片機(jī)音樂(lè)盒課程設(shè)計(jì)
- 單片機(jī)at89c51
- 基于at89c51單片機(jī)的電機(jī)控制綜合課程設(shè)計(jì)
- 基于單片機(jī)at89c51的電子時(shí)鐘的課程設(shè)計(jì)
- 基于at89c51單片機(jī)的多人搶答器設(shè)計(jì)課程設(shè)計(jì)
- 基于單片機(jī)at89c51控制的鍵控流水燈課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)-基于at89c51的60秒倒計(jì)時(shí)設(shè)計(jì)
- 89c51單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于at89c51的60秒倒計(jì)時(shí)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---基于at89c51的60秒倒計(jì)時(shí)設(shè)計(jì)
- 基于at89c51的lcd音樂(lè)盒課程設(shè)計(jì)論文
- c51課程設(shè)計(jì)報(bào)告基于at89c51單片機(jī)的水位控制系統(tǒng)設(shè)計(jì)
- 串口通信c++課程設(shè)計(jì)
- at89c51單片機(jī)外文翻譯
評(píng)論
0/150
提交評(píng)論