欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15984|回復(fù): 4
收起左側(cè)

51單片機(jī)雙機(jī)通信設(shè)計論文

[復(fù)制鏈接]
ID:161768 發(fā)表于 2017-6-5 00:30 | 顯示全部樓層 |閱讀模式
由單片機(jī)構(gòu)成的雙機(jī)通信系統(tǒng)采用總線型主從式結(jié)構(gòu)。程設(shè)計就是要利用單片機(jī)來完成一個系統(tǒng),實現(xiàn)雙片單片機(jī)串行通信。通信的結(jié)果實用數(shù)碼管進(jìn)行顯示,數(shù)碼管采用查表方式顯示。所謂主從式結(jié)構(gòu),即在兩個單片機(jī)中,一個主機(jī)負(fù)責(zé)通信管理,另一個為從機(jī),從機(jī)要負(fù)責(zé)主機(jī)的調(diào)度與支配。該設(shè)計用AT89C51芯片,并用C語言程序來控制AT89C51,使之能實現(xiàn)兩個單片機(jī)之間的通信。通信方式為單工通信,一個為主單片機(jī),作為發(fā)送方,另一個為從單片機(jī),作為接收方。

目錄
摘要
前言
二 緒論
2.1單片機(jī)
2.2C語言:
2.3雙機(jī)通信
三.系統(tǒng)分析
3.1 基本原理
3.2波特率選擇
3.3通信協(xié)議的使用
四 、硬件設(shè)計
4.1單片機(jī)串行通信功能
4.2 MAX232芯片
4.3整體電路設(shè)計
五、軟件設(shè)計
5.1串行通信軟件實現(xiàn)
5.2程序流程圖
六.聯(lián)合調(diào)試
總結(jié)
參考文獻(xiàn)

