接口與通信課程設(shè)計(jì)雙擊串行通信_(tái)第1頁(yè)
接口與通信課程設(shè)計(jì)雙擊串行通信_(tái)第2頁(yè)
接口與通信課程設(shè)計(jì)雙擊串行通信_(tái)第3頁(yè)
接口與通信課程設(shè)計(jì)雙擊串行通信_(tái)第4頁(yè)
接口與通信課程設(shè)計(jì)雙擊串行通信_(tái)第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、課 程 設(shè) 計(jì) 課程名稱_接口與通信_(tái)題目名稱_雙擊串行通信 _學(xué)生學(xué)院_計(jì)算機(jī)學(xué)院_專業(yè)班級(jí)_計(jì)算機(jī)科學(xué)與技術(shù)2班學(xué) 號(hào)_學(xué)生姓名_指導(dǎo)教師_200 年 月 日一. 課程設(shè)計(jì)的內(nèi)容編寫程序,實(shí)現(xiàn)雙機(jī)串行通信,能正確進(jìn)行文件或字符的發(fā)送和接收。二. 相關(guān)技術(shù)1、8250串行通信初始化及收發(fā)數(shù)據(jù)2、匯編語(yǔ)言3、虛擬串口軟件及串口測(cè)試軟件的使用4、masm和link編譯器的使用三. 方案設(shè)計(jì)根據(jù)8250串行口的發(fā)送接收原理,在程序開始時(shí)一定要先對(duì)8250進(jìn)行初始化,設(shè)置相應(yīng)的參數(shù),使8250串行口工作在合理的工作狀態(tài)。進(jìn)行相關(guān)協(xié)議的設(shè)置即什么時(shí)候發(fā)送,什么時(shí)候接收,接收跟發(fā)送通過什么來(lái)進(jìn)行響應(yīng),保

2、證數(shù)據(jù)傳送的正確性。我設(shè)計(jì)的程序所采用的是查詢機(jī)制,雖然效率不及中斷機(jī)制高,但是簡(jiǎn)單易行。 在代碼階段,雖然匯編的可讀性和結(jié)構(gòu)性都不是很好,但是我還是希望我的代碼能做到清晰易讀,所以我采取了兩種方案a) 如果需要傳遞參數(shù),則使用宏使代碼結(jié)構(gòu)化b) 如果不需要參數(shù),則使用子程序,使代碼結(jié)構(gòu)化的同時(shí),調(diào)試簡(jiǎn)單程序設(shè)計(jì)如以下流程圖1、 程序總流程圖2、 發(fā)送輸入字符流程圖3、 發(fā)送一個(gè)字符流程圖4、 接收字符流程圖 5、 接收一個(gè)字符流程圖四. 實(shí)現(xiàn)與測(cè)試1、實(shí)現(xiàn)的源碼:escape equ 1bh;定義堆棧stacksg segment stack s dw 64 dup(?)stacksg en

3、dsdata segmentchoice db ?parm db ?,$com dw ?temp dw ?com1 dw 3f0hcom2 dw 2f0hcom3 dw 3e0hcom4 dw 2e0htop db 0dh,0ah,-db 0dh,0ah, computer serial communication -colindb 0dh,0ah,-optmenu db 0dh,0ah, 1.send message db 0dh,0ah, 2.recive message db 0dh,0ah, 3.exit select_str db 0dh,0ah,please input your

4、choice:,0dh,0ah,$send_tip db 0dh,0ah,please input your message(esc to exit):,0dh,0ah,$rev_tip db 0dh,0ah,your rev message:,0dh,0ah,$mainmenu db 0dh,0ah,select com: db 0dh,0ah, 1.com1 db 0dh,0ah, 2.com2 db 0dh,0ah, 3.com3 db 0dh,0ah, 4.com4 db 0dh,0ah, 5.exit db 0dh,0ah,please input your choice:$data

