版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課 程 設(shè) 計(jì)</b></p><p> 課程名稱_接口與通信_(tái)__________</p><p> 題目名稱__雙擊串行通信 _______</p><p> 學(xué)生學(xué)院__計(jì)算機(jī)學(xué)院__________</p><p> 專業(yè)班級(jí)__計(jì)算機(jī)科學(xué)與技術(shù)2班</p>&
2、lt;p> 學(xué) 號(hào)____________</p><p> 學(xué)生姓名________________</p><p> 指導(dǎo)教師________________</p><p> 200 年 月 日</p><p> 一. 課程設(shè)計(jì)的內(nèi)容</p><p> 編寫(xiě)程序,實(shí)現(xiàn)雙機(jī)
3、串行通信,能正確進(jìn)行文件或字符的發(fā)送和接收。</p><p><b> 二. 相關(guān)技術(shù)</b></p><p> 1、8250串行通信初始化及收發(fā)數(shù)據(jù)</p><p><b> 2、匯編語(yǔ)言</b></p><p> 3、虛擬串口軟件及串口測(cè)試軟件的使用</p><p&g
4、t; 4、masm和link編譯器的使用</p><p><b> 三. 方案設(shè)計(jì)</b></p><p> 根據(jù)8250串行口的發(fā)送接收原理,在程序開(kāi)始時(shí)一定要先對(duì)8250進(jìn)行初始化,設(shè)置相應(yīng)的參數(shù),使8250串行口工作在合理的工作狀態(tài)。進(jìn)行相關(guān)協(xié)議的設(shè)置——即什么時(shí)候發(fā)送,什么時(shí)候接收,接收跟發(fā)送通過(guò)什么來(lái)進(jìn)行響應(yīng),保證數(shù)據(jù)傳送的正確性。我設(shè)計(jì)的程序所采用的
5、是查詢機(jī)制,雖然效率不及中斷機(jī)制高,但是簡(jiǎn)單易行。</p><p> 在代碼階段,雖然匯編的可讀性和結(jié)構(gòu)性都不是很好,但是我還是希望我的代碼能做到清晰易讀,所以我采取了兩種方案</p><p> 如果需要傳遞參數(shù),則使用宏使代碼結(jié)構(gòu)化</p><p> 如果不需要參數(shù),則使用子程序,使代碼結(jié)構(gòu)化的同時(shí),調(diào)試簡(jiǎn)單</p><p> 程序
6、設(shè)計(jì)如以下流程圖</p><p><b> 程序總流程圖</b></p><p><b> 發(fā)送輸入字符流程圖</b></p><p><b> 發(fā)送一個(gè)字符流程圖</b></p><p><b> 接收字符流程圖</b></p>&
7、lt;p><b> 接收一個(gè)字符流程圖</b></p><p><b> 四. 實(shí)現(xiàn)與測(cè)試</b></p><p><b> 1、實(shí)現(xiàn)的源碼:</b></p><p> ESCAPE EQU 1BH</p><p><b> ;定義堆棧<
8、;/b></p><p> STACKSG SEGMENT STACK 'S'</p><p> DW 64 DUP(?)</p><p> STACKSG ENDS</p><p> DATA SEGMENT</p><p> CHOICE DB ?</p>&
9、lt;p> Parm DB ?,'$'</p><p><b> COM DW ?</b></p><p><b> TEMP DW ?</b></p><p> COM1 DW 3f0H</p><p> COM2 DW 2f0H</p><
10、p> COM3 DW 3e0H</p><p> COM4 DW 2e0H</p><p> TOP DB 0DH,0AH,'------------------------------------------------------------'</p><p> DB 0DH,0AH,' Computer Serial
11、 Communication ------Colin'</p><p> DB 0DH,0AH,'-----------------------------------------------------------'</p><p> OPTMENU DB 0DH,0AH,' 1.Send Message
12、 '</p><p> DB 0DH,0AH,' 2.Recive Message '</p><p> DB 0DH,0AH,' 3.EXIT
13、 '</p><p> SELECT_STR DB 0DH,0AH,'Please input your choice:',0DH,0AH,'$'</p><p> SEND_TIP DB 0DH,0AH,'Please input your message(esc to exit):',0
14、DH,0AH,'$'</p><p> REV_TIP DB 0DH,0AH,'Your rev message:',0DH,0AH,'$'</p><p> MAINMENU DB 0DH,0AH,'Select COM: '&
15、lt;/p><p> DB 0DH,0AH,' 1.COM1 '</p><p> DB 0DH,0AH,' 2.COM2 '</p><
16、;p> DB 0DH,0AH,' 3.COM3 '</p><p> DB 0DH,0AH,' 4.COM4 '</p><p> DB 0DH
17、,0AH,' 5.EXIT '</p><p> DB 0DH,0AH,'Please input your choice:$'</p><p><b> DATA ENDS</b></p><p><
18、b> ;定義宏</b></p><p> ; 設(shè)置顯示顏色(4字節(jié)有效)</p><p> SETCLR MACRO COLOR</p><p> PUSH CX</p><p> PUSH BX</p><p> PUSH AX</p><p&
19、gt; MOV AH, 9</p><p> MOV AL, ' '</p><p> MOV BH, 0</p><p> MOV BL, COLOR</p><p> MOV CX, 4</p><p> INT 10H</p>
20、<p> POP AX</p><p> POP BX</p><p> POP CX</p><p><b> ENDM</b></p><p><b> ;回顯一個(gè)字符</b></p><p> PUTS MACRO
21、 S</p><p> PUSH DX</p><p> PUSH AX</p><p> MOV AH, 9</p><p> LEA DX, S</p><p> INT 21H</p><p> POP AX</p>
22、<p> POP DX</p><p><b> ENDM</b></p><p><b> ;輸出字符串</b></p><p> OUTPUT MACRO S</p><p> PUSH DX</p><p> PUSH AX&
23、lt;/p><p> MOV AH, 9</p><p> LEA DX, S</p><p> INT 21H</p><p> POP AX</p><p> POP DX</p><p><b> ENDM</b><
24、;/p><p><b> ;將最高位清零</b></p><p> LCRDL MACRO</p><p><b> PUSH DX</b></p><p> MOV AL,1FH</p><p> MOV DX,COM</p><p>
25、MOV TEMP,DX</p><p> ADD TEMP,0BH</p><p> MOV DX,TEMP</p><p> OUT DX, AL</p><p><b> POP DX</b></p><p><b> ENDM</b></p>&
26、lt;p><b> ;選擇</b></p><p> INPUT_SELECT MACRO</p><p><b> PUSH AX</b></p><p><b> PUSH DX</b></p><p> MOV AH, 0CH </p>
27、<p> MOV AL, 06H</p><p> MOV DL, 0FFH</p><p><b> INT 21H</b></p><p> MOV AH,01H</p><p><b> INT 21H</b></p><p> MOV Par
28、m,AL</p><p><b> POP DX</b></p><p><b> POP AX</b></p><p><b> ENDM</b></p><p> CODE SEGMENT</p><p> MAIN PROC FAR<
29、;/p><p> ASSUME CS:CODE,DS:DATA</p><p> START: </p><p> MOV AX,DATA</p><p><b> MOV DS,AX</b></p><p> OUTPUT MAIN
30、MENU</p><p> INPUT_SELECT</p><p> MOV AL,[Parm]</p><p> CMP AL,32H</p><p> JL SELECTCOM1</p><p> JE SELECTCOM2</p><p> CMP AL,34H</p&
31、gt;<p> JL SELECTCOM3</p><p> JE SELECTCOM4</p><p> JG PROOVER</p><p> SELECTCOM1:</p><p> MOV AX,COM1</p><p> MOV COM,AX</p><p&g
32、t;<b> JMP INITC</b></p><p> SELECTCOM2:</p><p> MOV AX,COM2</p><p> MOV COM,AX</p><p><b> JMP INITC</b></p><p> SELECTCOM3:
33、</p><p> MOV AX,COM3</p><p> MOV COM,AX</p><p><b> JMP INITC</b></p><p> SELECTCOM4:</p><p> MOV AX,COM4</p><p> MOV COM,AX
34、</p><p><b> JMP INITC</b></p><p><b> INITC:</b></p><p> CALL INIT_COM</p><p><b> PROSTART:</b></p><p> OUTPUT TO
35、P</p><p> INPUT_SELECT</p><p> MOV AL,[Parm]</p><p> CMP AL,32H</p><p> JL CALL_SEND</p><p> JE CALL_REV</p><p> JG PROOVER</p>&
36、lt;p> CALL_SEND: </p><p> CALL NEAR PTR SEND_MEG</p><p> JMP PROSTART</p><p><b> CALL_REV:</b></p><p> CALL NEAR PTR REV_MEG</p><p>
37、 JMP PROSTART</p><p><b> PROOVER:</b></p><p> MOV AX, 4C00H</p><p><b> INT 21H</b></p><p><b> MAIN ENDP</b></p><p>
38、<b> ;初始化端口</b></p><p> INIT_COM PROC NEAR</p><p><b> PUSH AX</b></p><p><b> PUSH DX</b></p><p> MOV AL,80H</p><p>
39、 MOV DX,COM</p><p> MOV TEMP,DX</p><p> ADD TEMP,0BH</p><p> MOV DX,TEMP</p><p><b> OUT DX,AL</b></p><p> MOV AL,0CH</p><p>
40、 MOV DX,COM</p><p> MOV TEMP,DX</p><p> ADD TEMP,08H</p><p> MOV DX,TEMP</p><p><b> OUT DX,AL</b></p><p><b> MOV AL,0</b><
41、/p><p> MOV DX,COM</p><p> MOV TEMP,DX</p><p> ADD TEMP,09H</p><p> MOV DX,TEMP</p><p><b> OUT DX,AL</b></p><p> MOV AL,0000111
42、0B ;7bit for data 2bit for stop,hava test</p><p> MOV DX,COM</p><p> MOV TEMP,DX</p><p> ADD TEMP,0BH</p><p> MOV DX,TEMP</p><p><b> OUT DX,AL
43、</b></p><p> MOV AL,0FH</p><p> MOV DX,COM</p><p> MOV TEMP,DX</p><p> ADD TEMP,09H</p><p> MOV DX,TEMP</p><p><b> OUT DX,AL
44、</b></p><p> MOV AL,0BH</p><p> MOV DX,COM</p><p> MOV TEMP,DX</p><p> ADD TEMP,0CH</p><p> MOV DX,TEMP</p><p><b> OUT DX,AL
45、</b></p><p><b> POP DX</b></p><p><b> POP AX</b></p><p><b> RET</b></p><p> INIT_COM ENDP</p><p><b> ;
46、發(fā)送一個(gè)字符</b></p><p> SENDCH PROC NEAR</p><p> SETCLR 0CH</p><p> MOV Parm, AL </p><p> ; PUTS Parm ; 顯示[字符]</p><p><b>
47、 LCRDL</b></p><p> MOV DX,COM</p><p> MOV TEMP,DX</p><p> ADD TEMP,0DH</p><p> MOV DX, TEMP ; 狀態(tài)口</p><p> SEND: IN AL, DX
48、 ; 讀狀態(tài)</p><p> TEST AL, 20H ; 發(fā)送就緒?</p><p> JZ SEND</p><p> MOV DX,COM</p><p> MOV TEMP,DX</p><p> ADD TEMP,08H</p>
49、<p> MOV DX, TEMP ; 數(shù)據(jù)口</p><p> MOV AL, [Parm]</p><p> OUT DX, AL</p><p><b> RET</b></p><p> SENDCH ENDP</p><p> ;
50、 從串口接收一個(gè)字符 </p><p> RECVCH PROC NEAR</p><p><b> LCRDL</b></p><p> MOV DX,COM</p><p> MOV TEMP,DX</p><p> ADD TEMP,0DH</p>
51、<p> MOV DX, TEMP ; 狀態(tài)口</p><p> IN AL, DX ; 讀狀態(tài)</p><p> TEST AL, 01H ; 收到數(shù)據(jù)?</p><p> JZ NORECV</p><p> MOV DX,COM<
52、/p><p> MOV TEMP,DX</p><p> ADD TEMP,08H</p><p> MOV DX, TEMP ; 數(shù)據(jù)口</p><p> IN AL, DX</p><p> SETCLR 0AH</p><p> MOV
53、 Parm, AL ; 顯示<字符></p><p> PUTS Parm</p><p> NORECV: </p><p> RET ; NOP </p><p> RECVCH ENDP</p><p><b> ;發(fā)送信息</b
54、></p><p> SEND_MEG PROC NEAR</p><p><b> PUSH AX</b></p><p><b> PUSH DX</b></p><p> OUTPUT SEND_TIP</p><p> JMP GETKEY</p
55、><p> KEYRD: MOV AH, 0CH ; 清除鍵盤(pán)緩沖區(qū)</p><p> MOV AL, 06H</p><p> MOV DL, 0FFH</p><p> INT 21H</p><p> GETKEY: MOV AH, 1 ; 讀取
56、鍵盤(pán)輸入</p><p><b> INT 21H</b></p><p> CMP AL,ESCAPE ; ESC鍵結(jié)束發(fā)送</p><p> JE OVERSEND </p><p> CMP AL, 32 ; 排除不可見(jiàn)字符</p><p>
57、 JL KEYRD</p><p> CMP AL,126</p><p> JG KEYRD</p><p> CALL SENDCH</p><p> JMP KEYRD</p><p> OVERSEND: </p><p> CALL SEND
58、CH </p><p><b> POP DX</b></p><p><b> POP AX</b></p><p> RET </p><p> SEND_MEG ENDP</p><p><b> ;接收信息</b><
59、;/p><p> REV_MEG PROC NEAR</p><p><b> PUSH AX</b></p><p><b> PUSH DX</b></p><p> OUTPUT REV_TIP</p><p> REV: CALL RECVCH<
60、/p><p> CMP AL, ESCAPE </p><p> JE OVERREV</p><p><b> JMP REV</b></p><p><b> OVERREV:</b></p><p><b> POP DX</b></
61、p><p><b> POP AX</b></p><p><b> RET </b></p><p> REV_MEG ENDP</p><p><b> CODE ENDS</b></p><p><b> END STAR
62、T</b></p><p><b> 2、測(cè)試:</b></p><p><b> a)創(chuàng)建虛擬端口</b></p><p><b> b)選擇端口</b></p><p><b> 選擇操作</b></p><p&
63、gt;<b> 發(fā)送接收數(shù)據(jù) </b></p><p><b> 發(fā)送結(jié)束</b></p><p><b> f)退出</b></p><p><b> 選擇3,正常退出</b></p><p><b> 五.分析與總結(jié)</b&g
64、t;</p><p> 本次設(shè)計(jì)為用匯編編寫(xiě)程序,實(shí)現(xiàn)雙機(jī)串行通信,能正確進(jìn)行文件或字符的發(fā)送和接收。萬(wàn)事開(kāi)頭難,在設(shè)計(jì)開(kāi)始時(shí),完全不知道如果下手。只能硬著頭皮做下去,其中遇到的問(wèn)題以及解決方法如下:</p><p> 第一步當(dāng)然是先做界面。但是因?yàn)楫?dāng)時(shí)匯編沒(méi)學(xué)好,連編譯器怎么用都忘了。無(wú)奈之下,去百度文庫(kù)下了一份msam5.0的教程,重新學(xué)習(xí)了msam的編譯、執(zhí)行、調(diào)試。而在編寫(xiě)界面
65、代碼之時(shí),才真正受了匯編沒(méi)學(xué)好的苦。拿著匯編的課本,不斷地查指令和DOS系統(tǒng)功能調(diào)用表,程序不斷出現(xiàn)錯(cuò)誤,比如忘了在字符串結(jié)束處加入’$’。經(jīng)過(guò)一個(gè)晚上的奮斗,終于初步解決了匯編語(yǔ)言問(wèn)題。不得不佩服韓順平老師的一句話:“計(jì)算機(jī)是在做中學(xué)的學(xué)科”。</p><p> 第二步是把所寫(xiě)的界面代碼結(jié)構(gòu)化。這是在看《王爽的匯編》這本書(shū)中得到的啟示。不過(guò)在結(jié)構(gòu)化方面,我不知道應(yīng)該選擇宏還是選擇子程序。雖然我傾向于子程序,不
66、過(guò)宏在參數(shù)傳遞部分很像C語(yǔ)言,所以我一開(kāi)始還是選擇了宏。這是我噩夢(mèng)的開(kāi)始,因?yàn)樵谡{(diào)試的時(shí)候,編譯器無(wú)法確定具體的錯(cuò)誤位置,使得調(diào)試非常麻煩。不得已,我將一大部分較為復(fù)雜的宏改為子程序。</p><p> 第三步是發(fā)送數(shù)據(jù)。發(fā)送數(shù)據(jù)之前當(dāng)然是要對(duì)串口進(jìn)行初始化。這一部分我借鑒了書(shū)中的程序,還算成功。可是在發(fā)送數(shù)據(jù)的時(shí)候我蒙了,完全不知道怎么做,把接口與通信的課本中提到8250的知識(shí)再看了一遍,發(fā)現(xiàn)以前懵懂的地方都
67、清晰了好多,再把一些疑問(wèn)往百度一貼,大概明白了設(shè)計(jì)的思路。就是在一對(duì)互連的的端口中,一端發(fā)送一端接收,主要用in和out指令,輸入輸出的地址都是規(guī)定好的。在一開(kāi)始可以用虛擬串口軟件虛擬兩個(gè)互連的端口。本著這種思路,我開(kāi)始畫(huà)程序流程圖,并且將代碼結(jié)構(gòu)寫(xiě)出。</p><p> 第四步是測(cè)試發(fā)送數(shù)據(jù)是否成功。因?yàn)闆](méi)有寫(xiě)接收的代碼,所以測(cè)試方面,我用了一個(gè)串口測(cè)試軟件,將其波特率,數(shù)據(jù)位,停止位,校驗(yàn)位等設(shè)置好,測(cè)試是
68、否能接收到。當(dāng)然錯(cuò)誤是避免不了的,一開(kāi)始發(fā)送時(shí),系統(tǒng)總是出現(xiàn)錯(cuò)誤提示,而程序就直接掛了。懷疑是串口問(wèn)題,在用其它串口的時(shí)候發(fā)現(xiàn)每次都要修改代碼重新編譯,非常麻煩。所以在程序入口處,加入了串口選擇功能。最后在單步執(zhí)行的時(shí)候發(fā)現(xiàn),是高位清零的宏中,串口地址賦值錯(cuò)誤。改正后,終于發(fā)送成功了。</p><p> 第五步是接收數(shù)據(jù)。有了前面的經(jīng)驗(yàn),這時(shí)顯得比較輕松,出現(xiàn)的一些代碼問(wèn)題都能解決。</p>&l
69、t;p> 每次的課程設(shè)計(jì)都是對(duì)自己能力的升華。這次課程設(shè)計(jì),然后有了挑戰(zhàn)苦難的信心,本來(lái)一頭霧水的設(shè)計(jì),通過(guò)一步步做下來(lái),竟然解決了,當(dāng)時(shí)的成就感不言而喻。而在對(duì)于端口的理解和匯編語(yǔ)言的掌握程度,毫無(wú)疑問(wèn)地前進(jìn)了一大步!</p><p><b> 附參考書(shū)目</b></p><p> [1] 余永權(quán),湯榮江《計(jì)算機(jī)接口與通信》</p><
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 雙擊串行通信
- 接口與通信課程設(shè)計(jì)--雙機(jī)通信
- 雙機(jī)串行通信課程設(shè)計(jì)
- 串行通信接口
- 串行通信微機(jī)原理課程設(shè)計(jì)--串行通信實(shí)現(xiàn)文件傳輸
- 課程設(shè)計(jì) 雙機(jī)串行通信的實(shí)現(xiàn)
- 接口與通信課程設(shè)計(jì)--雙pc通信系統(tǒng)設(shè)計(jì)
- 微機(jī)原理與接口串行通信
- 畢業(yè)設(shè)計(jì)---串行通信接口設(shè)計(jì)
- 接口課程設(shè)計(jì)報(bào)告——雙機(jī)通信
- pc機(jī)與單片機(jī)串行通信課程設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)報(bào)告-雙機(jī)串行通信
- dsp-串行通信接口sci
- 串行通信接口標(biāo)準(zhǔn)詳解
- 串行通信接口技術(shù)分析與應(yīng)用設(shè)計(jì).pdf
- 串行通信系統(tǒng)微機(jī)課程設(shè)計(jì)說(shuō)明書(shū)
- 單片機(jī)課程設(shè)計(jì)---雙機(jī)之間的串行通信設(shè)計(jì)
- ch18-串行通信與可編程串行接口8251
- 接口與通信課程設(shè)計(jì)--水塔水位控制器系統(tǒng)
- 基于串行通信的交流變頻調(diào)速系統(tǒng)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論