前言
近年來,在自動化控制和只能儀器儀表中,單片機(jī)的應(yīng)用越來越廣泛,由于單片機(jī)的運算功能較差,往往需要借助計算機(jī)系統(tǒng),因此單片機(jī)和PC機(jī)進(jìn)行遠(yuǎn)程通信更具有實際意義,通信的關(guān)鍵在于互傳數(shù)據(jù)信息。51單片機(jī)內(nèi)部的串行口具有通信的功能,該 串口可作為通信接口,利用該串口與PC機(jī)的串口通信進(jìn)行串行通信,將單片機(jī)采集的數(shù)據(jù)進(jìn)行整理及統(tǒng)計等復(fù)雜處理就能滿足實際的應(yīng)用需要。51單片機(jī)的開發(fā)除了硬件支持外,同樣離不開軟件。用匯編語言或C語言等高級語言編寫的源程序必須轉(zhuǎn)化為機(jī)器碼才能被執(zhí)行。目前流行的Keil 8051c編譯器。它提供了集成開發(fā)環(huán)境,包括C編譯器、宏編碼、連接器、庫管理和仿真調(diào)制器。
利用keil 8051ccuvision編寫的程序可直接調(diào)用編譯器編譯,連接后可直接運行。學(xué)生結(jié)合自己的實際情況,選擇合適的方法來完成51單片機(jī)和PC機(jī)的串口通     信。
二 緒論
2.1單片機(jī)
單片機(jī)是一種集成在電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU隨機(jī)存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統(tǒng)、定時器/計時器等功能(可能還包括顯示驅(qū)動電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個小而完善的計算機(jī)系統(tǒng)。
在我國,單片機(jī)已經(jīng)不是一個陌生的名詞,它的出現(xiàn)是近代計算機(jī)技術(shù)發(fā)展史上的一個重要里程碑,因為單片機(jī)的誕生標(biāo)志著計算機(jī)正式形成了通用計算機(jī)系統(tǒng)和嵌入式計算機(jī)系統(tǒng)兩大分支。在單片機(jī)誕生之前,為了滿足工程對象的嵌入式應(yīng)用要求,只能將通用計算機(jī)進(jìn)行機(jī)械加固、電氣加固后嵌入到對象系統(tǒng)中構(gòu)成。由于通用計算機(jī)的巨大體積和高成本,無法嵌入到大多數(shù)對象體系中。單片機(jī)則應(yīng)嵌入式應(yīng)用而誕生。單片機(jī)的單芯片的微小體積和極低的成本,可廣泛的嵌入到玩具、家用電器、機(jī)器人、儀器儀表、汽車電子系統(tǒng)、工業(yè)控制單元、辦公自動化設(shè)備、金融電子系統(tǒng)、艦船、個人信息終端及通訊產(chǎn)品中,成為現(xiàn)代電子系統(tǒng)中最重要的智能化工具。
單片機(jī)作為最典型的嵌入式系統(tǒng),它的成功應(yīng)用推動了嵌入式系統(tǒng)的發(fā)展。近年來。除了各種類型的工控機(jī),各種以通用微處理器構(gòu)成的計算機(jī)主模板快、以通用處理器為核,片內(nèi)擴(kuò)展一些外圍功能電路單元構(gòu)成的嵌入式微處理器,甚至單片形式的PC及等,都實現(xiàn)了嵌入式應(yīng)用,成為嵌入式系統(tǒng)的龐大家族。
作為典型的嵌入式系統(tǒng)的單片機(jī),在我國大規(guī)模應(yīng)用已有十余年歷史。在全國高等工科院校中,已普遍開設(shè)單片機(jī)及相關(guān)課程。單片機(jī)已成為電子系統(tǒng)中最普遍的應(yīng)用手段。除了單設(shè)課程外,在涉及的許多環(huán)節(jié),如課程設(shè)計、畢業(yè)設(shè)計、研究生論文課題中,單片機(jī)系統(tǒng)都是最廣泛的應(yīng)用手段。目前,許多單片機(jī)教材都Shiite以80C51系列為基礎(chǔ)來講述其原理及應(yīng)用的。這是因為MCS-51系列單片機(jī)奠定了8位單片機(jī)的基礎(chǔ),形成了單片機(jī)的經(jīng)典體系結(jié)構(gòu)。單片機(jī)是現(xiàn)代計算機(jī)、電子技術(shù)的新興領(lǐng)域,無論是單片機(jī)本身還是單片機(jī)應(yīng)用系統(tǒng)設(shè)計方案都會隨著時代不斷發(fā)生變變化。
2.2C語言:
C語言是Combined Language(組合語言)的中英混合簡稱。是一種計算機(jī)程序設(shè)計語言。它既具有高級語言的特點,又具有匯編語言的特點。它可以作為工作系統(tǒng)設(shè)計語言,編寫系統(tǒng)應(yīng)用程序,也可以作為應(yīng)用程序設(shè)計語言,編寫不依賴計算機(jī)硬件的應(yīng)用程序。因此,它的應(yīng)用范圍廣泛,不僅僅是在軟件開發(fā)上,而且各類科研都需要用到C語言,具體應(yīng)用比如單片機(jī)以及嵌入式系統(tǒng)開發(fā)。
C 語言特點:
是一種成功的系統(tǒng)描述語言,用C語言開發(fā)的UNIX操作系統(tǒng)就是一個成功的范例;同時C語言又是一種通用的程序設(shè)計語言,在國際上廣泛流行。世界上很多著名的計算公司都成功的開發(fā)了不同版本的C語言,很多優(yōu)秀的應(yīng)用程序也都使用C語言開發(fā)的,它是一種很有發(fā)展前途的高級程序設(shè)計語言。1. C是中級語言。它把高級語言的基本結(jié)構(gòu)和語句與低級語言的實用性結(jié)合起來。C 語言可以像匯編語言一樣對位、字節(jié)和地址進(jìn)行操作, 而這三者是計算機(jī)最基本的工作單元。2.C是結(jié)構(gòu)式語言。結(jié)構(gòu)式語言的顯著特點是代碼及數(shù)據(jù)的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結(jié)構(gòu)化方式可使程序?qū)哟吻逦阌谑褂谩⒕S護(hù)以及調(diào)試。C 語言是以函數(shù)形式提供給用戶的,這些函數(shù)可方便的調(diào)用,并具有多種循環(huán)、條件語句控制程序流向,從而使程序完全結(jié)構(gòu)化。3.C語言功能齊全。具有各種各樣的數(shù)據(jù)類型,并引入了指針概念,可使程序效率更高。另外C語言也具有強(qiáng)大的圖形功能,支持多種顯示器和驅(qū)動器。而且計算功能、邏輯判斷功能也比較強(qiáng)大,可以實現(xiàn)決策目的的游戲。 C語言適用范圍大。適合于多種操作系統(tǒng),如Windows、DOS、UNIX等等;也適用于多種機(jī)型。C語言對編寫需要硬件進(jìn)行操作的場合,明顯優(yōu)于其它解釋型高級語言,有一些大型應(yīng)用軟件也是用C語言編寫的。C語言具有繪圖能力強(qiáng),可移植性,并具備很強(qiáng)的數(shù)據(jù)處理能力,因此適于編寫系統(tǒng)軟件,三維,二維圖形和動畫。它是數(shù)值計算的高級語言。5.C語言文件由數(shù)據(jù)序列組成,可以構(gòu)成二進(jìn)制文件或文本文件。常用的C語言IDE(集成開發(fā)環(huán)境)有Microsoft Visual C++,Dev-C++,Code::Blocks,Borland C++,Watcom C++ ,Borland C++ Builder,GNU DJGPP C++ ,Lccwin32 C Compiler 3.1,High C,Turbo C,C-Free,win-tc 等等……   對于一個初學(xué)者,Microsoft Visual C++是一個比較好的軟件。界面友好,功能強(qiáng)大,調(diào)試也很方便。
2.3雙機(jī)通信
兩臺機(jī)器的通信方式可分為單工通信、半雙工通信、雙工通信,他們的通信原理及通信方式為:
單工通信:是指消息只能單方向傳輸?shù)墓ぷ鞣绞健喂ねㄐ判诺朗菃蜗蛐诺溃l(fā)送端和接收端的身份是固定的,發(fā)送端只能發(fā)送信息,不能接收信息;接收端只能接收信息,不能發(fā)送信息,數(shù)據(jù)信號僅從一端傳送到另一端,即信息流是單方向的。通信雙方采用“按——講”(Push To Talk,PTT)單工通信屬于點到點的通信。根據(jù)收發(fā)頻率的異同,單工通信可分為同頻通信和異頻通信。
半雙工通信:這種通信方式可以實現(xiàn)雙向的通信,但不能在兩個方向上同時進(jìn)行,必須輪流交替地進(jìn)行。也就是說,通信信道的每一段都可以是發(fā)送端,也可以是接端。但同一時刻里,信息只能有一個傳輸方向。如日常生活中的例子有步話機(jī)通信等。
雙工通信:雙工通信是指在同一時刻信息可以進(jìn)行雙向傳輸,和打電話一樣,說的同時也能聽,邊說邊聽。這種發(fā)射機(jī)和接收機(jī)分別在兩個不同的頻率上(兩個頻率差有一定要求)能同時進(jìn)行工作的雙工機(jī)也稱為異頻雙工機(jī)。雙工機(jī)的特點是使用方便,但線路設(shè)計較復(fù)雜,價格也較高。


