版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計</b></p><p> 設(shè)計題目:串行通信系統(tǒng) </p><p> 專 業(yè) 網(wǎng)絡(luò)工程 </p><p> 設(shè)計時間 2/6/7--2/6/13 </p><p> 目錄 </p><p><b&g
2、t; 一、概述</b></p><p><b> 1.1 設(shè)計背景</b></p><p><b> 1.2設(shè)計要求</b></p><p> 1.3 設(shè)計方案的討論與選擇</p><p><b> 二、概要設(shè)計</b></p><p&
3、gt;<b> 2.1所用設(shè)備</b></p><p><b> 2.2設(shè)計思想</b></p><p> 2.3電路原理與主要心片功能</p><p> 2.3.1 8251主要功能</p><p> 2.3.2 8279主要功能</p><p> 2.3.3
4、8253主要功能</p><p><b> 詳細設(shè)計</b></p><p> 3.1顯示模塊的實現(xiàn)</p><p> 3.2發(fā)送模塊與接收模塊</p><p> 3.3發(fā)送/接收時鐘</p><p><b> 3.4主程序流程圖</b></p>&l
5、t;p><b> 四、接口電路邏輯圖</b></p><p><b> 五、調(diào)試記錄</b></p><p> 六、課程設(shè)計記錄日志</p><p><b> 七、總結(jié)體會</b></p><p> 八、附錄(程序清單)</p><p>
6、<b> 一、概述</b></p><p><b> 1.1 設(shè)計背景</b></p><p> 1).計算機之間以及計算機與一些常用的外部設(shè)備之間的數(shù)據(jù)交換,往往需要采用串行通信的方式。在計算機遠程通信中,串行通信更是一種不可缺少的通信方式。 在并行通信中,數(shù)據(jù)有多少位就要有多少根傳輸線,而串行通信中只需要一條傳輸線,所以串行通信可以節(jié)省
7、傳送線,在位數(shù)較多,傳輸距離較長的情況下,這個優(yōu)點更為突出,但串行通信的速度比并行通信低。2).串行通信中數(shù)據(jù)的傳送模式 在串行通信中,數(shù)據(jù)通常在兩個站(如A和B)之間進行傳送。串行通信可分為單工通信模式、半雙工通信模式和全雙工通信模式。 (1) 單工(Simplex)通信模式:該模式僅能進行一個方向的數(shù)據(jù)傳送,數(shù)據(jù)只能從發(fā)送器A發(fā)送到接收器B。 (2) 半雙工(Half Duplex)通信模式:該模式能夠在設(shè)備A和設(shè)備B之間交
8、替地進行雙向數(shù)據(jù)傳送。即數(shù)據(jù)可以在一個時刻從設(shè)備A傳送到設(shè)備B,而另一時刻可以從設(shè)備B傳送到設(shè)備A,但不能同時進行。 (3) 全雙工(Full Duplex)通信模式:該模式設(shè)備A或B均能在發(fā)送的同時接收數(shù)據(jù)。</p><p><b> 1.2設(shè)計要求</b></p><p> 利用8251或8250完成兩臺計算機之間的數(shù)據(jù)傳送。</p><
9、p> 1.3 設(shè)計方案的討論與選擇</p><p> 方案一:兩臺計算機通信時,接收結(jié)果只在計算機的屏幕上顯示所接收到的數(shù)據(jù)。</p><p> 方案二:兩臺計算機通信時,接收結(jié)果可以在試驗箱上顯示所接收到的數(shù)據(jù)。</p><p><b> 初步討論結(jié)果:</b></p><p> 在屏幕上顯示比較簡單,
10、但是不直觀,為了方便查看發(fā)送的數(shù)據(jù),就選擇方案二。</p><p><b> 二、概要設(shè)計</b></p><p><b> 2.1所用設(shè)備</b></p><p><b> ?。?)計算機兩臺</b></p><p> 功能:用于對程序的進行編譯測試等,同時還需要對實驗
11、設(shè)備進 行控制,提供整個程序的運行平臺,并且收集和釋放硬件信號,實現(xiàn)程序功能。</p><p><b> ?。?)實驗箱兩臺</b></p><p> 功能:此設(shè)備必須能提供我們小組做的串行通信所需的8253、8279和8251三個芯片。并且能通過接受PC機傳來的信息,顯示出相應的功能以實現(xiàn)通信。</p><p><b>
12、(3)導線若干條</b></p><p> 功能:用于電路和芯片之間的連接。</p><p><b> 2.2設(shè)計思想</b></p><p> 這次的課程設(shè)計我們小組選用的是8251、8253、8279這三個芯片來實現(xiàn),我們選用的是一個單工的異步串行通信,也就是說一方發(fā)送一方接收。</p><p>
13、 發(fā)送方:先初始化8279、8251、8253芯片,檢測是否發(fā)送數(shù)據(jù),若TxRDY為1,則發(fā)送數(shù)據(jù),用CX來控制要發(fā)送的個數(shù),到CX為0時結(jié)束發(fā)送。</p><p> 接收方:先初始化8279、8251、8253芯片,檢測是否接收數(shù)據(jù),若RxRDY為1,則接收數(shù)據(jù),用CX來控制要接收的個數(shù),到CX為0時結(jié)束接收。</p><p> 2.3電路原理與主要心片功能</p>&
14、lt;p><b> 8251A芯片</b></p><p> 8251A是一種可編程的同步/異步串行通信接口芯片, 具有獨立的接收器和發(fā)送器,能實現(xiàn)單工、 半雙工、雙工通信。</p><p> 由于近距離傳輸,所以可以不用MODEM,而直接互連。同時采用查詢方式,故接收/發(fā)送程序中只需檢查發(fā)送/接收的準備好狀態(tài)是否置位,在準備好時就發(fā)送或接收一個字節(jié)。&l
15、t;/p><p> (1)在實驗過程中,數(shù)據(jù)通信的基本方式可分為并行通信與串行通行,而我們的實驗正是采用了串行通行方式,這種方式通信線路簡單,利用線路就可實現(xiàn)通信,這樣實驗易于實現(xiàn)并且降低了成本,而且適合遠距離通信。</p><p> (2)實驗中用到的8251A就是一個可編程的通用串行通信接口芯片,在使用時必須對它進行初始化編程。編程的內(nèi)容包括兩大方面:一是由CPU發(fā)出的控制字,即方式選
16、擇控制字和操作命令控制字;另一方面是由8251A向CPU送出的狀態(tài)字。</p><p> ① 8251A的方式控制字和命令控制字</p><p> 方式控制字確定8251A的通信方式(同步/異步)、校驗方式(奇校/偶校/不校)、字符長度及波特率等,格式如下圖5-16所示。命令控制字使8251A處于規(guī)定的狀態(tài)以準備收發(fā)數(shù)據(jù),格式如下圖。方式控制字和命令控制字無獨立的端口地址,8251A
17、根據(jù)寫入的次序來區(qū)分。CPU對8251A初始化時先寫方式控制字,后寫命令控制字。</p><p> 方式選擇控制字的格式如圖所示。</p><p> 操作命令控制字的格式如下:</p><p><b> ?、?狀態(tài)寄存器</b></p><p> 狀態(tài)寄存器用于寄存8251A的狀態(tài)信息,供CPU查詢。各位定義如下:
18、</p><p> TXRDY位:當數(shù)據(jù)緩沖器空時置位,而TXRDY引腳只有當條件( 數(shù)據(jù)緩沖器空· /CTS·TXE)成立時才置位。</p><p> 溢出錯誤:CPU沒讀走前一個字符,下一個字符又接收到,稱為溢出錯誤。</p><p> 幀錯誤:在字符結(jié)尾沒檢測到停止位,稱為幀錯誤。</p><p><b&
19、gt; 狀態(tài)字的格式如下:</b></p><p><b> 狀態(tài)字的格式</b></p><p> 8251A 內(nèi)部數(shù)據(jù)總線圖</p><p><b> 8279芯片</b></p><p> 8279芯片是一種專用于鍵盤/顯示器的接口器件,它能對顯示器自動掃描,能識別鍵盤上
20、閉合的鍵號,提高CPU的工作效率。8279包括鍵盤輸入和顯示輸出兩個部分。鍵盤部分提供的掃描方式可以和64個按鍵或傳感器陣列相連;能自動消除開關(guān)抖動以及對N鍵同時按下采取保護。顯示部分按掃描方式工作,可以顯示8或16位LED數(shù)碼管顯示器。</p><p> ?。?)8279的引腳功能</p><p> DB0-DB7:雙向數(shù)據(jù)總線,用于在CPU和8279之間傳</p>&l
21、t;p> 送命令、數(shù)據(jù)和狀態(tài);</p><p> CLK:時釧輸入線,用于產(chǎn)生內(nèi)部定時;</p><p> RESET:復位輸入線,復位后,8279被置為以下工作方式:16顯示左邊輸入,編碼掃描鍵盤雙鍵封鎖,時鐘系數(shù)為31;</p><p> CS:選片信號輸入線,低電平時CPU選中8279,允許對8279進行讀寫操作;</p><
22、p> A0:緩沖器地址輸入線,高電平時數(shù)據(jù)線上傳送的是命令或狀態(tài)信息,低電平時數(shù)據(jù)線上傳送的是數(shù)據(jù)信息;</p><p> RD:讀信號輸入線,低電平有效,8279內(nèi)部緩沖器信息送DB0-7;</p><p> WR:寫信號輸入線,低電平有效,接收數(shù)據(jù)總線DB0-7上的信息寫入內(nèi)部緩沖器;</p><p> IRQ:中斷請示輸出線,高電平有效。在鍵盤工
23、作方式中,F(xiàn)IFO RAM中有鍵輸入數(shù)據(jù)時,IRQ上升為高電平,向CPU請求中斷,CPU每次讀出FIFO RAM數(shù)據(jù)時,IRQ上升為高電平,向CPU請求中斷,CPU每次讀出FIFO RAM數(shù)據(jù)時,IRQ變?yōu)榈碗娖?,若RAM中還有數(shù)據(jù),IRQ在讀出后又返回高電平,直至FIFO中的所有數(shù)據(jù)被讀完IRQ才保持低電平。在傳感器方式中,每當檢查到傳感器信號變化時IRQ上升為高電平;</p><p> SL0-SL3:掃描
24、輸出線,用以對鍵盤/傳感器矩陣和顯示器進行掃描;</p><p> RL0-RL7:數(shù)據(jù)輸入線,鍵盤/傳感器矩陣的行(或行號)數(shù)據(jù)輸入線。該輸入線內(nèi)部有提高電路,使之保持高電平,也可以由外部開關(guān)拉成低電平;</p><p> SHIFT:換檔輸入線,在鍵掃描中,閉合鍵的位置信息(行和列號)與換檔輸入線的狀態(tài)一起存入FIFO,使鍵盤上的每個鍵可以定義為上、下兩檔功能;</p>
25、<p> CNTL/STB:控制/選通輸入線,在鍵盤方式中,作為控制輸入線,它的狀態(tài)和鍵輸入信息一起存儲到FIFO中。在選通工作方式中,作為數(shù)據(jù)送入FIFO的選通輸入線。</p><p> OUTA0~OUTA3:四位輸出口;</p><p> OUTB0~OUTB3:四位輸出口;</p><p> BD:顯示消隱輸出線,低電平有效,該輸出線在
26、數(shù)字切換過程中或使用顯示器熄滅命令使顯示器消隱;</p><p><b> Vcc:電源;</b></p><p><b> Vss:地。</b></p><p> ?。?)8279的內(nèi)部結(jié)構(gòu)與工作原理</p><p> 8279的內(nèi)部結(jié)構(gòu)主要由I/O控制及數(shù)據(jù)緩沖器、控制與定時寄存器及定時控
27、制、掃描計數(shù)器、輸入緩沖器、鍵盤去抖及控制、FIFO/傳感器及其狀態(tài)寄存器、顯示RAM和顯示地址寄存器組成。</p><p> I/O控制及數(shù)據(jù)緩沖器</p><p> 雙向的三態(tài)數(shù)據(jù)緩沖器將內(nèi)部總線和外部系統(tǒng)的數(shù)據(jù)總線DB0-DB7相連,用于在CPU和8279之間傳送命令、數(shù)據(jù)和狀態(tài)信息。I/O控制電路以CS、A0、RD、WR線上輸入信號控制總線上信息的傳送,即對內(nèi)部不同的寄存器和緩
28、沖器進行讀或?qū)憽?lt;/p><p> CS為片選輸入線,為低電平有效。當該引腳上為低電平時允許CPU對其進行讀寫,一般接系統(tǒng)的地址譯碼器。</p><p> AO為信息屬性選擇線,用來指出所傳送的信息是命令/狀態(tài),還是數(shù)據(jù),A0為邏輯1時,CPU寫入8279的信息是控制命令,從8279讀出的狀態(tài)字節(jié);A0為邏輯0時,讀出和定入的信息都是數(shù)據(jù)。A0通常接系統(tǒng)的地址總線低位。</p&g
29、t;<p><b> 時序控制邏輯</b></p><p> 控制和時序寄存器用于存放鍵盤和顯示器的工作方式和其他狀態(tài)信息。時序和控制部件包含了定時計數(shù)器,其中一個計數(shù)據(jù)是N分頻器,分頻系數(shù)可以編程為2-31之間的任何一個數(shù),對CLK上輸入的時鐘脈沖信號進行N分頻,以產(chǎn)生基本的100KHz的內(nèi)部計數(shù)信號(此時掃描時間為5.1ms,去抖動時間為10.3ms),共它計數(shù)器將10
30、0KHz信號再分頻,以提供適當?shù)逆I盤矩陣掃描和顯示器掃描的時間。</p><p><b> 掃描計數(shù)器</b></p><p> 掃描計數(shù)器有兩種工作方式,一種是編碼工作方式,計數(shù)器以二進制方式計數(shù),4位計數(shù)的狀態(tài)直接從掃描線SL0-SL3上輸出,必須由外部譯碼對SL0-SL3進行譯碼,以產(chǎn)生對鍵盤和顯示器的掃描信號,另一種是譯碼工作方式,對計數(shù)器的低兩位進行譯碼
31、后從SL0-SL3上輸出,作為4×8鍵盤和4位顯示器的掃描信號,因此在譯碼方式中只有顯示RAM的前4個字符被顯示出來。編碼方或掃描出高電平有效,譯碼方式中掃描輸出線低電平有效。</p><p><b> 8253芯片</b></p><p> 計算機系統(tǒng)中,實現(xiàn)定時或延時有三種方法:軟件定時、不可編程的硬件定時、可編程的硬件定時器。8253為可編程的硬件
32、定時/計數(shù)器。</p><p><b> 1. 主要功能</b></p><p> * 具有3個獨立的16位計數(shù)器通道;</p><p> * 每個計數(shù)器均可按二進制或二—十進制計數(shù);</p><p> * 每個計數(shù)器的計數(shù)速率高達2MHz;</p><p> * 每個通道有6種工作方
33、式,可由程序設(shè)置和改變;</p><p> * 所有的輸入輸出都與TTL兼容。</p><p><b> 8253內(nèi)部結(jié)構(gòu)圖</b></p><p><b> 3、8253控制字</b></p><p> 在8253的初始化編程中,由CPU向8253的控制字寄存器寫入一個控制字來規(guī)定825
34、3的工作方式。</p><p> 4、8253還有5種工作方式</p><p> 方式0——計數(shù)結(jié)束中</p><p> 方式1——可重復觸發(fā)的單穩(wěn)態(tài)觸發(fā)器</p><p> 方式2——頻率發(fā)生器</p><p> 方式3——方波發(fā)生器</p><p> 方式4(軟件觸發(fā)選通)<
35、;/p><p> 方式5(硬件觸發(fā)選通)</p><p><b> 三、詳細設(shè)計</b></p><p> 3.1顯示模塊的實現(xiàn)</p><p> 使用8279控制,用數(shù)碼管的顯示功能來設(shè)計,顯示部分用八只LED為顯示管,這些LED發(fā)光二極管的陰極是互相連接在一起的,所以稱為共陰極數(shù)碼管。通過在這八只發(fā)光二極管的陽極
36、加+5V或0V的電壓使不同的二極管發(fā)光,形成不同的字符和數(shù)字。</p><p><b> 具體代碼如下:</b></p><p><b> push cx</b></p><p><b> mov ch,al</b></p><p><b> mov cl,4
37、</b></p><p> ror al,cl </p><p> and al,0fh ;將al的高4位,移動到低4位 </p><p><b> push ax</b></p><p> mov dx,z8279</p><p> mov al,8
38、1h </p><p> out dx,al ; 將81h </p><p><b> pop ax</b></p><p> lea bx,led</p><p><b> xlat</b></p><p> mov dx,d8279
39、;顯示轉(zhuǎn)換結(jié)果高4位</p><p><b> out dx,al</b></p><p> call delay</p><p><b> mov al,ch</b></p><p> and al,0fh</p><p><b> push ax<
40、;/b></p><p> mov dx,z8279</p><p> mov al,80h</p><p><b> out dx,al</b></p><p><b> pop ax</b></p><p> lea bx,led</p>&
41、lt;p><b> xlat</b></p><p> mov dx,d8279;顯示轉(zhuǎn)換結(jié)果低4位</p><p><b> out dx,al</b></p><p> call delay</p><p><b> pop cx</b></p&g
42、t;<p> 3.2 發(fā)送與接收模塊</p><p> 該模塊是用8251的芯片實現(xiàn)的,通過檢測是否TxTDY和RxRDY是否為1,檢測發(fā)送和接收數(shù)據(jù),代碼如下:</p><p><b> 發(fā)送方: </b></p><p><b> mov cx,13</b></p><
43、p> next: mov dx,209h</p><p><b> in al,dx</b></p><p> test al,01h ;TxRDY?</p><p><b> jz next</b></p><p> mov al,[si] </p><
44、;p> out dx,al ;逐個發(fā)送數(shù)據(jù)</p><p><b> inc si</b></p><p><b> Loop next</b></p><p><b> 接收方:</b></p><p> mov di,offset dat2&l
45、t;/p><p><b> xor cx,cx</b></p><p><b> mov cx,15</b></p><p> next:mov dx,209h</p><p><b> in al,dx</b></p><p> test a
46、l,02h ;RxRDY?</p><p><b> jz next</b></p><p> mov dx,208h</p><p> in al,dx ;逐個接收數(shù)據(jù)</p><p> mov [di],al</p><p><b> inc di </
47、b></p><p> 3.3發(fā)送/接收時鐘</p><p> 在異步串行通信中,發(fā)送端需要用一定的頻率時鐘來決定每一位數(shù)據(jù)發(fā)送所占的時間長度,接收端也要用一定的頻率時鐘來測定每一位輸入數(shù)據(jù)的時間長度,TxCLK和RxCLK一起接在8253的OUT1的引腳,8253的CS接200H~207H,將其計數(shù)器1設(shè)置在計數(shù)方式3,使其對1MHz的輸入脈沖52分頻,這樣OUT1會輸出19.
48、2KHz的脈沖,再取波特率因子為16,最后獲得的串行通信波特率為1200bps。</p><p><b> 3.4主程序流程圖</b></p><p><b> 四、接口電路邏輯圖</b></p><p><b> 電路邏輯圖:</b></p><p><b>
49、 調(diào)試記錄</b></p><p> 為方便查看接收的數(shù)據(jù)將Rbuf db 7 dup(?) 改為Rbuf db 7 dup(1) ,這樣在代碼的代碼段窗口可以看到該區(qū)的7個1即可以判斷在程序運行后Rbuf應該顯示接收11,22,33,44,55,66,77,這7個數(shù)據(jù)。</p><p> 按F8單步運行,先讓接收端運行到允許部分,在運行發(fā)送端,先在發(fā)送端觀察到了AX寄
50、存器的值11,繼續(xù)在發(fā)送端單步運行,在接收端可以觀察到了相應接收的數(shù)據(jù)11,22,33,44,55,66,77。</p><p> 3、在程序運行過程中經(jīng)過單步運行,發(fā)現(xiàn)卡在了讀取數(shù)據(jù)計數(shù)值CX處,mov cx,count,而CX是由equ語句獲得count equ $-dat。就刪了直接將cx賦值7,即為要發(fā)送的數(shù)據(jù)個數(shù)。</p><p> 4、在優(yōu)化程序時,發(fā)現(xiàn)先全速運行接收方,時
51、間間隔不長的情況下,全速運行發(fā)送方可以觀察到發(fā)送方發(fā)送的數(shù)據(jù),而間隔比較長時間時就接收不到發(fā)送發(fā)送的數(shù)據(jù)。接著就用F8單步運行,發(fā)現(xiàn)發(fā)送方卡在了測試接收數(shù)據(jù)的階段,修改前的代碼如下:</p><p><b> 發(fā)送方:</b></p><p> lea si,dat</p><p> lea di,dat1</p><
52、p> AA: mov dx,209h</p><p><b> in al,dx</b></p><p> test al,01h ;TxRDY?</p><p> jz next </p><p> mov al,[si]</p><
53、;p> out dx,al ;發(fā)送1</p><p> mov dx,209h</p><p><b> in al,dx</b></p><p> test al,02h</p><p><b> jz AA</b></p><p> mov dx,
54、208h </p><p><b> in al,dx</b></p><p> mov [di],al ;接收1</p><p><b> xor bl,bl</b></p><p> mov bl,[di]</p><p><b> c
55、mp bl,1h</b></p><p><b> jne AA</b></p><p> mov dx,209h</p><p><b> in al,dx</b></p><p> test al,01h ;TxRDY?</p><p> j
56、z next ;發(fā)送1</p><p> mov al,[si]</p><p><b> out dx,al</b></p><p><b> 接收方:</b></p><p> lea si,dat</p><p> lea di,dat1</p&
57、gt;<p> AA: mov dx,209h</p><p><b> in al,dx</b></p><p> test al,01h ;TxRDY?</p><p> jz next </p><p> mov al,[si]</
58、p><p> out dx,al ;發(fā)送1</p><p> mov dx,209h</p><p><b> in al,dx</b></p><p> test al,02h</p><p><b> jz AA</b></p><p>
59、; mov dx,208h </p><p><b> in al,dx</b></p><p> mov [di],al ;接收1</p><p><b> xor bl,bl</b></p><p> mov bl,[di]</p><p>&l
60、t;b> cmp bl,1h</b></p><p><b> jne AA</b></p><p> mov dx,209h</p><p><b> in al,dx</b></p><p> test al,01h ;TxRDY?</p>&l
61、t;p> jz next ;發(fā)送1</p><p> mov al,[si]</p><p><b> out dx,al</b></p><p> 兩處的代碼都是一樣的,運行發(fā)送方的話,在檢測接收的情況下,又不斷的發(fā)送數(shù)據(jù),導致了接收方接收的數(shù)據(jù)不正確,先運行接收方也是一樣的情況。改進如下:</p><
62、;p> AA: mov dx,209h</p><p><b> in al,dx</b></p><p> test al,01h ;TxRDY?</p><p> jz next </p><p> mov al,[si]</p>&
63、lt;p> out dx,al ;發(fā)送1</p><p> BB:mov dx,209h</p><p><b> in al,dx</b></p><p> test al,02h</p><p><b> jz BB</b></p><p> 將
64、這里的檢測接收代碼段標為BB,狀態(tài)還沒準備好時跳到該階段,而不是AA這個發(fā)送的階段。</p><p><b> 課程設(shè)計記錄日志</b></p><p> 2012/6/7:由于該實驗在之前做過類似的,在用自己編寫的程序多次不成功的情況下,可能是實驗箱的問題,也可能是程序問題,沒有找到原因的情況下,然后決定用老師之前給的程序,做自發(fā)自收的,修改了一些相關(guān)數(shù)據(jù)之后用
65、單步運行,具體如下:</p><p> Rbuf db 7 dup(?) 改為Rbuf db 7 dup(1) </p><p> 這樣在代碼的數(shù)據(jù)段窗口可以看到Rbuf 區(qū)的7個1即可以判斷在程序運行后Rbuf應該顯示接收的11,22,33,44,55,66,77,,但是做了很多次,結(jié)果還是失敗了,原因很多,得一步一步排除和分析。</p><p> 201
66、2/6/8:繼續(xù)第一天的程序,在進行很多次實驗后,未果。在下午的一次實驗中,最開始時,進行的是全速運行,但是結(jié)果端還是沒有發(fā)現(xiàn)接收到的數(shù)據(jù)11,22,33,44,55,66,77</p><p> 分析:通過單步運行,先讓接收端運行到允許部分,在運行發(fā)送端</p><p> 解決方法:按F8單步運行</p><p> 結(jié)果:1.先在發(fā)送端觀察到了AX寄存器的值
67、11,繼續(xù)在發(fā)送端單步運行,在接收端可以觀察到了相應接收的數(shù)據(jù)11,22,33,44,55,66,77。</p><p> 2.一般是實驗箱的硬件問題,導致了實驗過程中有時接收不到數(shù)據(jù),從而得不到結(jié)論。</p><p> 2012/6/11:過了一個周末,繼續(xù)實驗,又發(fā)現(xiàn)了一些問題,不能得到結(jié)果。在程序運行過程中經(jīng)過單步運行,發(fā)現(xiàn)卡在了讀取數(shù)據(jù)計數(shù)值CX處,mov cx,count,而
68、CX是由equ語句獲得count equ $-dat。</p><p> 問題分析:由于該實驗對于硬件要求比較高,所以考慮到了兩方面的原因</p><p> 1.硬件問題,讀取不了數(shù)據(jù);</p><p> 2.程序初步分析不會有問題,所以可能是編譯軟件對于count equ $-dat的處理有編譯問題,導致程序運行不了。</p><p>
69、;<b> 解決方法:</b></p><p> 1.對于解決硬件問題,是通過自發(fā)自收的程序來測試試驗箱是否沒問題,在測試時對應的代碼段窗口可以看到11,22,33,44,55,66,77,11,22,33,44,55,66,77的連續(xù)數(shù)據(jù)顯示,在測試了十幾個試驗箱后,找到了相對較好的兩個,花了將近一個小時的時間。</p><p> 2.修改前是: count
70、 equ $-dat</p><p> mov cx,count</p><p> 修改后:直接將cx賦值7,要發(fā)送的數(shù)據(jù)個數(shù)。</p><p> 在排除硬件問題的情況下,調(diào)試了程序,發(fā)現(xiàn)在接收端看到了接收的數(shù)據(jù)11,22,33,44,55,66,77,并讓它在數(shù)碼管上顯示出來。</p><p> 但是改程序不足的地方是,要先執(zhí)行
71、接收端,在執(zhí)行發(fā)送端才可以接收到數(shù)據(jù),發(fā)過來接收不到數(shù)據(jù)。</p><p> 2012/6/11:程序已經(jīng)可以運行了,結(jié)果也成功的顯示,但是不足的問題還有很多,小組一直在討論解決。在修改程序時也發(fā)現(xiàn)了一些問題,具體有:</p><p> 1.在8251的先初始化命令控制字時,mov al,40h ,01000000b,可以看到D6為1,該位表示的是8251的內(nèi)部復位,則方式控制字應該寫
72、在命令控制字之后。</p><p> 2.關(guān)于6個數(shù)碼管的初始清零問題,一共有6個數(shù)碼管,所以清零循環(huán)CX為6,但是之前程序是設(shè)置為3,清零不完全,導致了后續(xù)的讀寫數(shù)據(jù)表有沖突,即數(shù)碼管未清零又有取值,就導致了查表不符,于是出錯。</p><p> 在討論后,未達成一致,在優(yōu)化的思想上還是沒有突破。</p><p> 2012/6/12:為了優(yōu)化,并改進要先執(zhí)
73、行接收端,在執(zhí)行發(fā)送端才可以接收到數(shù)據(jù)的問題,修改了程序。小組討論了將近1小時多,具體思想如下:</p><p> 1.在發(fā)送端也加上了顯示發(fā)送的數(shù)據(jù)。即發(fā)送端上顯示要發(fā)送的內(nèi)容,這樣可以比較直觀的看到發(fā)送與接收是否一致 。</p><p> 2.在接收端和發(fā)送端上的程序初始化8251,8253,8279之后添加上發(fā)送01H的程序,接著就是接收檢測,檢測發(fā)送端是否發(fā)送了01H,如果檢測
74、到接收了01H,說明發(fā)送端已將開始運行;如果沒有接收到01H則繼續(xù)等待接收發(fā)送端發(fā)送的數(shù)據(jù)。當接收了發(fā)送端發(fā)送的01H后,說明發(fā)送端開始工作,接收端在發(fā)送一次01H,確保發(fā)送端也接收到01H,這樣發(fā)送端就不會進入無限等待接收的狀態(tài),確保了之后發(fā)送端發(fā)送的數(shù)據(jù)能讓接收端接收到。從而消除了接收方要先運行才能接收到數(shù)據(jù)的限制。</p><p> 3.有了思路在程序的多次修改并不斷調(diào)試的情況下,終于解決了這個問題,該實
75、驗也有了突破性的進展。</p><p><b> 總結(jié)體會</b></p><p> 11:作為組長,很高興能帶領(lǐng)一個小組在這一周里在共同努力下作出了一 些成效。小組成員都很積極,每一次的討論,都會有不少的收獲。比如在 討論如何讓任意一臺機箱先運行都能使數(shù)據(jù)傳輸問題時,自己之前也有學習過TCP/IP協(xié)議 所以結(jié)合到當前問題就想到了TCP/IP協(xié)議的三次握手來 保障
76、通信的正常,在小組討論覺得可行,經(jīng)修改與調(diào)試后,證明可行。 有時候自己想的問題會遭遇瓶頸,但是集齊一個小組的智慧就不一樣了,問題就會轉(zhuǎn)變?yōu)榇鸢福矣X得這是我最大的收獲。三個臭皮匠賽過一個諸葛亮。</p><p> 22:作為書記員,考勤和每天的工作記錄我都有認真落實,我想在這樣一個團隊中,我們每個人都應該發(fā)揮一點自己的長處,不論是分析問題,還是處理問題上,大家都應該積極的參與,我覺得讓我最有成就感的是,我調(diào)試出
77、了,不用單步也可以查看到數(shù)據(jù)的變化問題,之前因為延時的問題每次在全速運行的時候不能看到數(shù)據(jù)的變化,而是從一開始的11瞬間變到77,就是計算機運行的速度太快了導致看不到結(jié)果,我修改了程序,讓它在讀取要發(fā)送的數(shù)據(jù)時用LED數(shù)碼管上顯示,這樣就延遲了數(shù)據(jù)發(fā)送,讓它在接收端的數(shù)碼管上不會變化的那么快。還有就是在最后優(yōu)化階段,要解決不要先運行接收端也可以接收到數(shù)據(jù)的時候,小組在一直討論,并把想出的方案在程序上實現(xiàn),當然由于粗心問題,錯誤很多,在編
78、譯器的提示和大家一起細心排錯的情況下,終于解決了這個問題。這期間讓我感悟最深的是,大家積極討論解決問題的精神,合作很愉快!就像你的一個蘋果跟我一個蘋果交換了還是一個蘋果,但是你的思想跟的我的思想交換了就是兩個思想,不管是微機上的知識還是合作上的精神都收獲甚多!</p><p> 66:通過這短短的一周的課程設(shè)計,感覺學到了很多的東西,特別是經(jīng)過團隊的相互配合,產(chǎn)生了許多好的思想,這是這次項目中最值得珍藏的東西,
79、讓我明白了團結(jié)的力量,也許如果沒有幾個人的共同努力想要完成這個課程設(shè)計,我想難度有多大是可想而知的。說真的在還沒有課程設(shè)計之前我對微機這門課的許多知識點還是有很多都是半懂的,可是經(jīng)過這次加深了對其認識,一個個問題被我們攻破的那種喜悅,我想大家都是有共同體會的,真希望能有多幾次這樣的課程設(shè)計。</p><p> 77:一周的《微型計算機原理與接口技術(shù)》的專周一轉(zhuǎn)眼就過去了,通過我們小組成員的努力,總算是完成了任務(wù)
80、,其中的每一個環(huán)節(jié),都留下了我們每一個人的歡笑與汗水。開始時,我們都很迷茫,不知道從何入手。我們知道,串行通信看起來簡單,但是要實現(xiàn)起來也不是很容易。我們分工明確,一部分人去查資料,一部分人去挑選機器,從20幾臺機器中總算是挑出了2臺能實現(xiàn)通信的。期間,我們小組成員積極討論,這是我們以前沒有經(jīng)歷過的,使我們小組成員的友誼得到了進一步加深 ,總的來說這是很難忘的一周。最后,我們還在原來方案的基礎(chǔ)上進一步加強,實現(xiàn)了不管是哪一方先運行都能實
81、現(xiàn)通信,這是很大的一筆收獲。</p><p> 88:總的來說,微機這一專周我收獲頗多,專周剛開始時對微機實驗非常迷茫,前幾天是收獲甚少,后兩天收獲非常多。從這我更明白了,一個人的去費力思考,費力看書,而不去交流,不去探討,與交流相比較,收獲少得可憐,而且互相交流更具有激情,更有動力,尤其是一堆大老爺們加一個妞,使小組不單一,增加各種活力??偨Y(jié):有個妞也是有好處的</p><p><
82、;b> 附錄(程序清單)</b></p><p><b> 發(fā)送端:</b></p><p> Z8279 equ 212h ;控制寄存器端口地址 </p><p> D8279 equ 210h ;數(shù)據(jù)寄存器端口地址 </p><p> L
83、edmod equ 0</p><p> Ledfeq equ 38h ;8279工作模式位0,掃描頻率為38h</p><p> code segment</p><p> assume cs:code</p><p> start:push cs </p><p><b> pop ds&
84、lt;/b></p><p> mov dx,z8279</p><p> mov al,ledmod ;設(shè)定8279工作模式</p><p> out dx,al ;左邊輸入,8位顯示</p><p> mov al,ledfeq</p><p> out dx,al
85、;掃描頻率,al的內(nèi)容輸出到DX指示的端口</p><p> mov cx,6 </p><p> xz:mov dx,d8279</p><p><b> mov al,0</b></p><p> out dx,al ;清空顯示</p><p><
86、;b> loop xz</b></p><p> mov dx,d8279</p><p> mov al,5eh</p><p> out dx,al </p><p> mov dx,d8279</p><p> mov al,77h</p><p> ou
87、t dx,al;顯示'Ad'</p><p> mov dx,203h ; 控制字的地址送DX</p><p> mov al,56h ; 控制字的內(nèi)容送AL,01010110B,D7D6為01表示計數(shù)器1,D5D4為01表示只讀寫低4位,D3D2D1為表示方式3,D0為0表示二進制</p><p> out dx,al ;寫入
88、控制字</p><p><b> mov al,52</b></p><p> mov dx,201h</p><p><b> out dx,al</b></p><p> mov dx,209h</p><p><b> xor al,al</b
89、></p><p> mov cx,3 </p><p> delay1:call out1</p><p> loop delay1</p><p> mov al,40h</p><p><b> call out1</b></p><
90、;p> mov al,4eh;01001110B,D7D6為01表示1個停止位,D5D4為00表示不校驗,D3D2為11表示8個數(shù)據(jù)位,D1D0為10表示波特率因子16</p><p><b> call out1</b></p><p> mov al,27h ;允許接收與發(fā)送(第249頁)</p><p><b&g
91、t; call out1</b></p><p> lea si,dat</p><p> lea di,dat1</p><p> AA: mov dx,209h</p><p><b> in al,dx</b></p><p> test al,01h ;Tx
92、RDY?</p><p> jz next </p><p> mov al,[si]</p><p> out dx,al ;發(fā)送1</p><p> mov dx,209h</p><p><b> in al,dx</b></
93、p><p> test al,02h</p><p><b> jz AA</b></p><p> mov dx,208h </p><p><b> in al,dx</b></p><p> mov [di],al ;接收1</p>
94、<p><b> xor bl,bl</b></p><p> mov bl,[di]</p><p><b> cmp bl,1h</b></p><p><b> jne AA</b></p><p> mov dx,209h</p>&l
95、t;p><b> in al,dx</b></p><p> test al,01h ;TxRDY?</p><p> jz next ;發(fā)送1</p><p> mov al,[si]</p><p><b> out dx,al</b></p>&l
96、t;p> lea si,dat2</p><p><b> mov cx,13</b></p><p> next: mov dx,209h</p><p><b> in al,dx</b></p><p> test al,01h ;TxRDY?</p>&
97、lt;p><b> jz next</b></p><p> mov al,[si]</p><p><b> push cx</b></p><p><b> mov ch,al</b></p><p><b> mov cl,4</b>
98、</p><p> ror al,cl </p><p> and al,0fh ;將al的高4位,移動到低4位 </p><p><b> push ax</b></p><p> mov dx,z8279</p><p> mov al,81h
99、</p><p> out dx,al ; 將81h </p><p><b> pop ax</b></p><p> lea bx,led</p><p><b> xlat</b></p><p> mov dx,d8279;顯示轉(zhuǎn)換結(jié)果高4位
100、</p><p><b> out dx,al</b></p><p> call delay</p><p><b> mov al,ch</b></p><p> and al,0fh</p><p><b> push ax</b><
101、;/p><p> mov dx,z8279</p><p> mov al,80h</p><p><b> out dx,al</b></p><p><b> pop ax</b></p><p> lea bx,led</p><p>&l
102、t;b> xlat</b></p><p> mov dx,d8279;顯示轉(zhuǎn)換結(jié)果低4位</p><p><b> out dx,al</b></p><p> call delay</p><p><b> pop cx</b></p><p&
103、gt; mov al,[si]</p><p> mov dx,208h</p><p><b> call out1</b></p><p><b> inc si</b></p><p><b> loop next</b></p><p>
104、;<b> jmp $</b></p><p> out1 proc near</p><p><b> out dx,al</b></p><p><b> push cx</b></p><p> mov cx,400h</p><p
105、><b> loop $</b></p><p><b> pop cx</b></p><p><b> ret</b></p><p><b> out1endp</b></p><p> Led db 3fh,06h,5bh,4fh
106、,66h,6dh,7dh,07h,7fh,6fh,77h</p><p> db 7ch,39h,5eh,79h,71h ;數(shù)碼表</p><p> delay proc near ;延時子程序</p><p><b> push cx</b></p><p> mov cx,0FFFFh&l
107、t;/p><p><b> loop $</b></p><p><b> pop cx</b></p><p><b> ret</b></p><p> delay endp</p><p> dat db 1 </p><
108、;p> Dat1db 1 dup(?)</p><p> Dat2 db 11h,22h,33h,44h,55h,66h,77h,88h,99h,0AAh,0BBh,0CCh,0DDh</p><p><b> codeends</b></p><p> end start</p><p>
109、;<b> 接收端:</b></p><p> Z8279 equ 212h ;控制寄存器端口地址 </p><p> D8279 equ 210h ;數(shù)據(jù)寄存器端口地址 </p><p> Ledmod equ 0</p><p> Ledfeq equ 3
110、8h</p><p> code segment</p><p> assume cs:code</p><p> start:push cs </p><p><b> pop ds</b></p><p> mov dx,z8279</p><p> m
111、ov al,ledmod ;設(shè)定8279工作模式</p><p> out dx,al ;左邊輸入,8位顯示</p><p> mov al,ledfeq</p><p> out dx,al ;掃描頻率 38</p><p><b> mov cx,6</b></p>
112、;<p> xz:mov dx,d8279</p><p><b> mov al,0</b></p><p> out dx,al ;清空顯示</p><p><b> loop xz</b></p><p> mov dx,d8279</p>&
113、lt;p> mov al,7ch</p><p> out dx,al </p><p> mov dx,d8279</p><p> mov al,5bh</p><p> out dx,al </p><p> mov dx,203h</p><p> m
114、ov al,56h</p><p><b> out dx,al</b></p><p><b> mov al,52</b></p><p> mov dx,201h</p><p><b> out dx,al</b></p><p> m
115、ov dx,209h</p><p><b> xor al,al</b></p><p><b> mov cx,3</b></p><p> Delay1:call out1</p><p> loop delay1</p><p> mov al,40h<
116、;/p><p><b> call out1</b></p><p> mov al,4eh;1個停止位,8個數(shù)據(jù)位,波特率因子16</p><p><b> call out1</b></p><p> mov al,27h ;允許接收與發(fā)送</p><p>
117、<b> call out1</b></p><p> lea si,dat</p><p> lea di,dat1</p><p> AA: mov dx,208h</p><p> mov al,[si]</p><p> out dx,al ;發(fā)送1</
118、p><p> BB: mov dx,209h</p><p><b> in al,dx</b></p><p> test al,02h</p><p><b> jz BB</b></p><p> mov dx,208h </p>
119、<p><b> in al,dx</b></p><p> mov [di],al ;接收1</p><p><b> xor bl,bl</b></p><p> mov bl,[di]</p><p><b> cmp bl,1h</b><
120、/p><p><b> jne AA</b></p><p> mov dx,208h ;發(fā)送1</p><p> mov al,[si]</p><p><b> out dx,al</b></p><p> mov di,offset dat2</p&
121、gt;<p><b> xor cx,cx</b></p><p><b> mov cx,15</b></p><p> next: mov dx,209h</p><p><b> in al,dx</b></p><p> test al,
122、02h ;RxRDY?</p><p><b> jz next</b></p><p> mov dx,208h</p><p> in al,dx ;逐個接收數(shù)據(jù)</p><p> mov [di],al</p><p><b> inc di </b&
123、gt;</p><p><b> push cx</b></p><p><b> mov ch,al</b></p><p><b> mov cl,4</b></p><p> ror al,cl </p><p> and
124、al,0fh ;將al的高4位,移動到低4位 </p><p><b> push ax</b></p><p> mov dx,z8279</p><p> mov al,81h </p><p> out dx,al ; 將81h </p><p>
125、;<b> pop ax</b></p><p> lea bx,led</p><p><b> xlat</b></p><p> mov dx,d8279;顯示轉(zhuǎn)換結(jié)果高4位</p><p><b> out dx,al</b></p><
126、p> call delay</p><p><b> mov al,ch</b></p><p> and al,0fh</p><p><b> push ax</b></p><p> mov dx,z8279</p><p> mov al,80h&l
127、t;/p><p><b> out dx,al</b></p><p><b> pop ax</b></p><p> lea bx,led</p><p><b> xlat</b></p><p> mov dx,d8279;顯示轉(zhuǎn)換結(jié)果低
128、4位</p><p><b> out dx,al</b></p><p> call delay</p><p><b> pop cx</b></p><p><b> loop next</b></p><p><b> jm
129、p $</b></p><p> out1 proc near</p><p><b> out dx,al</b></p><p><b> push cx</b></p><p> mov cx,400h</p><p><b> lo
130、op $</b></p><p><b> pop cx</b></p><p><b> ret</b></p><p><b> out1endp</b></p><p> Led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,
131、7fh,6fh,77h</p><p> db 7ch,39h,5eh,79h,71h ;數(shù)碼表</p><p> delay proc near ;延時子程序</p><p><b> push cx</b></p><p> mov cx,0FFFFh</p&g
132、t;<p><b> loop $</b></p><p><b> pop cx</b></p><p><b> ret</b></p><p> delay endp</p><p> dat db 1h</p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 微機原理課程設(shè)計報告-雙機串行通信
- 串行通信微機原理課程設(shè)計--串行通信實現(xiàn)文件傳輸
- 移動通信ofdm課程設(shè)計說明書
- 微機原理課程設(shè)計說明書---步進電機控制
- 基于arm的串口通信系統(tǒng)的課程設(shè)計說明書
- 基于arm的串口通信系統(tǒng)的課程設(shè)計說明書
- 課程設(shè)計說明書
- 課程設(shè)計說明書
- 工廠管理系統(tǒng)課程設(shè)計說明書
- 學生管理系統(tǒng)課程設(shè)計說明書
- 醫(yī)院管理系統(tǒng)課程設(shè)計說明書
- 雙機串行通信課程設(shè)計
- vfp課程設(shè)計--學生管理系統(tǒng)課程設(shè)計說明書
- 倉儲管理系統(tǒng)-課程設(shè)計說明書
- 歌手比賽系統(tǒng)課程設(shè)計說明書
- 采購管理系統(tǒng)課程設(shè)計說明書
- 前門課程設(shè)計說明書
- javaweb課程設(shè)計說明書
- 后蓋課程設(shè)計說明書
- 鍋爐課程設(shè)計說明書
評論
0/150
提交評論