畢業(yè)論文 計算機通信系統(tǒng)設計_第1頁
畢業(yè)論文 計算機通信系統(tǒng)設計_第2頁
畢業(yè)論文 計算機通信系統(tǒng)設計_第3頁
畢業(yè)論文 計算機通信系統(tǒng)設計_第4頁
畢業(yè)論文 計算機通信系統(tǒng)設計_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 目錄1 設計任務12 設計方案13硬件設計13.1 at89c51簡介13.2 max232芯片簡介43.3 串行通信電路54 軟件設計64.1 bios串行通信口功能64.2 單片機串行口控制寄存器及波特率的計算74.3 程序流程圖104.3.1 pc機部分程序流程圖104.3.2 單片機部分125 心得體會13參考文獻14附錄一15附錄二17 計算機通信系統(tǒng)設計1 設計任務1. 畫出簡要的硬件原理圖,編寫通信程序。 2. 程序運行后,實現(xiàn)pc機和單片機之間的串行通信。2 設計方案pc機與單片機之間最簡單的連接是零調制3線經(jīng)濟型,所謂三線就是指發(fā)送數(shù)據(jù)線txd、接收數(shù)據(jù)線rxd以及信號地線

2、gnd。連接時,雙方的地線直接相連,收發(fā)數(shù)據(jù)線交叉相連。這是進行全雙工通信所必需的最少數(shù)目的線路。由于單片機的輸入、輸出、均為ttl電平,而pc機配置的是rs-232標準串行接口,二者的電氣規(guī)范不一致,因此要完成pc機與單片機之間的串行通信,必須進行電平轉換。本次課程設計我們選用at89c51單片機,電平轉換芯片選用maxim公司生產(chǎn)的max232芯片。3硬件設計3.1 at89c51簡介at89c51是一種帶4k字節(jié)閃爍可編程可擦除只讀存儲器(fperomflash programmable and erasable read only memory)的低電壓,高性能cmos 8位微處理器,

3、俗稱單片機。at89c2051是一種帶2k字節(jié)閃爍可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復擦除100次。該器件采用atmel高密度非易失存儲器制造技術制造,與工業(yè)標準的mcs-51指令集和輸出管腳相兼容。由于將多功能8位cpu和閃爍存儲器組合在單個芯片中,atmel的at89c51是一種高效微控制器,at89c2051是它的一種精簡版本。at89c單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。以下是at89c51芯片的引腳圖: 圖3-1 at89c51引腳圖接下來對單片機個管教進行簡要說明:vcc:供電電壓。gnd:接地。p0口:p0口為一個8位漏級開路雙向

4、i/o口,每腳可吸收8ttl門電流。當p1口的管腳第一次寫1時,被定義為高阻輸入。p0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在fiash編程時,p0 口作為原碼輸入口,當fiash進行校驗時,p0輸出原碼,此時p0外部必須被拉高。p1口:p1口是一個內部提供上拉電阻的8位雙向i/o口,p1口緩沖器能接收輸出4ttl門電流。p1口管腳寫入1后,被內部上拉為高,可用作輸入,p1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在flash編程和校驗時,p1口作為第八位地址接收。 p2口:p2口為一個內部上拉電阻的8位雙向i/o口,p2口緩沖器可接收,輸出4個ttl

5、門電流,當p2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,p2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。p2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,p2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,p2口輸出其特殊功能寄存器的內容。p2口在flash編程和校驗時接收高八位地址信號和控制信號。p3口:p3口管腳是帶8個內部上拉電阻的雙向i/o口,可接收輸出4個ttl門電流。當p3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,p3口將輸出電流(il

6、l)這是由于上拉的緣故。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:復位輸入。當振蕩器復位器件時,要保持rst腳兩個機器周期的高電平時間。ale/prog:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的低位字節(jié)。在flash編程期間,此引