三.系統(tǒng)分析3.1 基本原理
MCS-51系列單片機(jī)上有一個通用異步接收/發(fā)送器UART,通過引腳RXD[P3.O]和TXD[P3.1]可與外音B電路進(jìn)行全雙工的串行異步通信,發(fā)送數(shù)據(jù)時由TXD端送出,接收時數(shù)據(jù)由RXD端輸入。本文將具體介紹單片機(jī)串口的特點和編程方法,并且在最后給出一個實用的單片機(jī)與計算機(jī)通過串口通信的程序。1.1串行接口的基本特點
MCS-51單片機(jī)的串行端口有4種基本工作方式,通過編程設(shè)置,可以使其工作在任一方式,以滿足不同場合的需要。其中,方式0主要用于外接移位寄存器,以擴(kuò)展單片機(jī)的I/O電路;工作方式1多用于雙機(jī)之間或與外設(shè)電路的通信;方式2、3除有方式1的功能外,還可以作多機(jī)通信,以構(gòu)成分布式多微機(jī)系統(tǒng)。
串行端口有兩個控制寄存器SCON、PCON,用于設(shè)置工作方式、發(fā)送或接收的狀態(tài)、特征位、數(shù)據(jù)傳送波特率[每秒傳送的位數(shù)]以及作為中斷標(biāo)志等。
串行端口有一個數(shù)據(jù)寄存器SBUF在特殊功能寄存器中的字節(jié)地址為99H,該寄存器為發(fā)送和接收所共用。
串行端口的波特率可以用程序來控制。在不同工作方式中,由時鐘振蕩頻率的分頻值或由定時器T1的定時溢出時間確定,使用十分方便靈活。???串口控制寄存器
輸入:在(REN)=1時,串行口采樣RXD引腳,當(dāng)采樣到1至O的跳變時,確認(rèn)是串行發(fā)送來的一幀數(shù)據(jù)的開始位0,從而開始接收一幀數(shù)據(jù)。只有當(dāng)8位數(shù)據(jù)接收完,并檢測到高電平停止位后,只有滿足①(R1)=0;②(SM2)=0或接收到的第9位數(shù)據(jù)為1時,停止位才進(jìn)入RB8,8位數(shù)據(jù)才能進(jìn)入接收寄存器,并由硬件置位中斷標(biāo)志RI;否則信息丟失。所以在方式1接收時,應(yīng)先用軟件清零RI和SM2標(biāo)志。
方式2為固定波特率的11位UART方式。它比方式1增加了一位可程控為1或0的第9位數(shù)據(jù)。
輸出:發(fā)送的串行數(shù)據(jù)由TXD端輸出一幀信息為11位,附加的第9位來自SCON寄存器的TB8位,用軟件置位或復(fù)位。它可作為多機(jī)通訊中地址/數(shù)據(jù)信息的標(biāo)志位,也可以作為數(shù)據(jù)的奇偶校驗位。當(dāng)CPU執(zhí)行一條數(shù)據(jù)寫入SUBF的指令且TI=0時,就啟動發(fā)送器發(fā)送。發(fā)送一幀信息后,置位中斷標(biāo)志TI。
? 輸入:在(REN)=1時,串行口采樣RXD引腳,當(dāng)采樣到1至O的跳變時,確認(rèn)是串行發(fā)送來的一幀數(shù)據(jù)的開始位0,從而開始接收一幀數(shù)據(jù)。在接收到附加的第9位數(shù)據(jù)后,當(dāng)滿足①(RI):0;②(SM2)=0或接收到的第9位數(shù)據(jù)為1時,第9位數(shù)據(jù)才進(jìn)入RB8,8位數(shù)據(jù)才能進(jìn)入接收寄存器,并由硬件置位中斷標(biāo)志Ri;否則信息丟失。且不置位RI。
方式3為波特率可變的11位UART方式。除波特率外,其余與方式2相同。 波特率的選擇??? 如前所述,在串行通訊中,收發(fā)雙方的數(shù)據(jù)傳送率(波特率)要有一定的約定。在MCS-51串行口的四種工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可變的,由定時器T1的溢出率控制。
1.方式O
方式0的波特率固定為主振頻率? 的1/12。
2.方式2
方式2的波特率由PCON中的選擇位SMOD來決定,可表示為:波特率=2sMoD×fosc/64也就是當(dāng)SMOD=1時,波特率為1/32×fosc,當(dāng)SMOD=0時,波特率為1/64×fosc。
3.方式1和方式3
定時器T1作為波特率發(fā)生器,其公式如下:
波特率=2SMOD/32×定時器T1溢出率
T1溢出率=T1計數(shù)率/產(chǎn)生溢出所需的周期數(shù) 式中T1計數(shù)率取決于它工作在定時器狀態(tài)還是計數(shù)器狀態(tài)。當(dāng)工作于定時器狀態(tài)時,T1計數(shù)率為Fosc/2:當(dāng)工作于計數(shù)器狀態(tài)時,T1計數(shù)率為外部輸入頻率,此頻率應(yīng)小于Fosc/24。產(chǎn)生溢出所需周期與定時器T1的工作方式、T1的預(yù)置值有關(guān)。定時器T1工作于方式O:溢出所需周期數(shù)=8192-×
定時器T1工作于方式1:溢出所需周期數(shù)=65536-X
定時器T1工作于方式2:溢出所需周期數(shù)=256-X
因為方式2為自動重裝入初值的8位定時器/計數(shù)器模式,所以用它來做波特率發(fā)生器最恰當(dāng)。這種方式下,T1的溢出率[次/秒]計算式可以表示為:
T1溢出率=Fsoc/12[256-X]
3.2波特率選擇
波特率(Boud Rate)就是在串口通信中每秒能夠發(fā)送的位數(shù)(bits/second)。MCS-51串行端口在四種工作模式下有不同的波特率計算方法。其中,模式0和模式2波特率計算很簡單,請同學(xué)們參看教科書;模式1和模式3的波特率選擇相同,故在此僅以工作模式1為例來說明串口通信波特率的選擇。???? 在串行端口工作于模式1,其波特率將由計時/計數(shù)器1來產(chǎn)生,通常設(shè)置定時器工作于模式2(自動再加模式)。在此模式下波特率計算公式為:?????????波特率=(1+SMOD)*晶振頻率/(384*(256-TH1)) 其中,SMOD——寄存器PCON的第7位,稱為波特率倍增 。TH1——定時器的重載值。???? 在選擇波特率的時候需要考慮兩點:首先,系統(tǒng)需要的通信速率。這要根據(jù)系統(tǒng)的運作特點,確定通信的頻率范圍。然后考慮通信時鐘誤差。使用同一晶振頻率在選擇不同的通信速率時通信時鐘誤差會有很大差別。為了通信的穩(wěn)定,我們應(yīng)該盡量選擇時鐘誤差最小的頻率進(jìn)行通信。??? 下面舉例說明波特率選擇過程:假設(shè)系統(tǒng)要求的通信頻率在20000bit/s以下,晶振頻率為12MHz,設(shè)置SMOD=1(即波特率倍增)。TH1=256-62500/波特率???? 根據(jù)波特率取值表,我們知道可以選取的波特率有:1200,2400,4800,9600,19200。列計數(shù)器重載值,通信誤差如下表:
因此,在通信中,最好選用波特率為1200,2400,4800中的一個。
3.3通信協(xié)議的使用
通信協(xié)議是通信設(shè)備在通信前的約定。單片機(jī)、計算機(jī)有了協(xié)議這種約定,通信雙方才能明白對方的意圖,以進(jìn)行下一步動作。假定我們需要在PC機(jī)與單片機(jī)之間進(jìn)行通信,在雙方程式設(shè)計過程中,有如下約定:
0xA1:單片機(jī)讀取P0端口數(shù)據(jù),并將讀取數(shù)據(jù)返回PC機(jī);
0xA2:單片機(jī)從PC機(jī)接收一段控制數(shù)據(jù);
0xA3:單片機(jī)操作成功信息。
在系統(tǒng)工作過程中,單片機(jī)接收到PC機(jī)數(shù)據(jù)信息后,便查找協(xié)議,完成相應(yīng)的操作。當(dāng)單片機(jī)接收到0xA1時,讀取P0端口數(shù)據(jù),并將讀取數(shù)據(jù)返回PC機(jī);當(dāng)單片機(jī)接收到0xA2時,單片機(jī)等待從PC機(jī)接收一段控制數(shù)據(jù);當(dāng)PC接收到0xA3時,就表明單片機(jī)操作已經(jīng)成功。
AT89C51是一種帶4K字節(jié)閃存可編程可擦除只讀存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機(jī)。AT89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲器的單片機(jī)。單片機(jī)的可擦除只讀存儲器可以反復(fù)擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。外形及引腳排列如圖所示:
管腳說明:VCC:供電電壓。GND:接地。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P0口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗時,P0輸出原碼,此時P0外部必須被拉高。 P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。   P3口也可作為AT89C51的一些特殊功能口,如下表所示:口管腳 備選功能   P3.0 RXD(串行輸入口) P3.1 TXD(串行輸出口) P3.2 /INT0(外部中斷0)   P3.3 /INT1(外部中斷1)  P3.4 T0(記時器0外部輸入)  P3.5 T1(記時器1外部輸入)  P3.6 /WR(外部數(shù)據(jù)存儲器寫選通)  P3.7 /RD(外部數(shù)據(jù)存儲器讀選通)  P3口同時為閃爍編程和編程校驗接收一些控制信號。 RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機(jī)器周期的高電平時間。 ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。 /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。/EA/VPP:當(dāng)/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。 XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。 振蕩器特性: XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅(qū)動器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證電平要求的。
四 、硬件設(shè)計
4.1單片機(jī)串行通信功能