5、 ends;定義宏; 設(shè)置顯示顏色(4字節(jié)有效)setclr macro color push cx push bx push ax mov ah, 9 mov al, mov bh, 0 mov bl, color mov cx, 4 int 10h pop ax pop bx pop cx endm ;回顯一個(gè)字符 puts macro s push dx push ax mov ah, 9 lea dx, s int 21h pop ax pop dx endm;輸出字符串output macro s push dx push ax mov ah, 9 lea dx, s int 21h

6、 pop ax pop dxendm;將最高位清零lcrdl macro push dx mov al,1fh mov dx,com mov temp,dx add temp,0bh mov dx,temp out dx, al pop dx endm;選擇input_select macropush axpush dx mov ah, 0ch mov al, 06h mov dl, 0ffh int 21h mov ah,01h int 21h mov parm,al pop dx pop axendmcode segmentmain proc far assume cs:code,ds:d

7、atastart: mov ax,datamov ds,axoutput mainmenuinput_selectmov al,parmcmp al,32hjl selectcom1je selectcom2cmp al,34hjl selectcom3je selectcom4jg prooverselectcom1: mov ax,com1mov com,axjmp initcselectcom2:mov ax,com2mov com,axjmp initcselectcom3:mov ax,com3mov com,axjmp initcselectcom4:mov ax,com4mov

8、com,axjmp initcinitc: call init_comprostart: output topinput_selectmov al,parm cmp al,32h jl call_send je call_rev jg proovercall_send: call near ptr send_megjmp prostartcall_rev: call near ptr rev_meg jmp prostartproover: mov ax, 4c00hint 21hmain endp ;初始化端口init_com proc nearpush axpush dxmov al,80

9、hmov dx,commov temp,dxadd temp,0bhmov dx,tempout dx,almov al,0chmov dx,commov temp,dxadd temp,08hmov dx,tempout dx,almov al,0mov dx,commov temp,dxadd temp,09hmov dx,tempout dx,almov al,00001110b ;7bit for data 2bit for stop,hava testmov dx,commov temp,dxadd temp,0bhmov dx,tempout dx,almov al,0fhmov

10、dx,commov temp,dxadd temp,09hmov dx,tempout dx,almov al,0bhmov dx,commov temp,dxadd temp,0chmov dx,tempout dx,alpop dxpop axretinit_com endp ;發(fā)送一個(gè)字符 sendch proc near setclr 0ch mov parm, al ; puts parm ; 顯示字符 lcrdlmov dx,commov temp,dx add temp,0dh mov dx, temp ; 狀態(tài)口send: in al, dx ; 讀狀態(tài) test al, 20

11、h ; 發(fā)送就緒? jz sendmov dx,commov temp,dx add temp,08h mov dx, temp ; 數(shù)據(jù)口 mov al, parm out dx, al ret sendch endp ; 從串口接收一個(gè)字符 recvch proc near lcrdlmov dx,commov temp,dx add temp,0dh mov dx, temp ; 狀態(tài)口 in al, dx ; 讀狀態(tài) test al, 01h ; 收到數(shù)據(jù)? jz norecvmov dx,commov temp,dx add temp,08h mov dx, temp ; 數(shù)據(jù)口 i

12、n al, dx setclr 0ah mov parm, al ; 顯示 puts parmnorecv: ret ; nop recvch endp;發(fā)送信息send_meg proc near push ax push dx output send_tip jmp getkeykeyrd: mov ah, 0ch ; 清除鍵盤緩沖區(qū) mov al, 06h mov dl, 0ffh int 21hgetkey: mov ah, 1 ; 讀取鍵盤輸入 int 21h cmp al,escape ; esc鍵結(jié)束發(fā)送 je oversend cmp al, 32 ; 排除不可見字符 jl k