7、腳用于輸入編程脈沖。在平時,ale端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ale脈沖。如想禁止ale的輸出可在sfr8eh地址上置0。此時, ale只有在執(zhí)行movx,movc指令是ale才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ale禁止,置位無效。/psen:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/psen有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/psen信號將不出現(xiàn)。/ea/vpp:當/ea保持低電平時,則在此期間外部

8、程序存儲器(0000h-ffffh),不管是否有內部程序存儲器。注意加密方式1時,/ea將內部鎖定為reset;當/ea端保持高電平時,此間內部程序存儲器。在flash編程期間,此引腳也用于施加12v編程電源(vpp)。xtal1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。xtal2:來自反向振蕩器的輸出。3.2 max232芯片簡介max232芯片是maxim公司生產(chǎn)的、包含兩路接收器和驅動器的ic芯片,適用于各種eia232c和v.28/v.24的通信接口。max232芯片內部有一個電源電壓變換器,可以把輸入的+5v電源電壓變換成rs-232c輸出所需要的正負10v電壓。所以,采用此芯

9、片的接口串行通信系統(tǒng)只需要單一的+5v電源就可以了。 以下是max232芯片的引腳圖: 圖3-2max232引腳max232典型工作電路圖: 圖3-3 max232典型工作電路圖在max232工作電路中,電容c1、c2、c3、c4、以及v_、v+是電源變換電路部分。在實際應用中,期間對電源噪聲很敏感。因此,vcc必須要對地加去耦電容,其他電容同樣是用以提高抗干擾能力,在連接時必須盡量靠近器件。下半部分是發(fā)送和接收部分,實際應用中,和可直接接ttl/cmos點評的89c51單片機的串行發(fā)送端txd;和可直接接ttl/cmos電平的89c51單片機的串行接收端rxd;和可直接接pc機的rs-232

10、串口接收端rxd;和可直接接pc機的rs-232串口發(fā)送端txd.3.3 串行通信電路通過以上對at89c51和max232兩個芯片的介紹,接下來設計串行通信電路?,F(xiàn)從max232芯片中兩路發(fā)送接收中任選一路作為接口。應注意其發(fā)送、接受的引腳要對應。以下為接口電路圖: 圖3-4 pc機與單片機通信電路4 軟件設計編寫程序,實現(xiàn)單片機與pc機之間的串行通信。程序實現(xiàn)以下功能:單片機向pc機發(fā)送數(shù)據(jù),pc機接收后將接收到的數(shù)據(jù)反饋給單片機,由單片機檢測發(fā)送的數(shù)據(jù)是否正確,正確則繼續(xù)發(fā)送并由數(shù)碼管顯示該數(shù)字,否則重新發(fā)送,直至數(shù)據(jù)發(fā)送完畢。4.1 bios串行通信口功能pc機提供比較靈活的關于串行口

11、的bios中斷調用方法,即通過”int 14”調用rom bios串行通信口例行程序。該例行程序包括將串口初始化為指定的字節(jié)結構和傳輸速率,檢查控制器的狀態(tài)、讀寫字符等功能。下面介紹”int 14”中斷調用功能。1 初始化串行通信口(ah=0) 調用參數(shù):al=初始化參數(shù) dx=通信口號,0:com1, 2:com2 返回參數(shù):ah=通信口狀態(tài) al=調制解調器狀態(tài) 2 向串行通信口寫字符(ah=1) 輸入?yún)?shù):al=所寫字符 dx=通信口號,0:com1, 2:com2 輸出參數(shù):寫字符成功:ah.7=0,al=已寫入字符 寫字符失?。篴h.7=1,ah.06=通信口狀態(tài)3 從串行通信口讀字