1.001.jpg

圖4.1AT89C51

計算機(jī)與外界的信息交換稱為通信,常用的通信方式有兩種:并行通信和串行通信。51單片機(jī)用4個接口與外界進(jìn)行數(shù)據(jù)輸入與數(shù)據(jù)輸出就是并行通信,并行通信的特點是傳輸信號的速度快,但所用的信號線較多,成本高,傳輸?shù)木嚯x較近。串行通信的特點是只用兩條信號線(一條信號線,再加一條地線作為信號回路)即可完成通信,成本低,傳輸?shù)木嚯x較遠(yuǎn)。

51單片機(jī)的串行接口是一個全雙工的接口,它可以作為UART(通用異步接受和發(fā)送器)用,也可以作為同步移位寄存器用。51單片機(jī)串行接口的結(jié)構(gòu)如下:

(1)數(shù)據(jù)緩沖器(SBUF)

接受或發(fā)送的數(shù)據(jù)都要先送到SBUF緩存。有兩個,一個緩存,另一個接受,用同一直接地址99H,發(fā)送時用指令將數(shù)據(jù)送到SBUF即可啟動發(fā)送;接收時用指令將SBUF中接收到的數(shù)據(jù)取出。

(2)串行控制寄存器(PCON)

SCON用于串行通信方式的選擇,收發(fā)控制及狀態(tài)指示,各位含義如下:

SM0

SM1

SM2

REN

TB8

RB8

TI

RI


SM0,SM1:串行接口工作方式選擇位,這兩位組合成00,01,10,11對應(yīng)于工作方式0、1、2、3。串行接口工作方式特點見下表

SM0

SM1

工作方式

功能

波特率

0

0

0

8位同步移位寄存器(用于I/O擴(kuò)展)

fORC/12

0

1

1

10位異步串行通信(UART)

可變(T1溢出率*2SMOD/32)

1

0

2

11位異步串行通信(UART)

fORC/64或fORC/32

1

1

3

11位異步串行通信(UART)

可變(T1溢出率*2SMOD/32)

SM2:多機(jī)通信控制位。

REN:接收允許控制位。軟件置1允許接收;軟件置0禁止接收。

TB8:方式2或3時,TB8為要發(fā)送的第9位數(shù)據(jù),根據(jù)需要由軟件置1或清0。

RB9:在方式2或3時,RB8位接收到的第9位數(shù)據(jù),實際為主機(jī)發(fā)送的第9位數(shù)據(jù)TB8,使從機(jī)根據(jù)這一位來判斷主機(jī)發(fā)送的時呼叫地址還是要傳送的數(shù)據(jù)。

TI:發(fā)送中斷標(biāo)志。發(fā)送完一幀數(shù)據(jù)后由硬件自動置位,并申請中斷。必須要軟件清零后才能繼續(xù)發(fā)送。