13、eyrd cmp al,126 jg keyrd call sendch jmp keyrd oversend: call sendch pop dx pop ax ret send_meg endp;接收信息rev_meg proc near push ax push dx output rev_tiprev: call recvch cmp al, escape je overrev jmp revoverrev: pop dx pop ax ret rev_meg endpcode endsend start2、測(cè)試:a)創(chuàng)建虛擬端口b)選擇端口c) 選擇操作d) 發(fā)送接收數(shù)據(jù) e) 發(fā)

14、送結(jié)束f)退出 選擇3,正常退出五分析與總結(jié) 本次設(shè)計(jì)為用匯編編寫程序,實(shí)現(xiàn)雙機(jī)串行通信,能正確進(jìn)行文件或字符的發(fā)送和接收。萬(wàn)事開頭難,在設(shè)計(jì)開始時(shí),完全不知道如果下手。只能硬著頭皮做下去,其中遇到的問題以及解決方法如下:1、 第一步當(dāng)然是先做界面。但是因?yàn)楫?dāng)時(shí)匯編沒學(xué)好,連編譯器怎么用都忘了。無(wú)奈之下,去百度文庫(kù)下了一份msam5.0的教程,重新學(xué)習(xí)了msam的編譯、執(zhí)行、調(diào)試。而在編寫界面代碼之時(shí),才真正受了匯編沒學(xué)好的苦。拿著匯編的課本,不斷地查指令和dos系統(tǒng)功能調(diào)用表,程序不斷出現(xiàn)錯(cuò)誤,比如忘了在字符串結(jié)束處加入$。經(jīng)過一個(gè)晚上的奮斗,終于初步解決了匯編語(yǔ)言問題。不得不佩服韓順平老師

15、的一句話:“計(jì)算機(jī)是在做中學(xué)的學(xué)科”。2、 第二步是把所寫的界面代碼結(jié)構(gòu)化。這是在看王爽的匯編這本書中得到的啟示。不過在結(jié)構(gòu)化方面,我不知道應(yīng)該選擇宏還是選擇子程序。雖然我傾向于子程序,不過宏在參數(shù)傳遞部分很像c語(yǔ)言,所以我一開始還是選擇了宏。這是我噩夢(mèng)的開始,因?yàn)樵谡{(diào)試的時(shí)候,編譯器無(wú)法確定具體的錯(cuò)誤位置,使得調(diào)試非常麻煩。不得已,我將一大部分較為復(fù)雜的宏改為子程序。3、 第三步是發(fā)送數(shù)據(jù)。發(fā)送數(shù)據(jù)之前當(dāng)然是要對(duì)串口進(jìn)行初始化。這一部分我借鑒了書中的程序,還算成功??墒窃诎l(fā)送數(shù)據(jù)的時(shí)候我蒙了,完全不知道怎么做,把接口與通信的課本中提到8250的知識(shí)再看了一遍,發(fā)現(xiàn)以前懵懂的地方都清晰了好多,再把一些疑問往百度一貼,大概明白了設(shè)計(jì)的思路。就是在一對(duì)互連的的端口中,一端發(fā)送一端接收,主要用in和out指令,輸入輸出的地址都是規(guī)定好的。在一開始可以用虛擬串口軟件虛擬兩個(gè)互連的端口。本著這種思路,我開始畫程序流程圖,并且將代碼結(jié)構(gòu)寫出。4、 第四步是測(cè)試發(fā)送數(shù)據(jù)是否成功。因?yàn)闆]有寫接收的代碼,所以測(cè)試方面,我用了一個(gè)串口測(cè)試軟件,將其波特率,數(shù)據(jù)位,停止位,校驗(yàn)位等設(shè)置好,測(cè)試是否能接收到。當(dāng)然錯(cuò)誤是避免不了的,一開始發(fā)送時(shí),系統(tǒng)總是出現(xiàn)錯(cuò)誤提示,而程序就直接掛了。懷疑是串口問題,在用其它串口的時(shí)候發(fā)現(xiàn)每次都要修改代碼重新

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論