12、符(ah=2) 輸入?yún)?shù):dx=通信口號,0:com1, 2:com2 輸出參數(shù):讀字符成功:ah.7=0,al=讀入字符 讀字符失?。篴h.7=1,ah.06=通信口狀態(tài)4 取通信口狀態(tài)(ah=3) 輸入?yún)?shù):dx=通信口號,0:com1, 2:com2 輸出參數(shù):ah=通信口狀態(tài) al=調制解調器狀態(tài) 4.2 單片機串行口控制寄存器及波特率的計算89c51串行通信的方式選擇、接收和發(fā)送控制以及串行口的狀態(tài)標志等均由特殊功能寄存器scon控制和指示。scon 串行口控制寄存器通常在芯片或設備中為了監(jiān)視或控制接口狀態(tài),都會引用到接口控制寄存器。scon 就是51 芯片的串行口控制寄存器。它的尋

13、址地址是98h,是一個可以位尋址的寄存器,作用就是監(jiān)視和控制51 芯片串行口的工作狀態(tài)。51 芯片的串口可以工作在幾個不同的工作模式下,其工作模式的設置就是使用scon 寄存器。它的各個位的具體定義如下:sm0 sm1 sm2 ren tb8 rb8 ti rism0、sm1 為串行口工作模式設置位,這樣兩位可以對應進行四種模式的設置。串行口工作模式設置。sm0 sm1 模式 功能 波特率 0 0 0 同步移位寄存器 fosc/12 0 1 1 8位uart 由定時器設置 1 0 2 9位uart fosc/32 或fosc/64 1 1 3 9位uart 由定時器設置在這里只說明最常用的模式

14、1,其它的模式也就一一略過。表中的fosc 代表振蕩器的頻率,也就是晶振的頻率。uart 為(universal asynchronous receiver)的英文縮寫。sm2: 在模式2、模式3 中為多處理機通信使能位。在模式0 中要求該位為0。ren: 為允許接收位,ren 置1 時串口允許接收,置0 時禁止接收。ren 是由軟件置位或清零。如果在一個電路中接收和發(fā)送引腳p3.0,p3.1 都和上位機相連,在軟件上有串口中斷處理程序,當要求在處理某個子程序時不允許串口被上位機來的控制字符產(chǎn)生中斷,那么可以在這個子程序的開始處加入ren=0 來禁止接收,在子程序結束處加入ren=1 再次打開

15、串口接收。tb8: 發(fā)送數(shù)據(jù)位8,在模式2 和3 是要發(fā)送的第9 位。該位可以用軟件根據(jù)需要置位或清除,通常這位在通信協(xié)議中做奇偶位,在多處理機通信中這一位則用于表示是地址幀還是數(shù)據(jù)幀。rb8: 接收數(shù)據(jù)位8,在模式2 和3 是已接收數(shù)據(jù)的第9 位。該位可能是奇偶位,地址/數(shù)據(jù)標識位。在模式0 中,rb8 為保留位沒有被使用。在模式1 中,當sm2=0,rb8 是已接收數(shù)據(jù)的停止位。ti: 發(fā)送中斷標識位。在模式0,發(fā)送完第8 位數(shù)據(jù)時,由硬件置位。其它模式中則是在發(fā)送停止位之初,由硬件置位。ti 置位后,申請中斷,cpu 響應中斷后,發(fā)送下一幀數(shù)據(jù)。在任何模式下,ti 都必須由軟件來清除,也

16、就是說在數(shù)據(jù)寫入到sbuf 后,硬件發(fā)送數(shù)據(jù),中斷響應(如中斷打開),這時ti=1,表明發(fā)送已完成,ti 不會由硬件清除,所以這時必須用軟件對其清零。ri: 接收中斷標識位。在模式0,接收第8 位結束時,由硬件置位。其它模式中則是在接收停止位的半中間,由硬件置位。ri=1,申請中斷,要求cpu 取走數(shù)據(jù)。但在模式1 中,sm2=1時,當未收到有效的停止位,則不會對ri 置位。同樣ri 也必須要靠軟件清除。常用的串口模式1 是傳輸10 個位的,1 位起始位為0,8 位數(shù)據(jù)位,低位在先,1 位停止位為1。它的波特率是可變的,其速率是取決于定時器1 或定時器2 的定時值(溢出速率)。at89c51