RI:接收中斷標(biāo)志。接收完一幀數(shù)據(jù)后由硬件自動置位,并申請中斷。必須要軟件清零后才能繼續(xù)接收。

(3)輸入移位寄存器

接收的數(shù)據(jù)先串行進(jìn)入輸入移位寄存器,8位數(shù)據(jù)全移入后,再并行送入接收SBUF中。

(4)波特率發(fā)生器

波特率發(fā)生器用來控制串行通信的數(shù)據(jù)傳輸速率的,51系列單片機(jī)用定時器T1作為波特率發(fā)生器,T1設(shè)置在定時方式。波特率時用來表示串行通信數(shù)據(jù)傳輸快慢程度的物理量,定義為每秒鐘傳送的數(shù)據(jù)位數(shù)。

(5)電源控制寄存器PCON

其最高位為SMOD。

(6)波特率計算

當(dāng)定時器T1工作在定時方式的時候,定時器T1溢出率=(T1計數(shù)率)/(產(chǎn)生溢出所需機(jī)器周期)。由于是定時方式,T1計數(shù)率= fORC/12。產(chǎn)生溢出所需機(jī)器周期數(shù)=模M-計數(shù)初值X。

4.2 MAX232芯片

用8051串行接口通信,如果兩臺8051單片機(jī)之間的距離很近(不超過1.5m),可以采用直接將兩臺8051單片機(jī)的串行接口直接相連,利用其自身的TTL電平(0-5V)直接傳輸數(shù)據(jù)信息。如果傳輸距離較遠(yuǎn)(超過1.5m),由于傳輸線的阻抗與分布電容,會產(chǎn)生電平損耗和波形畸變,以至于檢測不出數(shù)據(jù)或數(shù)據(jù)出錯。此時可利用 RS232標(biāo)準(zhǔn)總線接口,將單片機(jī)輸出的TTL電平轉(zhuǎn)換為RS232標(biāo)準(zhǔn)電平(邏輯1為-15—-5V;邏輯0為+5-—+15V)。用RS232可將傳輸距離提高到15m,如果想遠(yuǎn)距離傳輸,可以采用RS422或者RS485。

              電平轉(zhuǎn)換芯片MAX232是美信公司(MAXIM)生產(chǎn),專用于進(jìn)行將TTL電平轉(zhuǎn)換為RS232電平的芯片,MAX232內(nèi)部有泵電源,能將+5V電源電壓在芯片內(nèi)提高到RS232電平所需的+10V或者-10V電平。

1.002.jpg
圖4.2.電平轉(zhuǎn)換芯片MAX232

4.3整體電路設(shè)計

最終設(shè)計電路如下圖3所示,發(fā)送方的數(shù)據(jù)由串行口TXD段輸出,經(jīng)過電平轉(zhuǎn)換芯片MAX232將TTL電平轉(zhuǎn)換為RS232電平輸出,經(jīng)過傳輸線將信號傳送到接收端。接收方也使用MAX232芯片進(jìn)行電平轉(zhuǎn)換后,信號到達(dá)接收方串行口的接收端。接受方接收后,通過P1口在數(shù)碼管上顯示接收的信息。

1.003.jpg

圖4.3.串行通信電路


