版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 課程設計報告</b></p><p> ( 2012-- 2013年度第 1 學期)</p><p> 名 稱:微型計算機原理及應用</p><p> 題 目:用8255A實現(xiàn)四位十進制數(shù)簡單計算器</p><p> 院 系:控制與計算機工程學院</p>
2、<p> 班 級:自動化1003班</p><p> 日期:2013 年 1 月 5 日</p><p> 課程設計的目的與要求</p><p> 課程設計是培養(yǎng)和鍛煉學生在學習完本門課后綜合應用所學理論知識,解決實際工程設計和應用問題的能力的重要教學環(huán)節(jié)。它具有動手、動腦和理論聯(lián)系實際的特點,是培養(yǎng)在校工科大學生理論聯(lián)系實際、敢于動手、
3、善于動手和獨立自主解決設計實踐中遇到的各種問題能力的一個重要教學環(huán)節(jié)。</p><p> 通過課程設計,要求學生熟悉和掌握微機系統(tǒng)的軟件、硬件設計的方法、設計步驟,使學生得到微機開發(fā)應用方面的初步訓練。讓學生獨立或集體討論設計題目的總體設計方案、編程、軟件硬件調(diào)試、編寫設計報告等問題,真正做到理論聯(lián)系實際,提高動手能力和分析問題、解決問題的能力,實現(xiàn)由學習知識到應用知識的初步過渡。通過本次課程設計使學生熟練掌握
4、微機系統(tǒng)與接口擴展電路的設計方法,熟練應用8086匯編語言編寫應用程序和實際設計中的硬軟件調(diào)試方法和步驟,熟悉微機系統(tǒng)的硬軟件開發(fā)工具的使用方法。</p><p> 我組根據(jù)微機原理課程所學相關知識及實驗教程相關內(nèi)容,在基于proteus平臺,使用匯編語言,以8086為核心的情況下,配合可編程并行接口器件8255A,LED數(shù)碼管等器件實現(xiàn)可進行簡單四位數(shù)加減乘除法功能的十進制計算器。在課程設計實踐中,我們不僅鍛
5、煉了實際動手能力,培養(yǎng)了團隊精神和嚴肅認真的工作態(tài)度,更增強了自己在實際的工程設計中查閱資料,撰寫設計報告表達設計思想和結(jié)果的能力。</p><p> 課程設計進度及任務分工</p><p> 課設進度:1.選擇課程設計題目,查閱相關資料。(全體組員)</p><p> 2.需求分析及總體設計。(全體組員)</p><p> 3.軟硬
6、件設計。(范昌負責主程序的框架與整體調(diào)試、LED數(shù)碼顯示部分及硬件構架,賈旭負責鍵盤管理部分,郭歡、劉玉婷負責算法及相關程序)</p><p> 4.仿真調(diào)試。(范昌、賈旭)</p><p> 5.總結(jié)及撰寫設計報告。(郭歡、劉玉婷)</p><p> 6.個人總結(jié)(全體組員)</p><p><b> 三、設計正文<
7、/b></p><p><b> 需求分析</b></p><p> 操控核心微處理器8086芯片</p><p> 可編程并行接口芯片8255A</p><p> 可編程定時/計數(shù)器8253A</p><p> 對輸入掃描的矩陣鍵盤</p><p> 顯
8、示模塊LED數(shù)碼管</p><p> 輔助器件如74LS138譯碼器、74LS373等</p><p><b> 總體設計</b></p><p> 確定鍵盤是否有輸入(使用程序不斷進行掃描)</p><p> 若有輸入就調(diào)用子程序進行判斷,是數(shù)值則進行存儲并同時進行顯示,是運算符號等就調(diào)用相應的子程序進行操作&
9、lt;/p><p> 繼續(xù)掃描鍵盤是否有輸入,從而實現(xiàn)4位十進制數(shù)以內(nèi)的加減乘除法或者擴展功能運算</p><p> 運算完成后將運算的結(jié)果儲存并顯示到LED顯示器上</p><p><b> 硬件設計</b></p><p><b> 見附錄。</b></p><p>
10、<b> 軟件設計</b></p><p><b> 見附錄。</b></p><p> 四、課程設計總結(jié)或結(jié)論</p><p><b> ?。?)個人總結(jié)</b></p><p> 本次課程設計我們做的課題是用8255A實現(xiàn)4位十進制數(shù)簡易計算器,四人一組,我負責主程
11、序的框架與整體調(diào)試、LED數(shù)碼顯示部分及硬件構架。對于主程序的框架,是整個計算器的核心,通過與其他組員的商量我們最終確定了我們的主要算法:通過一個4*4鍵盤,輸入數(shù)據(jù),實現(xiàn)加減乘除操作,將輸入的數(shù)據(jù)和運算符分別存儲,接收到“=”時進行運算,并將結(jié)果輸出。</p><p> 看起來簡單的算法,由于涉及到十進制和十六進制的轉(zhuǎn)換,其中就需要很多中間的轉(zhuǎn)換程序。經(jīng)過反復修改與查閱資料,我們的程序最終能夠完成部分預期功能
12、。</p><p> 我還負責LED數(shù)碼管顯示部分的程序,四位七段數(shù)碼管的顯示,原理看起來簡單,但是實際操作時卻有各種各樣的毛病,按照原理寫好程序,往往不能達到預期效果,數(shù)碼管又是不顯示,有時會顯示亂碼,有時會閃爍,所有這些,都要一步一步調(diào)試,加入合適的延時程序是關鍵,延時過長、過短都不好。顯示亂碼是程序方面出了問題,經(jīng)過一次次調(diào)試,終于得到了穩(wěn)定的顯示,</p><p> 我對數(shù)碼管
13、的應用也更熟練了。</p><p> 由于我之前有接觸過proteus仿真軟件,所以我負責硬件的搭建,熟悉使用proteus軟件對我們專業(yè)來說是一項基本技能,通過一次次摸索與百度,我對這個軟件的使用也越來越熟悉,學會了怎么連總線,怎么仿真,怎么快速連線,以及常用元件的搜索。其中最讓我滿足的是鍵盤的設計,如果用16個按鈕排列當然可以實現(xiàn)我們的要求,但是每次按按鈕有很不方便,所以我在網(wǎng)上查詢資料,學會了用prote
14、us自身的模型制作自己的元件,上圖左邊是普通矩陣鍵盤,右圖是我利用proteus自身模型制作的的鍵盤,感覺很滿意。整個硬件仿真的搭建,由于對軟件的不熟悉,本身設計的問題,花了我很長時間,而且重復連接了很多次,最后我們成功仿真出了我們的計算器。</p><p> 通過本次課程設計,就我本身來說我學會了很多東西,無論是軟件上匯編語言程序的編寫與調(diào)試,還是硬件的搭建技巧與相關軟件的應用的能力都得到了很大提高,同時也鍛
15、煉了我的自我學習能力與交流合作能力,相關軟件的學習使用,相關芯片與元件的使用與選擇能力都在一定程度上有了很大進步。同時,軟硬件的結(jié)合,也體現(xiàn)了我們自動化專業(yè)的特點。</p><p> 最后,有一點遺憾的就是做好了四位的簡易計算器,我們想進一步擴展做成八位的計算器,但是難度有所加大,不是想象中的那么簡單,數(shù)碼管顯示部分就花了很大精力去調(diào)試。最后由于時間關系沒有完成8位計算器的制作。</p><
16、p><b> ?。?)團隊總結(jié)</b></p><p> 本次課程設計,我們是四人一組,團隊合作的要求就比較高。因為選題的關系,需要更多的人合作,所以決定四人組隊,各自發(fā)揮特長。</p><p> 在設計過程中,我們配合得很好,初期的查閱資料共享,極大地體現(xiàn)了我們?nèi)藬?shù)上的優(yōu)勢。對于整個設計的交流更讓我們在大方向上走上了正確的道路,少走了很多彎路。我們的課題看
17、起來簡單,其實不然,仔細分析,涉及的知識面很廣,很考驗我們的基本功和自學能力。軟件方面的算法由于是大家一起討論后決定的,一般都是可行的,也有很多難點,比如說十進制與十六進制的轉(zhuǎn)換,數(shù)據(jù)的輸出與存儲等,但是在我們的通力合作下一一解決了我們面臨的很多難題。硬件方面用的是proteus軟件仿真,硬件電路的設計也是一個難點,但是通過查閱資料與相互交流,我們的電路最終是可行的,雖然之前失敗了好幾次。軟件和硬件的結(jié)合再一次考驗了我們的合作精神,軟件
18、是建立在硬件上的,硬件體現(xiàn)軟件的功能,主要負責硬件和組要負責軟件的同學建立了很好的默契,相互學習,圓滿的完成了任務。</p><p> 本次課程設計我們對自己的成果相對比較滿意,在設計的過程中,大家相互學習,相互幫助,都收獲很多。但是我們也有很多不足的地方,比如四位的計算器位數(shù)太少,不能進行小數(shù)運算等,這些都是對我們能力的極大挑戰(zhàn),為了解決這些問題我們也進行了積極探索,設計了一個八位的簡單計算器,但是由于時間有
19、限,沒能完成設計。</p><p><b> 五、參考文獻</b></p><p> [1]《清華大學TPC—2003A實驗指導書》,2006版</p><p> [2]《新編16/32位微型計算機原理及應用》,李繼燦主編,清華大學出版社,2008版,第四版</p><p> [3] 陳繼紅.微機原理及應用[M]
20、.北京:高等教育出版社,2011年,276-283頁</p><p> [4] 周明德.微型計算機系統(tǒng)原理及應用[M].北京:清華大學出版社,2007年</p><p><b> 附錄</b></p><p><b> 軟件設計</b></p><p><b> 總程序流程圖<
21、;/b></p><p><b> 掃描程序流程圖</b></p><p><b> 程序代碼</b></p><p> ??;8255A端口地址:A口:40H,B口:44H,C口:42H,控制端口:46H</p><p> DATA SEGMENT</p><p&g
22、t; XDB? , ? , ? , ?;存放數(shù)據(jù)的每一位</p><p> X1DW ?;存放第一個數(shù)據(jù)值</p><p> X2DW?;存放第二個數(shù)據(jù)值</p><p> YDW?;存放運算結(jié)果</p><p> SDB? ;存放運算符號值</p>&
23、lt;p> EDB? ;按下等號鍵標記</p><p> CC DB? ;存放運算數(shù)據(jù)位數(shù)</p><p> HDB0 ;存放按鍵行號</p><p> LDB0 ;存放按鍵列號</p><p> DISCODEDB 3FH,06H
24、,5BH,4FH,</p><p> 66H,6DH,7DH,07H,</p><p> 7FH,6FH,77H,7CH,</p><p> 39H,5EH,79H,71H;段碼表</p><p> DATA ENDS</p><p> CODE SEGMENT</p><p&g
25、t; ASSUMECS:CODE</p><p><b> DS:DATA</b></p><p> START:MOVAX,DATA</p><p><b> MOVDS,AX</b></p><p> MOVAL,90H ;設置為A口輸入,B口輸出,C口輸出<
26、/p><p> OUT46H,AL</p><p> MOVDI,OFFSET X+3;DI指向X的高位</p><p> KKK:CALLKEY ;掃描按鍵</p><p><b> JMPKKK</b></p><p> ;以下為按鍵掃描子程序,程序返回后,在變量H
27、和L中存放當前按鍵的行列號</p><p><b> KEY PROC</b></p><p> CHECK:CALLDISP ;等待按鍵按下的同時進行顯示</p><p> MOVAL,0F0H ;所有行輸出低電平</p><p> OUT44H,AL</p><p>
28、; INAL,40H</p><p> CMPAL,0FFH ;讀列值</p><p> JZ CHECK ;若都為高電平則無鍵按下,等待</p><p><b> MOVCX,50</b></p><p> LOOP$ ;延時消抖</p><
29、;p> INAL,DX ;重讀列值</p><p> CMPAL,0FFH</p><p> JZCHECK ;無鍵按下一直等待</p><p> MOVH,0 ;有鍵按下,先把行列號變量清0</p><p><b> MOVL,0</b></p
30、><p> MOVBL,01H</p><p> MOVBH,0FEH ;掃描法讀鍵值:從第一行開始測試,即PC0輸出低電平</p><p> NEXT:MOVAL,BH</p><p> OUT 44H,AL</p><p> NEXTH:INAL,40H ;讀列值,判斷是
31、第幾列有鍵按下</p><p> TESTAL,BL ;從第一列開始判斷</p><p><b> JZWAIT0</b></p><p><b> ROLBL,1</b></p><p> CMPBL,10H ;當前行狀態(tài)下沒有列有鍵按下,則轉(zhuǎn)為對下一行的測
32、試</p><p><b> JZNEXTL</b></p><p> INCH ;每判斷一列,列號加1</p><p> JMPNEXTH ;再對下一列進行判斷</p><p> NEXTL:MOVH,0</p><p> MOVBL,01H</p&
33、gt;<p> ROLBH,1 ;對下一行測試,讓下一個PC口輸出低電平</p><p> CMPBH,0EFH</p><p><b> JZEXIT</b></p><p><b> INCL</b></p><p><b> JMP
34、NEXT</b></p><p> WAIT0:INAL,40H ;若有鍵按下,則等該按鍵松開后再計算鍵值</p><p> CMPAL,0FFH</p><p> JNZWAIT0</p><p><b> MOVCX,50</b></p><p&g
35、t; LOOP$ ;延時消抖</p><p> INAL,40H</p><p> CMPAL,0FFH</p><p> JNZWAIT0</p><p> CALLKEYVALUE ;調(diào)計算鍵值子程序</p><p> EXIT:RET</p>
36、<p><b> KEY ENDP</b></p><p> ;以下為計算鍵值子程序,通過行列號計算鍵值(鍵值=行號*4+列號)鍵值存放在DL寄存器中</p><p> KEYVALUE PROC</p><p><b> MOVDL,L</b></p><p><b&
37、gt; MOVDH,H</b></p><p><b> SHLDL,1</b></p><p> SHLDL,1 ;列號乘4</p><p><b> ADDDL,DH</b></p><p> CMPDL,9 ;按下的是
38、數(shù)字鍵</p><p> JNGNUM_CALL</p><p><b> CMPDL,14</b></p><p> JLCONT_CALL ;按下的是運算鍵</p><p><b> CMPDL,14</b></p><p> JZOUTP_
39、CALL ;按下的是等于鍵</p><p><b> CMPDL,15</b></p><p> JZCLR_CALL ;按下的是清除鍵</p><p> NUM_CALL: CALLNUMBER ;調(diào)數(shù)字鍵處理子程序</p><p><b> JMPEXIT1&
40、lt;/b></p><p> CONT_CALL:MOVS,DL ;存放運算鍵的鍵值</p><p><b> MOVE,0</b></p><p> CALLCOUNT 調(diào)運算鍵處理子程序,計算第一個加數(shù)</p><p><b> JMPEXIT1
41、</b></p><p> OUTP_CALL:CALLOUTP ;調(diào)等號鍵處理子程序</p><p><b> JMPEXIT1</b></p><p> CLR_CALL:CALLCLEAR ;調(diào)清除鍵處理子程序</p><p> EXIT1:RE
42、T</p><p> KEYVALUE ENDP</p><p> ;以下為清除鍵處理子程序,按下清除鍵后,X變量全部清0</p><p> CLEAR PROC</p><p> MOVX[3],0</p><p> MOVX[2],0</p><p> MOVX[1],
43、0</p><p> MOVX[0],0</p><p><b> CALLBITP</b></p><p><b> RET</b></p><p> CLEAR ENDP</p><p> ;以下為等號鍵處理子程序,該子程序負責將第二個運算數(shù)據(jù)的數(shù)值計算出
44、來存入X2變量</p><p> ;并根據(jù)運算符號,調(diào)用相應的運算子程序</p><p> OUTP PROC</p><p><b> PUSHAX</b></p><p><b> PUSHDX</b></p><p><b> PUSHBX&
45、lt;/b></p><p><b> INCE</b></p><p> CALLCOUNT ;調(diào)運算鍵處理子程序,計算第二個運算數(shù)據(jù)</p><p><b> CMPS,10</b></p><p> JZADD_CALL ;運算符為加號,則調(diào)用加法子
46、程序</p><p><b> CMPS,11</b></p><p> JZSUB_CALL ;運算符為減號,則調(diào)用減法子程序</p><p><b> CMPS,12</b></p><p> JZMUL_CALL ;運算符為乘號,則調(diào)用乘法子程序</p&g
47、t;<p><b> CMPS,13</b></p><p> CALLDIVP ;運算符為除號,則調(diào)用除法子程序</p><p> JMPSTORE1</p><p> ADD_CALL:CALLADDP</p><p> JMPSTORE1</p>
48、<p> SUB_CALL:CALLSUBP</p><p> JMPSTORE1</p><p> MUL_CALL:CALLMULP</p><p> STORE1:MOVAX,Y</p><p> ;以下程序?qū)⒏鬟\算子程序返回的運算結(jié)果,按位分解,送入X變量</p><p>&
49、lt;b> MOVDX,0</b></p><p> MOVBX,1000</p><p><b> DIVBX</b></p><p> MOVX[0], AL</p><p><b> MOVAX,DX</b></p><p> M
50、OVBL,100</p><p><b> DIVBL</b></p><p> MOVX[1],AL</p><p><b> MOVAL,AH</b></p><p><b> MOVAH,0</b></p><p><b&g
51、t; MOVBL,10</b></p><p><b> DIVBL</b></p><p> MOVX[2],AL</p><p> MOVX[3],AH</p><p><b> POPBX</b></p><p><b> P
52、OPDX</b></p><p><b> POPAX</b></p><p><b> RET</b></p><p> OUTP ENDP</p><p> ;以下為運算鍵處理子程序,該程序?qū)⒌谝粋€運算數(shù)據(jù)的數(shù)值計算出來并存入X1變量</p><p&
53、gt; ;或者將第二個運算數(shù)據(jù)的數(shù)值計算出來并存入X2變量</p><p> ;將運算符的值存入S變量</p><p> COUNT PROC</p><p><b> PUSHAX</b></p><p><b> PUSHBX</b></p><p>&l
54、t;b> PUSHDX</b></p><p><b> MOVDX,0</b></p><p> CALLBITP ;測試X中的數(shù)據(jù)是多少位</p><p> CMPCC,4 ;輸入的數(shù)據(jù)是4位數(shù) ?</p><p><b> JZC
55、4</b></p><p> CMPCC,3 ;輸入的數(shù)據(jù)是3位數(shù) ?</p><p><b> JZ C3</b></p><p> CMPCC,2 ;輸入的數(shù)據(jù)是2位數(shù) ?</p><p><b> JZC2</b></p
56、><p> JMPC1 ;輸入的數(shù)據(jù)是1位數(shù) ?</p><p> C4:MOVAX,0</p><p> MOVAL,X[0]</p><p> MOV BX,1000</p><p><b> MUL BX</b></p><p&g
57、t; MOV DX,AX</p><p> C3:MOVAL,X[1]</p><p> MOV BL,100</p><p><b> MUL BL</b></p><p> ADD DX,AX</p><p> C2:MOV AL,X[2]</p>
58、<p><b> MOVBL,10</b></p><p><b> MULBL</b></p><p><b> ADDDX,AX</b></p><p> C1:MOVAL,X[3]</p><p><b> MOVAH,0<
59、/b></p><p><b> ADDDX,AX</b></p><p><b> CMPE,1</b></p><p><b> JNZX1_S</b></p><p> MOVX2,DX ;按下的是等號,則將第二個運算數(shù)據(jù)的值存入X2
60、變量</p><p><b> JMPEXIT3</b></p><p> X1_S:MOVX1,DX ;按下的是運算符號,則將第一個運算數(shù)據(jù)的值存X1變量</p><p> MOVX[3],0 ;清空X變量</p><p> MOVX[2],0</p><p&g
61、t; MOVX[1],0</p><p> MOV X[0],0</p><p> EXIT3: POP DX</p><p><b> POPBX</b></p><p><b> POPAX</b></p><p><b> RET&l
62、t;/b></p><p> COUNT ENDP</p><p> ;以下為數(shù)字鍵處理子程序</p><p> ;該程序,將輸入的數(shù)據(jù)按位存放在X變量中,并由CC記錄數(shù)據(jù)的位數(shù)</p><p> NUMBER PROC</p><p><b> CMPE,1</b><
63、/p><p> JNZCONTINUE</p><p><b> MOVE,0</b></p><p> CALLCLEAR</p><p> CONTINUE:CMPCC,0 ;目前數(shù)據(jù)為0位,即沒有數(shù)據(jù),則轉(zhuǎn)到SSS</p><p><b> JZS
64、SS</b></p><p><b> PUSHAX</b></p><p><b> PUSHDX</b></p><p> MOVAL,X[3]</p><p> MOVAH,X[2]</p><p> MOVDL,X[1]</p&g
65、t;<p> MOVDH,X[0]</p><p><b> MOV CX,8</b></p><p> LL:SHLAX, 1</p><p><b> RCLDX,1</b></p><p><b> LOOPLL</b></p&
66、gt;<p> MOVX[3],AL</p><p> MOVX[2],AH</p><p> MOVX[1],DL</p><p> MOVX[0],DH</p><p><b> POPDX</b></p><p><b> POPAX</
67、b></p><p> SSS:MOV [DI],DL ;將當前鍵入的數(shù)據(jù)存放到X的最低位</p><p> INCCC ;數(shù)據(jù)位數(shù)加1</p><p> CMPCC,4 ;判斷數(shù)據(jù)位數(shù)</p><p><b> JNGEXIT2</b></p&
68、gt;<p> MOVCC,0 ;如果數(shù)據(jù)超過4位,重新從最低位開始存放</p><p> MOVX[2],0</p><p> MOVX[1],0</p><p> MOV X[0],0</p><p> EXIT2: CALL DISP ;調(diào)顯示子程序,顯示輸入的數(shù)據(jù)&l
69、t;/p><p><b> RET</b></p><p> NUMBER ENDP</p><p><b> ;加法子程序</b></p><p> ADDP PROC</p><p><b> PUSHAX</b></p>
70、<p><b> MOVAX,X1</b></p><p><b> ADDAX,X2</b></p><p><b> MOVY,AX</b></p><p><b> POPAX</b></p><p><b>
71、RET</b></p><p> ADDP ENDP</p><p><b> ;減法子程序</b></p><p> SUBP PROC</p><p><b> PUSHAX</b></p><p><b> MOVAX,X1<
72、;/b></p><p><b> SUBAX,X2</b></p><p><b> MOV Y,AX</b></p><p><b> POP AX</b></p><p><b> RET</b></p><p
73、> SUBP ENDP</p><p><b> ;乘法子程序</b></p><p> MULP PROC</p><p><b> PUSHAX</b></p><p><b> PUSHDX</b></p><p> MO
74、V AX,X1</p><p><b> MOVDX,X2</b></p><p><b> MULDX</b></p><p><b> MOVY,AX</b></p><p><b> POPDX</b></p><
75、;p><b> POPAX</b></p><p><b> RET</b></p><p> MULP ENDP</p><p><b> ;除法子程序</b></p><p> DIVP PROC</p><p><b&g
76、t; PUSHAX</b></p><p><b> PUSHBX</b></p><p><b> PUSHDX</b></p><p><b> MOVDX,0</b></p><p> MOV AX,X1</p><p&
77、gt;<b> MOVBX,X2</b></p><p><b> DIV BX</b></p><p><b> MOVY,AX</b></p><p><b> POP DX</b></p><p><b> POP B
78、X</b></p><p><b> POP AX</b></p><p><b> RET</b></p><p> DIVP ENDP</p><p> ;顯示子程序 ,將X中的數(shù)值按位顯示出來</p><p> DISP PROC<
79、/p><p><b> PUSHBX</b></p><p><b> PUSH AX</b></p><p><b> MOVBH,0</b></p><p> LEA SI,DISCODE</p><p> CALLBITP
80、 ;測試X位數(shù)</p><p><b> CMP CC,4</b></p><p><b> JZ QIAN</b></p><p><b> CMP CC,3</b></p><p><b> JZ BAI</b><
81、/p><p><b> CMP CC,2</b></p><p><b> JZ SHI</b></p><p> CMP CC,1</p><p><b> JMP G</b></p><p> JMP NONE</
82、p><p> QIAN:MOVAH,11100000B ;從第4位開始顯示</p><p><b> MOVAL,AH</b></p><p> OUT 44H,AL</p><p> MOV BL,X[0]</p><p> MOV AL,[SI+BX]</p
83、><p> OUT 42H,AL</p><p> CALL DELY</p><p><b> MOV AL,0</b></p><p> OUT 42H,AL</p><p> BAI:MOVAH,11010000B ;從第3位開始顯示</p>&l
84、t;p> MOV AL,AH</p><p> OUT44H,AL</p><p> MOV BL,X[1]</p><p> MOV AL,[SI+BX]</p><p> OUT 42H,AL</p><p> CALL DELY</p><p> MO
85、V AL,0</p><p> OUT 42H,AL</p><p> SHI:MOV AH,10110000B ;從第2位開始顯示</p><p> MOV AL,AH</p><p> OUT 44H,AL</p><p> MOV BL,X[2]</p>&
86、lt;p> MOV AL,[SI+BX]</p><p> OUT 42H,AL</p><p> CALL DELY</p><p> MOV AL,0</p><p> OUT 42H,AL</p><p> G:MOV AH,01110000B ;從第1位開始顯示
87、</p><p><b> MOVAL,AH</b></p><p> OUT 44H,AL</p><p> MOV BL,X[3]</p><p> MOV AL,[SI+BX]</p><p> OUT 42H,AL</p><p> CALL
88、 DELY</p><p> JMP EXIT4</p><p> NONE: MOVAL,0 ;X中沒有數(shù)據(jù),不顯示</p><p> OUT42H,AL</p><p> EXIT4: POP AX</p><p><b> POP BX</b>
89、</p><p><b> RET</b></p><p> DISP ENDP</p><p> ;分析數(shù)據(jù)位數(shù)子程序</p><p> BITP PROC</p><p> CMP X[0],0 ;如果X[0]不為0,則數(shù)據(jù)為4位數(shù)</p>&l
90、t;p> JNZ FOURBIT</p><p> CMP X[1],0 ;如果X[1]不為0,則數(shù)據(jù)為3位數(shù)</p><p> JNZ THREEBIT</p><p> CMP X[2],0 ;如果X[2]不為0,則數(shù)據(jù)為2位數(shù)</p><p> JNZ TOWBIT&l
91、t;/p><p> CMP X[3],0 ;如果X[3]不為0,則數(shù)據(jù)為1位數(shù)</p><p> JNZ ONEBIT</p><p> JMP ZER0BIT ;否則,沒有數(shù)據(jù)</p><p> FOURBIT:MOVCC,4</p><p><b> JM
92、PEXIT5</b></p><p> THREEBIT: MOVCC,3</p><p> JMP EXIT5</p><p> TOWBIT: MOV CC,2</p><p> JMP EXIT5</p><p> ONEBIT: MOV CC,1</p&g
93、t;<p> JMP EXIT5</p><p> ZER0BIT: MOV CC,0</p><p> EXIT5: RET</p><p> BITP ENDP</p><p><b> ;延時子程序</b></p><p> DELY PROC&
94、lt;/p><p><b> PUSHCX</b></p><p> MOV CX,100</p><p><b> LOOP $</b></p><p><b> POP CX</b></p><p><b> RET<
95、/b></p><p> DELY ENDP</p><p> CODE ENDS</p><p> END START</p><p><b> 硬件設計</b></p><p> 1.微處理器8086</p><p> 當引腳接高電平時
96、,CPU工作于最小模式。此時,引腳信號24~31的含義及其功能如下: </p><p> (1)INTA/(interrupt acknowledge):可屏蔽中斷響應信號,輸出,低電平有效。 CPU通過信號對外設提出的可屏蔽中斷請求做出響應。為低電平時,表示CPU已經(jīng)響應外設的中斷請求,即將執(zhí)行中斷服務程序。</p><p> ?。?)ALE(address lock enable):
97、地址鎖存允許信號,輸出,高電平有效。 CPU利用ALE信號可以把AD15 ~AD0地址/數(shù)據(jù)、A19/S6~A16/S3地址/狀態(tài)線上的地址信息鎖存在地址鎖存器中。 </p><p> ?。?)DEN/(data enable):數(shù)據(jù)允許控制信號,輸出,三態(tài),低電平有效。信號用作總線收發(fā)器的選通控制信號。當為低電平時,表明CPU進行數(shù)據(jù)的讀/寫操作。 </p><p> ?。?)DT/(d
98、ata transmit or receive):數(shù)據(jù)發(fā)送/接收信號,輸出,三態(tài)。 DT/信號用來控制數(shù)據(jù)傳送的方向。DT/為高電平時,CPU發(fā)送數(shù)據(jù)到存儲器或I/O端口;DT/為低電平時,CPU接收來自存儲器或I/O端口的數(shù)據(jù)。</p><p> ?。?)IO/M/(memory I/O select):存儲器、I/O端口選擇控制信號。 信號指明當前CPU是選擇訪問存儲器還是訪問I/O端口。為高電平時訪問存儲器
99、,表示當前要進行CPU與存儲器之間的數(shù)據(jù)傳送。為低電平時,訪問I/O端口,表示當前要進行CPU與I/O端口之間的數(shù)據(jù)傳送。 </p><p> ?。?)WR/(write):寫信號,輸出,低電平有效。 信號有效時,表明CPU正在執(zhí)行寫總線周期,同時由信號決定是對存儲器還是對I/O端口執(zhí)行寫操作。</p><p> (7)HLDA(hold acknowledge):總線保持響應信號,輸出
100、,高電平有效。HLDA是與HOLD配合使用的聯(lián)絡信號。在HLDA有效期間,HLDA引腳輸出一個高電平有效的響應信號,同時總線將處于浮空狀態(tài),CPU讓出對總線的控制權,將其交付給申請使用總線的8237A控制器使用,總線使用完后,會使HOLD信號變?yōu)榈碗娖?,CPU又重新獲得對總線的控制權。</p><p> (8)HOLD(bus hold request):總線保持請求信號,輸入,高電平有效。在DMA數(shù)據(jù)傳送方式
101、中,由總線控制器8237A發(fā)出一個高電平有效的總線請求信號,通過HOLD引腳輸入到CPU,請求CPU讓出總線控制權。 </p><p> 2. 可編程并行接口芯片8255A</p><p> RESET:復位輸入線,當該輸入端外于高電平時,所有內(nèi)部寄存器(包括控制寄存器)均被清除,所有I/O 口均被置成輸入方式。</p><p> PA0~PA7:端口A 輸入
102、輸出線,一個8 位的數(shù)據(jù)輸出鎖存器/緩沖器, 一個 8 位的數(shù)據(jù)輸入鎖存器。</p><p> PB0~PB7:端口B 輸入輸出線,一個8 位的I/O 鎖存器, 一個 8 位的輸入輸出緩沖器。</p><p> PC0~PC7:端口C 輸入輸出線,一個8 位的數(shù)據(jù)輸出鎖存器/緩沖器, 一個 8 位的數(shù)據(jù)輸入緩沖器。端口C 可以通過工作方式設定而分成2 個4 位的端口, 每個 4 位的端
103、口包含一個4 位的鎖存器,分別與端口A 和端口B 配合使用,可作為控制信號輸出或狀態(tài)信號輸入端口。</p><p> CS:片選信號線,當這個輸入引腳為低電平時,表示芯片被選中,允許8255 與CPU 進行通訊。</p><p> RD:讀信號線,當這個輸入引腳為低電平時,允許8255 通過數(shù)據(jù)總線向CPU 發(fā)送數(shù)據(jù)或狀態(tài)信息,即CPU 從8255 讀取信息或數(shù)據(jù)。</p>
104、<p> WR:寫入信號,當這個輸入引腳為低電平時,允許CPU 將數(shù)據(jù)或控制字寫8255。</p><p> D0~D7:三態(tài)雙向數(shù)據(jù)總線,8255 與CPU 數(shù)據(jù)傳送的通道,當CPU 執(zhí)行輸入輸出指令時,通過它實現(xiàn)8 位數(shù)據(jù)的讀/寫操作,控制字和狀態(tài)信息也通過數(shù)據(jù)總線傳送。</p><p> 8255 的讀寫控制:</p><p> 8255
105、 的讀/寫控制邏輯電路接受CPU 發(fā)來的控制口號RD、WR、RESET 和地址信號A1~A0。然后根據(jù)命令端口,控制信號的要求,將端口的數(shù)據(jù)讀出選信CPU 或者將CPU送來的數(shù)據(jù)寫入端口,各端口的工作狀態(tài)。通過用輸出指令對8255A 的控制字寄存器編程,寫入設定工作方式的控制字,可以讓3個數(shù)據(jù)口以不同的方式工作,端口A 可工作于3 種方式的任一種,端口B 只能工作于方式0 和方式1,端口C 除了用于輸入輸出端口外,還能配合A 口和B 口
106、工作,為這兩個端口的輸入輸出操作提供聯(lián)系信號。</p><p> 3.可編程定時/計數(shù)器8253A</p><p> 8253A的引腳可以分為兩部分:與CPU的接口引腳和與外設的接口引腳。</p><p> (1) 與CPU的接口引腳 </p><p> D0~D7:三態(tài)雙向數(shù)據(jù)線,和CPU數(shù)據(jù)總線相連,用于傳輸CPU與82
107、53之間的數(shù)據(jù)信息、控制信息和狀態(tài)信息。</p><p> CS:片選信息,輸入、低電平有效。</p><p> A1、A0:用來對8253A片內(nèi)三個計數(shù)通道和控制字寄存器進行尋址。</p><p> RD:讀信號,輸入,低電平有效。</p><p> WR:寫信號,輸入,低電平有效。</p><p> (2
108、) 與外設的接口引腳</p><p> CLK:時鐘輸入引腳,用于輸入定時脈沖或計數(shù)脈沖信號。計數(shù)器對這個引腳輸入的脈沖進行計數(shù)。</p><p> GATE:門控輸入端。用于外部控制計數(shù)器的啟動計數(shù)和停止計數(shù)的操作。兩個或兩個以上計數(shù)器連用時,可以用此信號來同步,也可用于與外部某信號的同步。</p><p> OUT:計數(shù)輸出端。不管8253以何種方式工作,
109、當計數(shù)器計數(shù)到0時,在OUT引腳上必定有輸出。在不同模式下,可輸出不同形式的信號。</p><p><b> 4.LED數(shù)碼管</b></p><p> LED為發(fā)光二極管構成的顯示器件,亦稱數(shù)碼管。由7個字符段和一個小數(shù)點段組成,每段對應一個發(fā)光二極管,當發(fā)光二極管點亮時,相應的字符段點亮。LED有共陰極和共陽極兩種供應狀態(tài)。共陰極顯示時,將LED顯示的COM接
110、地,將八個字符段端a、b、c、d、e、f、g、dp依次與一個8位I/O口的最低到最高位連接,當I/O給LED的哪個字符段送入一個高電平時,該段就被點亮,從而可從這7個字符段中被點亮的構成相應的字符顯示出來。同理,COM陽極即將COM端接Vcc,其顯示原理與COM陰極的基本相同,但I/O口送入低電平是相應的段才被點亮。 </p><p><b> 5.4×4矩陣按鍵</b><
111、/p><p> 鍵盤是信息輸入元件,由一個個按鈕組成,如果是獨立按鈕的話必須要需要一個I/O口對它進行檢測。因為4×4矩陣鍵盤有8個管腳,于是將鍵盤接8255A的PC口。因為進行鍵盤掃描一般要求有一部分的I/O口的工作方式是輸入,另一部分I/O是輸出,具體到4×4鍵盤則要求4個I/O口輸入,另外4個輸出,這一點PC口剛好符合,而PA、PB口要么全部輸入或輸出,所以只能是PC口接鍵盤。</p
112、><p><b> 4x4矩陣按鍵面板</b></p><p> 6.74L138譯碼器</p><p> ?、佼斠粋€選通端(E1)為高電平,另兩個選通端((/E2))和/(E3))為低電平時,可將地址端(A0、A1、A2)的二進制編碼在Y0至Y7對應的輸出端以低電平譯出。比如:A2A1A0=110時,則Y6輸出端輸出低電平信號。 </p
113、><p> ?、诶?E1、E2和E3可級聯(lián)擴展成 24 線譯碼器;若外接一個反相器還可級聯(lián)擴展成 32 線譯碼器。 </p><p> ?、廴魧⑦x通端中的一個作為數(shù)據(jù)輸入端時,74LS138還可作數(shù)據(jù)分配器。 </p><p> ?、芸捎迷?086的譯碼電路中,擴展內(nèi)存。</p><p> 7.74LS373D 鎖存器 </p>
114、<p> 373為三態(tài)輸出的八 D 透明鎖存器,共有 54S373 和 74LS373 兩種線路。</p><p> ?、佼斎龖B(tài)允許控制端 OE 為低電平時,Q0~Q7為正常邏輯狀態(tài),可用來驅(qū)動負載或總線。當 OE 為高電平時,Q0~Q7 呈高阻態(tài),即不驅(qū)動總線,也不為總線的負載,但鎖存器內(nèi)部的邏輯操作不受影響。 </p><p> ?、诋旀i存允許端 LE 為高電平時,Q 隨
115、數(shù)據(jù) D 而變。當 LE 為低電平時,D 被鎖存在已建立的數(shù)據(jù)電平。當 LE 端施密特觸發(fā)器的輸入滯后作用,使交流和直流噪聲抗擾度被改善 400mV。 </p><p><b> ?、垡龆朔枺?lt;/b></p><p> D0~D7 數(shù)據(jù)輸入端 </p><p> OE 三態(tài)允許控制端(低電平有效) </p><p&g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設計十進制加法計算器設計
- 單片機課程設計報告---設計十進制加減乘法計算器
- 課程設計--十進制加減法計算器單片機設計
- 微機原理課程設計--應用8255a和8位ad變換器實現(xiàn)多路數(shù)據(jù)的采集
- 微機課程設計設計-應用8255a實現(xiàn)交通燈控制
- 微機原理簡易計算器課程設計
- 微機原理課程設計--簡易計算器設計
- 微機課程設計--計算器
- 數(shù)據(jù)結(jié)構課程設計—十進制四則運算計算器的設計與實現(xiàn)
- 微機課程設計--計算器
- 微機課程設計報告--8255273實現(xiàn)六位簡單計算器
- eda課程設計---十進制加法計數(shù)器
- eda課程設計--十進制加法計數(shù)器
- 微機課程設計--簡易計算器
- eda專業(yè)課程設計--用vhdl來實現(xiàn)八位二—十進制異步計數(shù)器
- 數(shù)電課程設計報告--兩位十進制計數(shù)顯示器
- eda課程設計--八位十進制頻率計
- 課程設計---應用8255a實現(xiàn)交通燈控制設計
- eda課程設計--2位十進制四則運算器電路
- eda課程設計--2位十進制四則運算器電路
評論
0/150
提交評論