17、和at89c2051 等51 系列芯片只有兩個定時器,定時器0 和定時器1,而定時器2是89c52 系列芯片才有的。波特率:在使用串口做通訊時,一個很重要的參數(shù)就是波特率,只有上下位機的波特率一樣時才可以進行正常通訊。波特率是指串行端口每秒內可以傳輸?shù)牟ㄌ匚粩?shù)。如果波特率為9600,它是指每秒可以傳送9600 個二進位,而一個字節(jié)要8 個二進位,如用串口模式1 來傳輸那么加上起始位和停止位,每個數(shù)據(jù)字節(jié)就要占用10 個二進位,9600 波特率用模式1 傳輸時,每秒傳輸?shù)淖止?jié)數(shù)是960010960 字節(jié)。51 芯片的串口工作模式0的波特率是固定的,為fosc/12,以一個12m 的晶振來計算,那

18、么它的波特率可以達到1m。模式2 的波特率是固定在fosc/64 或fosc/32,具體用那一種就取決于pcon 寄存器中的smod位,如smod 為0,波特率為focs/64,smod 為1,波特率為focs/32。模式1 和模式3 的波特率是可變的,取決于定時器1 或2(52 芯片)的溢出速率。那么我們怎么去計算這兩個模式的波特率設置時相關的寄存器的值呢?可以用以下的公式去計算。波特率(32)定時器1 溢出速率上式中如設置了pcon 寄存器中的smod 位為1 時就可以把波特率提升2 倍。通常會使用定時器1 工作在定時器工作模式2 下,這時定時值中的tl1 做為計數(shù),th1 做為自動重裝值

19、 ,這個定時模式下,定時器溢出后,th1 的值會自動裝載到tl1,再次開始計數(shù),這樣可以不用軟件去干預,使得定時更準確。在這個定時模式2 下定時器1 溢出速率的計算公式如下:溢出速率(計數(shù)速率)/(256th1)上式中的“計數(shù)速率”與所使用的晶體振蕩器頻率有關,在51 芯片中定時器啟動后會在每一個機器周期使定時寄存器th 的值增加一,一個機器周期等于十二個振蕩周期,所以可以得知51 芯片的計數(shù)速率為晶體振蕩器頻率的1/12,一個12m 的晶振用在51 芯片上,那么51 的計數(shù)速率就為1m。通常用11.0592m 晶體是為了得到標準的無誤差的波特率,那么為何呢?計算一下就知道了。如我們要得到96

20、00 的波特率,晶振為11.0592m 和12m,定時器1 為模式2,smod 設為1,分別看看那所要求的th1 為何值。代入公式:11.0592m9600(232)(11.0592m/12)/(256-th1)th125012m9600(232)(12m/12)/(256-th1)th1249.49上面的計算可以看出使用12m 晶體的時候計算出來的th1 不為整數(shù),而th1 的值只能取整數(shù),這樣它就會有一定的誤差存在不能產(chǎn)生精確的9600 波特率。當然一定的誤差是可以在使用中被接受的,就算使用11.0592m 的晶體振蕩器也會因晶體本身所存在的誤差使波特率產(chǎn)生誤差,但晶體本身的誤差對波特率的

21、影響是十分之小的,可以忽略不計。4.3 程序流程圖4.3.1 pc機部分程序流程圖 開始串口初始化接收字符數(shù)據(jù)是否就緒 ?接收成功?取回發(fā)送保持器是否空?發(fā)送字符是否成功nynynyny接收完畢?結束n 圖3-5 pc機通信程序流程圖4.3.2 單片機部分 開始 串口初始化n發(fā)送出錯結束發(fā)送完畢?重新發(fā)送是否正確?發(fā)送數(shù)據(jù) 等待反饋數(shù)據(jù)nyy 圖3-6 單片機通信程序流程圖5 心得體會這學期學習了微機原理與接口技術,接觸匯編語言,開始對其有一定的了解,以前編寫程序用的都是c語言,基本上不涉及硬件方面的東西,而匯編語言則不同,它需要對硬件電路有一定的了解,這樣在學習匯編語言的時候,就需注意硬件方