五、軟件設(shè)計
通過通信協(xié)議進(jìn)行發(fā)送接收,主機(jī)先送AAH給從機(jī),當(dāng)從機(jī)接收到AAH后,向主機(jī)回答B(yǎng)BH。主機(jī)收到BBH后就把數(shù)碼表TAB[16]中的10個數(shù)據(jù)送給從機(jī),并發(fā)送檢驗和。從機(jī)收到16個數(shù)據(jù)并計算接收到數(shù)據(jù)的檢驗和,與主機(jī)發(fā)送來的檢驗和進(jìn)行比較,若檢驗和相同則發(fā)送00H給主機(jī);否則發(fā)送FFH給主機(jī),重新接受。從機(jī)收到16個正確數(shù)據(jù)后送到一個數(shù)碼管顯示。
5.1串行通信軟件實現(xiàn)
(1)串行口工作于方式1;用定時器1產(chǎn)生9600bit/s的波特率,工作于方式2。
(2)功能:將本機(jī)ROM中數(shù)碼表TAB[16]中的16個數(shù)發(fā)送到從機(jī),并保存在從機(jī)內(nèi)部ROM中,從機(jī)收到這16個數(shù)據(jù)后送到一個數(shù)碼管循環(huán)顯示。
(3)通信協(xié)議:主機(jī)首先發(fā)送連絡(luò)信號(AAH),從機(jī)接收到之后返回一個連絡(luò)信號(BBH)表示從機(jī)已準(zhǔn)備好接收。
(4)通信過程使用第九位發(fā)送奇偶校驗位。
(5)從機(jī)接收到一個數(shù)據(jù)后,立即進(jìn)行奇偶校驗,若數(shù)據(jù)沒有錯誤,則返回00H,否則返回FFH。
(6)主機(jī)發(fā)送一個數(shù)據(jù)后,等待從機(jī)返回數(shù)據(jù);若為00H,則繼續(xù)發(fā)送下一個數(shù)據(jù),若為FFH,則重新發(fā)送數(shù)據(jù)。
5.2程序流程圖
(1)發(fā)送端程序流程圖
1.004.jpg
接收方程序流程圖
1.005.jpg
六.聯(lián)合調(diào)試

在protues上進(jìn)行仿真實驗。首先使用KeilC將編寫完成的程序編譯生成HEX文件,將HEX文件燒錄到兩片單片機(jī)中,進(jìn)行仿真實驗,結(jié)果如下圖所示,可以看到,接收端已將接受到的數(shù)據(jù)完整的顯示了出來。

1.006.jpg

圖6.1.仿真圖

總結(jié)
本次設(shè)計是通過兩塊簡單的89C51單片機(jī)實現(xiàn)信息的串口通信。設(shè)計過程中,從雙機(jī)通信背景的了解,到89C51單片機(jī)具體功能的了解,與89C51單片機(jī)的區(qū)別;從串口通信的原理的熟悉,到掌握具體串口通信在雙機(jī)之間的實現(xiàn);從硬件電路設(shè)計到程序編寫;從硬件調(diào)試到軟件模擬實現(xiàn)等過程在自己的努力和老師的親切指導(dǎo)下,都是有條不紊地進(jìn)行。  設(shè)計中,收獲不少東西,也遇到了不少的問題。首先,在完成單片機(jī)課程學(xué)習(xí)任務(wù)后,對內(nèi)容的掌握不夠,缺乏靈活運用的能力,對于知識的擴(kuò)展也存在一定的問題,因此,初面對設(shè)計課題,無法系統(tǒng)地進(jìn)行設(shè)計思路的擬定。其次,一個學(xué)期的學(xué)習(xí),在鞏固和學(xué)習(xí)硬件知識的同時,用軟件控制協(xié)調(diào)硬件實現(xiàn)現(xiàn)實功能,通過硬件完成軟件的功能等方面的融會貫通,取得了一定的效果。再者,硬件設(shè)計過程中,I/O口的擴(kuò)展,外部ROM的擴(kuò)展,對于芯片的選擇,軟件編寫時,對于某些指令的功能,功能模塊的連接,芯片地址選擇等都遇到了很大的障礙,不過在老師幫助和自己查閱資料得到了解決,與此同時,了解了不少的問題。另外,設(shè)計中犯一些常識性的錯誤,對設(shè)計進(jìn)程造成了一定的影響。例如,程序調(diào)試時,由于粗心錄入程序時,將程序敲錯,比如將0(零)和字母O混淆,還有中文標(biāo)點符號和英文標(biāo)點符號混淆等。這樣的錯誤很難發(fā)現(xiàn),以至于花費了很多時間。
通過本次課程設(shè)計,不僅使理論知識得到了實踐,有效鞏固了知識。同時對于單片機(jī)發(fā)展歷史、強(qiáng)大功能、應(yīng)用領(lǐng)域以及系列知識得到了大概的系統(tǒng)認(rèn)識,同時也初步了解了一個完整的系統(tǒng)開發(fā)的過程,對于創(chuàng)造思維的培養(yǎng)和開發(fā)能力的鍛煉,本次設(shè)計,為此提供了一個很好的平臺。
當(dāng)然,同學(xué)之間的相互討論學(xué)習(xí),互相提高,老師知識的幫助,經(jīng)驗的傳授,也是本次設(shè)計的一道美麗的風(fēng)景線,真正起到了拋磚引玉的目的。在此,感謝老師給我們這樣好的學(xué)習(xí)機(jī)會。

