版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 課程設計報告</b></p><p> 課程名稱:微機原理課程設計</p><p><b> 成 員:</b></p><p> 設計時間:2013年3月4日至3月15日</p><p><b> 課程設計題目2</b></p
2、><p><b> 課程設計目的2</b></p><p><b> 課程設計要求3</b></p><p><b> 概要設計3</b></p><p><b> 工作分配:3</b></p><p><b>
3、; 方案論證:3</b></p><p> 硬件系統框圖與說明4</p><p><b> 硬件資源:5</b></p><p> 硬件硬件系統框圖與說明:6</p><p><b> 詳細設計7</b></p><p><b>
4、下位機部分:7</b></p><p><b> 下位機部分:8</b></p><p><b> PC機部分:9</b></p><p><b> 工作總結9</b></p><p><b> 附錄10</b></p
5、><p> 附錄1:電路原理圖10</p><p> 附錄2: 源程序及程序注釋13</p><p> 附錄3: 使用元器件一覽表(序號,名稱,型號,規(guī)格,數量,備注)22</p><p> 附錄4: 參考文獻23</p><p><b> 課程設計題目</b></p>
6、<p> 雙機參數采集系統設計</p><p><b> 課程設計目的</b></p><p> 《微機原理與匯編語言》是一門實踐性和實用性都很強的課程,本次課程設計是在課程學習結束后,為使學生進一步鞏固課堂和書本上所學知識,加強綜合能力,充分理解和運用所學到的知識,通過簡單的應用系統的設計,提高系統設計水平,啟發(fā)創(chuàng)新思想。通過本課程設計希望達到以下
7、目的:</p><p> 培養(yǎng)資料搜集和匯總的能力;</p><p> 培養(yǎng)總體設計和方案論證的意識;</p><p> 提高硬件,軟件設計與開發(fā)的綜合能力;</p><p> 提高軟件和硬件聯合調試的能力;</p><p> 熟練掌握相關測量儀器的使用方法;</p><p> 掌握
8、相關開發(fā)軟件,仿真軟件的使用方法。</p><p><b> 課程設計要求</b></p><p> 設計一套結構如下圖所示的雙機參數采集系統。圖中上位機負責向下位機下達命令,并對下位機采集的數據進行處理;下位機則根據上位機的命令對工作現場的各種開關量和模擬量參數進行采集,以某種通信方式傳遞給上位機,接收上位機根據處理結果下達的命令對現場各種設備實施控制。<
9、/p><p> 首先制定通信協議,包括命令編碼,數據編碼,信息包格式,校驗方式、通信速率、采樣周期、濾波方法等;確定硬件通信接口選擇(并行或串行接口)</p><p> 系統實現按從易到難有如下三種要求:</p><p> ?。?)基本功能:實現參數采集,通信,基本形式的參數顯示,其中下位機用數碼管顯示,上位機用屏幕以數字顯示。</p><p&g
10、t; ?。?)擴展功能:在實現基本部分基礎上,擴展2路開關信號輸入,前端參數采集計算機參數顯示為數碼管顯示。通過開關選擇模擬信號回送操作,回送的模擬信號在前端參數采集計算機接口儀器中的D/A通道輸出,后端處理計算機顯示兩路模擬信號的同時,顯示回送的模擬信號值和開關狀態(tài)顯示。</p><p> ?。?)發(fā)揮功能:在實現擴展部分基礎上,后端處理計算機以曲線形式顯示兩路模擬信號、回送的模擬信號值和開關狀態(tài)顯示。<
11、/p><p><b> 概要設計</b></p><p><b> 工作分配:</b></p><p> 宋俊月:負責前端系統的參數采集與簡單顯示功能,并將采集的參數通過通信接口傳送給上位機。其中包括下位機與上位機中8255和8250的參數設置,將數字信號顯示到數碼管上的子程序。</p><p>
12、; 宋友良:負責接收參數,并在屏幕上顯示參數。其中包括上位機與下位機的信號傳送與接收相應代碼和pc機中的波形顯示。</p><p><b> 方案論證:</b></p><p> 根據課程要求,總體上上位機與下位機的通信采用了并行的數據傳送,因此分別應用了并行接口電路8255A,實現前端與后端的數據傳送。下位機通過D/A轉換器對信號進行采樣,然后送到8255A的
13、通道中,滿足上位機8255A的通道要求。而上位機通過兩個開關量對下位機進行控制,其中一個控制是否采集信號,另一個控制哪一路進行回送。此外對于數據的顯示,其中上位機與下位機中通過子程序將數據顯示在數碼管上,而對于波形的顯示則通過pc程序中8250串行通信方式與上位機中的8250對應從而將數據傳送到pc機中,再通過系統功能調用從而進行描點。</p><p><b> 實驗原理</b></
14、p><p> 上位機8255:地址為CS0,片選輸入端插孔為8255CS,B、C端口的插孔分別為:PB0~PB7,PC0~PC7下位機8255:地址為CS2,片選輸入端插孔為8255CS,A、C端口的插孔分別為:PA0~PA7,PC0~PC7</p><p> 上位機與下位機中8255連線:</p><p> 上位機 下位機</p>
15、;<p> B口<------------------ A口</p><p> C口-------------------> C口</p><p> 雖然是對兩路進行信號采集,但是仍然可以通過公用通道口從而達到簡化線路的目的。</p><p> 上位機與pc機程序中的8250:應用RS-232C串口
16、實現近距離的串行通信。數據傳送波特率為9600bps,數據格式為8位/每字符,1位停止位,無奇校驗,雙機8250端口地址均為2F8H~2FFH。</p><p> 下位機0809:八路八位A/D實驗電路由一片ADC0809,一片74LS04,一片74LS32組成,該電路中,ADIN0—ADIN7是ADC0809的模擬量輸入插孔,CS0809是0809的AD啟動和片選的輸入插孔,EOC是0809轉換結束標志,高電
17、平表示轉換結束。齊納二極管LM336-5提供5V的參考電源,ADC0809的參考電壓,數據總線輸出,通道控制線均已接好。</p><p> 通過上位機的兩個開關分別進行控制。開關0控制是否進行采集,開關1則控制對哪一路進行采集。開關0、1在上位機,讀取的時候是對下位機的74L244中的in7位進行讀取,從而實現后端控制。</p><p> 而對采樣頻率的控制則是應用8253產生連續(xù)方波
18、,通過下降沿直接控制8259產生中斷請求,每次請求則控制0809進行對數據的采集,從而實現對才樣頻率的控制。</p><p><b> 硬件系統框圖與說明</b></p><p><b> 地址分配:</b></p><p> CS0 片選信號,地址04A0~04AF 偶地址有效</p><
19、p> CS1 片選信號,地址04B0~04BF 偶地址有效</p><p> CS2 片選信號,地址04C0~04CF 偶地址有效 </p><p> CS3 片選信號,地址04D0~04DF 偶地址有效 </p><p> CS4 片選信號,地址04E0~04EF 偶地址有效 </p><p> C
20、S5 片選信號,地址04F0~04FF 偶地址有效</p><p> CS6 片選信號,地址0000~01FF 偶地址有效</p><p> CS7 片選信號,地址0200~03FF 偶地址有效</p><p> 8250 片選地址:0480~048F,偶地址有效</p><p> 8279 片選地址:04
21、90~049F,偶地址有效</p><p><b> 硬件資源:</b></p><p> ?。?)可編程并口接口芯片8255一片。</p><p> ?。?)串行接口兩個:8250芯片一個,系統與主機通訊用,用戶不可用。 單片機的串行口,可供用戶使用。</p><p> (3)鍵盤、LED顯示芯片8279一片,其地
22、址已被系統固定為CFE8H、CFE9H。硬件系統要求編碼掃描顯示。</p><p> (4)六位LED數碼管顯示。</p><p> ?。?)ADC0809 A/D轉換芯片一片,其地址、通道1—8輸入對用戶開放。</p><p> ?。?)DAC0832 D/A轉換芯片一片,其地址對用戶開放,模擬輸出可調。</p><p> ?。?)8位簡
23、單輸入接口74LS244一個,8位簡單輸出接口74LS273一個,其地址對用戶開放。</p><p> ?。?)配有8個邏輯電平開關,8個發(fā)光二極管顯示電路。</p><p> (9)配有一個可手動產生正、負脈沖的單脈沖發(fā)生器</p><p> (10)10、配有一個可自動產生正、負脈沖的脈沖發(fā)生器,按基頻6.0MHz進行1分頻(CLK0)、二分頻(CLK1)、
24、四分頻(CLK2)、八分頻 (CLK3)、十六分頻(CLK4)輸出方波。</p><p> ?。?1)配有一路0---5V連續(xù)可調模擬量輸出(AN0)。</p><p> ?。?2)配有可編程中斷控制器8259一個,其中斷IRQ輸入、控制輸出均對用戶開放。</p><p><b> 系統板的結構簡圖</b></p><p&
25、gt; 硬件硬件系統框圖與說明:</p><p><b> 實驗硬件設計圖</b></p><p> 圖中8255完成了上位機與下位機的并行通訊,其中上位機的8255地址為CS1,下位機地址為CS0(CS0-CS7詳細地址見地址分配),上位機中B口輸入,C口輸出,下位機中C口輸入,A口輸出。</p><p> 上位機的74L244接到C
26、S0,開關控制K1接到了74L244的in0,從而實現的開關1的讀取。開關0接到了下位機74L244的in7,從而實現對控制的讀取。</p><p> 信源0和信源1分別接到了0809中的and0和and1,滿足了兩路信號的要求。</p><p><b> 詳細設計</b></p><p><b> 下位機部分:</b&g
27、t;</p><p><b> 下位機模塊流程圖</b></p><p> 說明:圖中開關量的讀取是通過讀取下位機74L244中in0-in7,而開關卻設置在上位機上,然后通過test指令實現了對控制量的判斷選擇,從而對0路信號或者是1路信號進行采集。采集工作是由0809進行對模擬信號的數字轉換。其中的EOC是轉換結束信號,通過對它的讀取判斷合適進行數據傳送。而E
28、OC信號則連接到了下位機74L244中的in0(具體連線見實驗硬件設計圖)。</p><p><b> 下位機部分:</b></p><p><b> 上位機模塊流程圖</b></p><p> 說明:圖中開關量的讀取是通過讀取下位機74L244中in0-in7,而開關卻設置在上位機上,然后通過test指令實現了對控
29、制量的判斷選擇,從而對0路信號或者是1路信號進行接收。接收工作由in指令對PB0-PB7進行讀取,然后在通過out指令將保存的ax通過PC0-PC7回送給下位機。數碼管的顯示則是調用了disp子程序(具體程序見附錄)。</p><p><b> PC機部分:</b></p><p><b> PC機模塊流程圖</b></p>
30、<p> 說明:首先進行了8250的初始化,對應上位機中的8250。然后用in指令讀取銅線線路寄存器的狀態(tài)判斷是否有錯,若有錯則用過jmp指令跳到錯誤處理執(zhí)行部分,若沒錯則使用test指令判斷是否接收到數據,是則進行數據的處理和保存,否則繼續(xù)讀取通信寄存器狀態(tài)。然后檢測鍵盤狀態(tài)是否按下退出鍵,若沒有則判斷屏幕是否已滿,若滿則清屏,然后調用描點功能指令,之后則繼續(xù)讀取讀取通信寄存器狀態(tài)進行循環(huán)。</p><
31、p><b> 工作總結</b></p><p> 通過兩周的課程設計,認識到了自己的不足,首先是對各個知識的綜合應用掌握的不扎實,不能將以前的知識完美的結合起來。比如如何將8253的方波信號作為8259的中斷請求信號,如何在滿足對兩路信號采集的情況下又不過度的占用通道口,造成對資源的浪費,等等。</p><p> 對于對兩路信號的采集。主要有兩路方案:&l
32、t;/p><p> 方案一:使用兩路通道口0和1,通道0傳送信號0,通道1傳送信號1。這個方案優(yōu)點是能夠快速的對信號進行采集和傳送,而不需要進行判斷。缺點是過多的占用了通道資源,也不切合實際應用。</p><p> 方案二:僅采用一路通道分時的對兩路信號進行傳送。這樣的優(yōu)點是節(jié)省資源,符合實際要求,缺點是不能同時進行信號傳送,從而不能對兩路信號進行實時的比較。</p><
33、;p> 綜上,我們采取了方案二,雖然不能同時對信號進行傳送,但是由于傳送的頻率較快,對于實際的影響較小。在一定程度上實現了技術創(chuàng)新。</p><p><b> 不足之處:</b></p><p> 對于采樣頻率的掌控不足,由于時間少,知識掌握不足,所以沒能完成實驗要求,但是我們覺得通過8253、8259、0809的綜合使用應該可以實現對采樣頻率的控制。通過
34、對8253的初始化產生一定頻率的連續(xù)方波,然后每次方波的下降沿觸發(fā)一次8259中斷程序,每次中斷進行一次0809對信號的采集。從而實現實驗對采樣頻率的要求。</p><p><b> 附錄</b></p><p><b> 附錄1:電路原理圖</b></p><p> 開關和74L244:</p>&l
35、t;p> 開關量輸入電路由8只開關組成,每只開關有兩個位置H和L,一個位置代表高電平,一個位置代表低電平。對應的插孔是:K1~K8。開關量輸出電路由8只LED組成,對應的插孔分別為LED1~LED8,當對應的插孔接低電平時LED點亮。</p><p> 輸入緩沖電路由74LS244組成,輸出鎖存電路由上升沿鎖存器74LS273組成。74LS244是一個擴展輸入口,74LS273是一個擴展輸出口,同時它們
36、都是一個單向驅動器,以減輕總線的負擔。74LS244的輸入信號由插孔IN0~IN7輸入,插孔CS244是其選通信號,其它信號線已接好;74LS273的輸出信號由插孔O0~O7輸出,插孔CS273是其選通信號,其它信號線已接好。其原理圖如下:</p><p><b> 8250接口電路:</b></p><p> 該電路由一片8250,一片MAX232組成,該電路所
37、有信號線均已接好。原理圖如下:</p><p> 8255并行接口電路:</p><p> 該電路由1片8255組成,8255的數據口,地址,讀寫線,復位控制線均已接好,片選輸入端插孔為8255CS,A,B,C三端口的插孔分別為:PA0~PA7,PB0~PB7,PC0~PC7.電路原理圖如下:</p><p><b> D/A電路:</b>
38、;</p><p> 八位雙緩沖D/A實驗電路由一片DAC0832。一片74LS00,一片74LS04,一片LM324組成,該電路中除DAC0832的片選未接好外,其他信號均已接好,片選插孔標號CS0832。輸出插孔標號DAOUT。該電路為非偏移二進制D/A轉換電路,通過調節(jié)POT3,可調節(jié)D/A轉換器的滿偏值,調節(jié)POT2,可調節(jié)D/A轉換器的零偏值。</p><p> 8253定時
39、器/計數器電路:</p><p> 該電路由1片8253組成,8253的片選輸入端插孔CS8253,數據口,地址,讀寫線均已接好,T0、T1、T2時鐘輸入分別為8253CLK0、8253CLK1、8253CLK2。定時器輸出,GATE控制孔對應如下:OUT0、GATE0、OUT1、GATE1、OUT2、GATE2、CLK2。原理圖如下:</p><p> 注:GATE信號無輸入時為高電
40、平</p><p> 附錄2: 源程序及程序注釋</p><p><b> 下位機部分:</b></p><p> con8279 equ 0492h</p><p> dat8279 equ 0490h</p><p> assume cs:code</p>&
41、lt;p> code segment public</p><p><b> org 100h</b></p><p><b> start: </b></p><p> jmp start0;</p><p> segcod db 3fh,06h,5bh,4fh,66h,6dh,
42、7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h </p><p><b> start0:</b></p><p><b> ;8255初始化</b></p><p> mov dx,04c6h;控制寄存器地址</p><p> mov ax,89h
43、;設置為A口輸出,B口輸出,C口輸入</p><p> out dx,ax</p><p> ;8253計數器初始化</p><p> mov dx,04f6h;控制寄存器</p><p> mov ax,34h;計數器0,方式2</p><p> out dx,ax</p>&
44、lt;p> mov dx,04f0h</p><p> mov ax,53h</p><p> out dx,ax</p><p> mov ax,07h</p><p> out dx,ax;計數值0753h,每5ms采一次</p><p> search: mov dx,0
45、4b0h ;74LS244地址</p><p> in al,dx ;讀輸入開關量 K1=0 caiji</p><p> test al,80h</p><p> jnz caiji</p><p> jmp search</p><p><
46、;b> caiji:</b></p><p> mov dx,04b0h ;74LS244地址</p><p> in al,dx ;讀輸入開關量</p><p> test al,02h</p><p> jz getinfo0 ;K1=0 處理0
47、路</p><p> jmp getinfo1 ;K1=1 處理1路</p><p> getinfo0: </p><p> mov dx,04a0h</p><p> mov ax,34h</p><p> out dx,ax;啟動通道 0</
48、p><p> wait1: mov dx,04b0h ;CS244</p><p> in ax,dx;讀 EOC</p><p><b> and ax,1</b></p><p><b> cmp ax,1</b></p><p> jne
49、wait1;如果EOC=0,waiting....</p><p> mov dx,04a0h</p><p> in ax,dx;讀轉換結果</p><p> and ax,0ffh</p><p> mov bx,ax</p><p> mov dx,04d0h
50、;送轉換結果給273</p><p> out dx,ax</p><p> mov dx,04c0h;A口地址,轉換結果送A口</p><p> out dx,ax </p><p><b> nop</b></p><p> call disp&
51、lt;/p><p><b> jmp hx</b></p><p> ;************************************************************start1:</p><p> getinfo1: mov dx,04a2h</p><p> mov ax,3
52、4h</p><p> out dx,ax;啟動通道 1</p><p> wait2: mov dx,04b0h ;CS244</p><p> in ax,dx;讀 EOC</p><p><b> and ax,1</b></p><p><b
53、> cmp ax,1</b></p><p> jne wait2;如果EOC=0,waiting....</p><p> mov dx,04a0h</p><p> in ax,dx;讀轉換結果</p><p> and ax,0ffh</p><p> mo
54、v bx,ax</p><p> mov dx,04d0h ;送轉換結果給273</p><p> out dx,ax</p><p> mov dx,04c0h;A口地址,轉換結果送A口 </p><p> out dx,ax </p><p><
55、;b> nop</b></p><p> call disp</p><p> hx:mov dx,04c4h;C口地址,轉換結果送C口</p><p> in ax,dx</p><p><b> mov bx,ax</b></p><p&
56、gt; call disp2</p><p> jmp search</p><p> ;******************顯示子程序1****************************</p><p><b> disp:</b></p><p> mov di,offset segcod<
57、/p><p> mov ax,08h ;工作方式,16位,左入</p><p> mov dx,con8279</p><p> out dx,ax</p><p> mov ax,90h</p><p> mov dx,con8279</p><p&g
58、t; out dx,ax</p><p> ;寫顯示RAM命令,地址自增</p><p> mov dx,dat8279</p><p><b> push bx</b></p><p> and bx,0f0h ;取高4位</p>
59、<p><b> mov cl,4</b></p><p> shr bx,cl</p><p> add di,bx</p><p> mov al,cs:[di]</p><p><b> mov ah,0</b></p><p> out
60、 dx,ax ;寫RAM0</p><p><b> nop</b></p><p><b> nop</b></p><p> mov di,offset segcod</p><p><b> pop bx</b></p>
61、<p> and bx,0fh ;取低4位</p><p> add di,bx</p><p> mov al,cs:[di]</p><p><b> mov ah,0</b></p><p> out dx,ax
62、 ;寫RAM1</p><p><b> ret</b></p><p> ;************************************************</p><p> ;******************顯示子程序2****************************</p><p&g
63、t;<b> disp2:</b></p><p> mov di,offset segcod</p><p> mov dx,dat8279</p><p><b> push bx</b></p><p> and bx,0f0h
64、 ;取高4位</p><p><b> mov cl,4</b></p><p> shr bx,cl</p><p> add di,bx</p><p> mov al,cs:[di]</p><p><b> mov ah,0</b></p
65、><p> out dx,ax ;寫RAM0</p><p><b> nop</b></p><p><b> nop</b></p><p> mov di,offset segcod</p><p><b> pop bx&
66、lt;/b></p><p> and bx,0fh ;取低4位</p><p> add di,bx</p><p> mov al,cs:[di]</p><p><b> mov ah,0</b></p><p>
67、 out dx,ax ;寫RAM1</p><p><b> ret</b></p><p> ;************************************************</p><p> ;*********************延時子程序***********************&l
68、t;/p><p> delay:mov cx,0ffffh ;time delay</p><p> delay1: nop </p><p><b> nop</b></p><p> loop delay1</p><p><b> ret&l
69、t;/b></p><p> ;************************************************</p><p> ;********************D/A轉換子程序******************</p><p><b> r0832:</b></p><p>
70、 mov dx,04c2h</p><p> in ax,dx </p><p> and ah,0h </p><p> mov dx,04e0h </p><p> out dx,al </p><p> mov dx,04e2h</p><p>
71、; out dx,al ;啟動轉換</p><p><b> ret</b></p><p> ;************************************************</p><p><b> code ends</b></p><p><
72、;b> end start</b></p><p><b> 上位機部分:</b></p><p> con8279 equ 0492h</p><p> dat8279 equ 0490h</p><p> assume cs:code</p><p> cod
73、e segment public</p><p><b> org 100h</b></p><p> start: jmp starttt</p><p> segcod db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h </p><
74、;p><b> starttt:</b></p><p> mov dx,04a6h;控制寄存器地址</p><p> mov ax,92h;設置為A口輸入,"B口輸入","C口輸出"</p><p> out dx,ax</p><p><b&
75、gt; ;8250初始化</b></p><p> mov bx,0480h ;0480h接受緩沖寄存器的地址</p><p><b> mov dx,bx</b></p><p> add dx,6 ;0486h通信線路控制寄存器的地址</p><p> mov ax,80
76、h </p><p> out dx,ax ;寫入通信線路控制寄存器,使DLAB=1</p><p> mov dx,bx ;寫入除數寄存器</p><p> mov ax,0ch ;000ch---9600 ,clk=4.77MHZ/4</p><p> ; AL=47700
77、00/16/9600/4=8</p><p> out dx,ax ;寫入除數寄存器低8位</p><p><b> add dx,2</b></p><p><b> mov ax,0h</b></p><p> out dx,ax ;寫入除數寄存器低8位<
78、/p><p> add dx,4 </p><p> mov ax,07 ;無奇偶校驗,8位,1個停止位</p><p><b> out dx,ax</b></p><p><b> mov dx,bx</b></p><p> add dx,2
79、 ;無中斷</p><p><b> mov ax,0</b></p><p><b> out dx,ax</b></p><p> start1: </p><p> mov dx,04b0h ;74LS244地址</p><
80、p> in al,dx ;讀輸入開關量</p><p> test al,01h</p><p> jz intr0</p><p> mov dx,04a2h;a口地址04a0---->04a2</p><p> in ax,dx;輸入</p><
81、p> mov bx,ax ;bx保存1通道來的值</p><p><b> nop;</b></p><p><b> nop;</b></p><p><b> nop;</b></p><p> mov dx,04a4h
82、;C口地址</p><p> mov ax,bx</p><p> out dx,ax;輸出1通道來的值</p><p><b> push ax</b></p><p><b> call disp</b></p><p><b> po
83、p ax</b></p><p><b> jmp crd</b></p><p><b> intr0:</b></p><p> mov dx,04a2h;B口地址</p><p> in ax,dx;輸入</p><p> mo
84、v bx,ax ;bx保存0通道來的值</p><p> mov dx,04a4h;C口地址</p><p> mov ax,bx</p><p> out dx,ax;輸出0通道來的值</p><p><b> mov bx,ax</b></p>&
85、lt;p><b> push ax</b></p><p><b> call disp</b></p><p><b> pop ax</b></p><p> crd: </p><p> call delay</p><p&
86、gt;<b> call send</b></p><p> jmp start1</p><p> ;********************************發(fā)送子程序</p><p> send: push ax</p><p> mov bx,0480h</p><p>
87、<b> mov dx,bx</b></p><p> add dx,0ah </p><p> in ax,dx ;讀取通信狀態(tài)寄存器的值 </p><p> test ax,20h ;能輸出數據嗎?</p><p> jnz recv2 ;能輸出,
88、轉輸出處理</p><p><b> pop ax</b></p><p><b> jmp send</b></p><p> recv2: pop ax</p><p> mov dx,bx </p><p><b> out dx,a
89、x</b></p><p><b> ret</b></p><p> ;********************************************************************</p><p> ;******************顯示子程序*************************
90、***</p><p> disp:mov di,offset segcod</p><p> mov ax,08h ;工作方式,16位,左入</p><p> mov dx,con8279</p><p> out dx,ax</p><p> mov ax,90h&l
91、t;/p><p> mov dx,con8279</p><p> out dx,ax ;寫顯示RAM命令,地址自增</p><p> mov dx,dat8279</p><p><b> push bx</b></p><p> andbx,0f0h
92、 ;取高4位</p><p><b> movcl,4</b></p><p><b> shrbx,cl</b></p><p><b> adddi,bx</b></p><p> mov al,cs:[di]</p>&
93、lt;p> mov ah,0</p><p> out dx,ax ;寫RAM0</p><p><b> nop</b></p><p><b> nop</b></p><p> mov di,offset segcod</p><p&
94、gt;<b> pop bx</b></p><p> and bx,0fh ;取低4位</p><p> add di,bx</p><p> mov al,cs:[di]</p><p> mov ah,0</p><p> out
95、 dx,ax ;寫RAM1</p><p><b> ret</b></p><p> ;********************************************************************</p><p> ;*********************延時子程序**************
96、*********</p><p> delay: mov cx,1fffh ;time delay</p><p> delay1: nop </p><p><b> nop</b></p><p> loop delay1</p>&l
97、t;p><b> ret</b></p><p> ;******************************************************************* </p><p> code ends</p><p> end start</p><p><b&
98、gt; Pc機部分:</b></p><p> sseg segment para STACK 'stack'</p><p> dw 100h dup(0) ;初始化堆棧大小為100</p><p><b> sseg ends</b></p><p> dseg segment&
99、lt;/p><p><b> dseg ends</b></p><p> eseg segment</p><p><b> eseg ends</b></p><p> code segment</p><p> assume cs:code , ds:ds
100、eg, es:eseg, ss:sseg</p><p><b> start:</b></p><p> mov ax, dseg</p><p> mov ds, ax</p><p> mov ax,eseg</p><p> mov es, ax</p><p
101、> call clearp</p><p><b> ;初始化8250</b></p><p> mov al,80h</p><p> mov dx,3fbh</p><p> out dx,al; 寫入通信線路控制寄存器,使DLAB=1</p><p> mov ax,0ch
102、 ;分頻系數:1.8432MHz÷(9600×16)=96=0cH</p><p> mov dx,3f8h</p><p> out dx,al;寫入除數寄存器低8位</p><p><b> mov al,ah</b></p><p><b> inc dx</b>
103、;</p><p> out dx,al;寫入除數寄存器高8位</p><p> mov al,07h ;無奇偶校驗,8位,1個停止位</p><p> mov dx,3fbh</p><p> out dx,al;寫入通信線路控制寄存器,這段程序同時使DLAB=0</p><p&g
104、t; mov al,03h </p><p> mov dx,3fch</p><p> out dx,al;寫入調制解調器控制寄存器</p><p> mov dx,3f9h ;無中斷</p><p><b> mov ax,0</b></p><
105、;p> out dx,ax</p><p> statue:mov dx,3fdh ;讀通信線路狀態(tài)寄存器</p><p><b> in al,dx</b></p><p> test al,1eh ;接收有錯誤否?</p><p> jnz error
106、 ;有錯,則轉錯誤處理</p><p> test al,01h;接收到數據嗎?</p><p> jnz receive;是,轉接收處理</p><p> test al,20h;保持寄存器空嗎?</p><p> jz statue </p><p><b>
107、;不能,循環(huán)查詢</b></p><p> ;保持寄存器已空,發(fā)送數據</p><p> mov ah,0bh;檢測鍵盤有無輸入字符</p><p><b> int 21h</b></p><p><b> cmp al,0</b></p><p>
108、 jz statue;無輸入字符,循環(huán)等待</p><p> mov ah,0;有輸入字符,讀取字符</p><p> int 16h ;采用01號DOS功能調用,則無回顯</p><p> cmp al,1bh</p><p> jz done; 是ESC鍵,程序返回DOS</p><p> m
109、ov dx,3f8h ;將字符輸出給發(fā)送保持寄存器</p><p> out dx,al ;串行發(fā)送數據</p><p> jmp statue ;繼續(xù)查詢</p><p> ;已接收字符,讀取該字符并顯示</p><p><b> receive:</b></p><p>&
110、lt;b> add bp,1</b></p><p> cmp bp,300</p><p><b> jbe r1</b></p><p> call clearp</p><p> r1: mov dx,3f8h ;從輸入緩沖寄存器讀取字符</p><p&g
111、t;<b> in al,dx</b></p><p><b> xor ah,ah</b></p><p> push ax;保存數據</p><p><b> mov bl,2</b></p><p><b> div bl</b><
112、/p><p><b> mov bl,al</b></p><p><b> mov bh,0 </b></p><p><b> mov al,4</b></p><p><b> mov dx,bx</b></p><p>
113、 add dx ,23h</p><p> mov cx,bp </p><p> mov ah,0ch </p><p><b> int 10h </b></p><p> pop ax ;恢復數據</p><p> cmp al,0dh;數據是回車符嗎?<
114、/p><p> jnz statue;不是,則循環(huán)</p><p> mov dl,0ah;是,再進行換行</p><p><b> mov ah,2</b></p><p><b> int 21h</b></p><p> jmp statue;繼續(xù)查詢<
115、;/p><p> ;接收有錯,顯示問號</p><p> error:mov dx,3f8h ;讀出接收有誤的數據,丟掉</p><p><b> in al,dx</b></p><p> mov dl,'?';顯示問號</p><p><b> mov
116、ah,2</b></p><p><b> int 21h</b></p><p> jmp statue;繼續(xù)查詢</p><p><b> ;按任意鍵退出</b></p><p><b> mov ah,1</b></p><p&g
117、t;<b> int 21h</b></p><p> done: mov ax, 4c00h ;程序結束,返回到操作系統系統</p><p><b> int 21h</b></p><p> clearp: mov ax,0013h ;設置屏幕輸出格式 </p><p><
118、;b> int 10h</b></p><p> mov cx,0 ;畫坐標軸(300*180)</p><p><b> mov al,3 </b></p><p><b> mov dx,0 </b></p><p> frow:mov ah,0ch </
119、p><p><b> int 10h </b></p><p><b> inc dx </b></p><p> cmp dx,180</p><p><b> jnz frow </b></p><p> fline:mov ah,0ch &l
120、t;/p><p><b> int 10h </b></p><p><b> inc cx </b></p><p> cmp cx,300</p><p><b> jnz fline</b></p><p><b> mov bp,
121、0</b></p><p><b> ret</b></p><p><b> code ends</b></p><p><b> end start</b></p><p> 附錄3: 使用元器件一覽表(序號,名稱,型號,規(guī)格,數量,備注)</p&
122、gt;<p> 序號名稱數量備注</p><p> 1MUT—Ⅲ型實驗箱2</p><p> 28086CPU模塊2</p><p> 38255模塊2</p><p> 48250模塊2</p><p> 58253模塊1</p&
123、gt;<p> 68259模塊1</p><p> 7ADC0809模塊1</p><p> 80832模塊1</p><p> 9數碼管模塊2</p><p><b> 附錄4: 參考文獻</b></p><p> [1]錢曉捷,陳
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論