22、面的知識的掌握。本次課程設計我所做的題目是實現(xiàn)單片機與pc機之間的串行通信,對于這個題目,在微機原理與接口技術這門課程里曾學過關于pc機的串行通信的知識,而對于單片機,在以前也曾經(jīng)自學過,所以最初看到這個題目的時候,并沒有感到無從下手,接下來需要做的事情就是通過查找資料確定硬件電路,然后再通過硬件電路編寫實現(xiàn)功能的程序。通過查找資料,最終確定下來硬件電路圖,進而根據(jù)要求編寫程序。由于對此類題目以前沒有做過,所以本次課程設計,無論是硬件電路方面,還是軟件方面,難免會有些不足之處,比如硬件電路可以嘗試其他的實現(xiàn)方法,而軟件方面,則可以修改程序使其實現(xiàn)更加復雜的功能等。雖然如此,通過此次課程設計還是

23、感覺獲益匪淺,首先是對匯編語言和微機的串行通信知識有了進一步的了解和鞏固,為以后更加系統(tǒng)的學習和應用奠定了一定的基礎;其次是對單片機知識有了很好的認識,以前只是很粗淺的學習了單片機,經(jīng)過這幾天的學習和應用,有了很大程度的提高;最后一點就是提高了自己分析和解決問題的能力,面對我們未知的問題,我們應該知道如何下手,如何解決??傊ㄟ^此次課程設計,讓我收獲了很多。參考文獻1 周佩玲. 微機原理與接口技術.電子工業(yè)出版社,20052 周堅. 單片機c語言輕松入門.北京航空航天大學出版社,20063 李朝青. 單片機原理及接口技術(第三版). 北京航空航天大學出版社,20054 潘超群. 單片機控制技

24、術在通信中的應用-mcs-51系列.電子工業(yè)出版社,20085 程學先. 匯編語言程序設計.武漢理工大學出版社,2002附錄一pc機通信程序: data segment rbuf db 10 dup(0) count db 10 data ends code segment assume cs:code,ds:data,start proc far push ds push axmov ax,datamov ds,axlea di ,rbuf ;置接收數(shù)據(jù)塊首地址mov cl,count ;置接收數(shù)據(jù)塊長度mov ah,00h ;0號功能 mov al,0e3h ;串口初始化:波特率9600,

25、無校驗,1位停止位,8位數(shù)據(jù)位mov dx,00h ;指定com1端口int 14hrept1:mov ah,02h ;2號功能:接收字符mov dx,00h ;指定com1端口int 14h ;出口參數(shù):al中為接收到的參數(shù),ah中為線路狀態(tài)mov bx,ax ;ax中的內容暫存于bx中mov al,ah ;取線路狀態(tài)至altest al,80h ;接收是否成功(d7=0?) jnz rept1 ;不成功,重接test al,01h ;數(shù)據(jù)是否準備就緒jnz rept1 ;未就緒,重接mov al,bl ;就緒,取回字符mov di,al ;保存inc di ;指向下一個地址單元rept2:

26、mov ah,03h ;3號功能檢查串口狀態(tài)mov dx,00h ;指定com1端口int 14hmov al,ah ;取線路狀態(tài)至altest al,20h ;發(fā)送保持器是否空(d5=1?)jz rept2rept3:mov al,bl ;將接收到的字符存至almov ah,01h ;1號功能:發(fā)送字符mov dx,00h ;指定com1端口int 14hmov al,ah ;取線路狀態(tài)至altest al,80h ;發(fā)送是否成功(d7=0?) jnz rept3 ;不成功,重發(fā)loop rept1 ;數(shù)據(jù)是否接收完畢?未完,繼續(xù)pop dspop axcode endsend start附錄二單片機通信程序:#include#include#define uchar unsigned c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論