參考文獻(xiàn)
[1] 胡偉. 單片機(jī)C程序設(shè)計及應(yīng)用實例. 北京:人民郵電出版社,2003
[2] 韓毅剛.計算機(jī)通信技術(shù). 北京市:北京航空航天大學(xué)出版社,2007
[3]  李朝青. 單片機(jī)與PC機(jī)網(wǎng)絡(luò)通信技術(shù).北京:北京航空航天大學(xué)出版社,2007  
[4] 郭惠  吳訊著 單片機(jī)C語言程序設(shè)計.北京:電子工業(yè)出版社,2008 [5] 陳濤著 單片機(jī)應(yīng)用及C51程序設(shè)計.北京:機(jī)械工業(yè)出版社,2011
[6] 孫近平 張大鵬著 51系列單片機(jī)原理、開發(fā)與應(yīng)用實例.北京:中國電力出版社,2009

附錄:

主機(jī)發(fā)送程
  1. #include
  2. #define uchar unsigned char            
  3. void init();
  4. void send();
  5. ucharTAB[16] ={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  6. uchar i,sum;
  7. int j;
  8. main()
  9. { init();
  10.   send();
  11.               }
  12. void init(void)
  13. { EA=1;
  14.   ES=1;
  15.   TMOD=0x20;
  16.   TH1=0xfd;
  17.   TL1=0xfd;
  18.   PCON=0x00;
  19.   SCON=0x50;
  20.   TR1=1;
  21.               }
  22. void send(void)
  23. {do
  24.               { SBUF=0xaa;
  25.                 while(!TI);
  26.                 TI=0;
  27.                 while(!RI);
  28.                 RI=0;
  29.                 }
  30.   while((SBUF^0xbb)!=0);
  31.               do
  32.               { sum=0;
  33.                 for(i=0;i<=15;i++)
  34.                 { SBUF=TAB[i];
  35.                   sum+=TAB[i];
  36.                             while(!TI);
  37.                             TI=0;
  38.                             }
  39.                             SBUF=sum;
  40.                             while(!TI);
  41.                             TI=0;
  42.                             while(!RI);
  43.                             RI=0;
  44.                             }
  45.                             while(SBUF!=0);
  46.                             }
復(fù)制代碼



從機(jī)接受程序:
  1. #include
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. void delay(int );
  5. void receive(void) ;
  6. void init(void);
  7. uchar i,sum;
  8. int j;
  9. ucharTAB[16] ={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  10. void main()
  11. { init();
  12.   receive();
  13.    }
  14. void init(void)
  15. { EA=1;
  16.   ES=1;
  17.   TMOD=0x20;
  18.   TH1=0xfd;
  19.   TL1=0xfd;
  20.   PCON=0x00;
  21.   SCON=0x50;
  22.   TR1=1;
  23.               }
  24. void delay(int x)
  25. {              int i,j;
  26.               for(i=0;i<x;i++)
  27.                             for(j=1;j<=150;j++ );
  28.                             }
  29. void receive(void)
  30. { uchar TABS[16];
  31.   do
  32.   { while(!RI);RI=0;  }
  33.      while((SBUF^0xaa)!=0);
  34.               SBUF=0xbb;
  35.               while(!TI);TI=0;
  36.               while(1)
  37.               { sum=0;
  38.                  for(i=0;i<=15;i++)
  39.                  { while(!RI);RI=0;
  40.                    TABS[i]=SBUF;
  41.                             sum+=TABS[i];
  42.                             }
  43.                             while(!RI);RI=0;
  44.                             if((SBUF^sum)==0)
  45.                             { SBUF=0x00;
  46.                                while(!TI);
  47.                                TI=0;
  48.                                break;
  49.                                }
  50.                                else
  51.                                { SBUF=0xff;
  52.                                  while(!TI);
  53.                                           TI=0;
  54.                                           }
  55.                                           }
  56.                                           while(1)
  57.                                           { for(i=0;i<=15;i++)


  58. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

完整論文下載(word格式 可編輯):
http://m.raoushi.com/bbs/dpj-86873-1.html


回復(fù)

使用道具 舉報

ID:282653 發(fā)表于 2018-5-30 08:51 | 顯示全部樓層
感謝樓主分享
回復(fù)

使用道具 舉報

ID:563070 發(fā)表于 2019-6-15 15:51 | 顯示全部樓層
樓主 您好硬件管腳如何連接
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表