微機(jī)原理課程設(shè)計(jì)(用8255a實(shí)現(xiàn)4位十進(jìn)制計(jì)算器)_第1頁(yè)
已閱讀1頁(yè),還剩20頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  課程設(shè)計(jì)報(bào)告</b></p><p>  ( 2012-- 2013年度第 1 學(xué)期)</p><p>  名 稱(chēng):微型計(jì)算機(jī)原理及應(yīng)用</p><p>  題 目:用8255A實(shí)現(xiàn)四位十進(jìn)制數(shù)簡(jiǎn)單計(jì)算器</p><p>  院 系:控制與計(jì)算機(jī)工程學(xué)院</p>

2、<p>  班 級(jí):自動(dòng)化1003班</p><p>  日期:2013 年 1 月 5 日</p><p>  課程設(shè)計(jì)的目的與要求</p><p>  課程設(shè)計(jì)是培養(yǎng)和鍛煉學(xué)生在學(xué)習(xí)完本門(mén)課后綜合應(yīng)用所學(xué)理論知識(shí),解決實(shí)際工程設(shè)計(jì)和應(yīng)用問(wèn)題的能力的重要教學(xué)環(huán)節(jié)。它具有動(dòng)手、動(dòng)腦和理論聯(lián)系實(shí)際的特點(diǎn),是培養(yǎng)在校工科大學(xué)生理論聯(lián)系實(shí)際、敢于動(dòng)手、

3、善于動(dòng)手和獨(dú)立自主解決設(shè)計(jì)實(shí)踐中遇到的各種問(wèn)題能力的一個(gè)重要教學(xué)環(huán)節(jié)。</p><p>  通過(guò)課程設(shè)計(jì),要求學(xué)生熟悉和掌握微機(jī)系統(tǒng)的軟件、硬件設(shè)計(jì)的方法、設(shè)計(jì)步驟,使學(xué)生得到微機(jī)開(kāi)發(fā)應(yīng)用方面的初步訓(xùn)練。讓學(xué)生獨(dú)立或集體討論設(shè)計(jì)題目的總體設(shè)計(jì)方案、編程、軟件硬件調(diào)試、編寫(xiě)設(shè)計(jì)報(bào)告等問(wèn)題,真正做到理論聯(lián)系實(shí)際,提高動(dòng)手能力和分析問(wèn)題、解決問(wèn)題的能力,實(shí)現(xiàn)由學(xué)習(xí)知識(shí)到應(yīng)用知識(shí)的初步過(guò)渡。通過(guò)本次課程設(shè)計(jì)使學(xué)生熟練掌握

4、微機(jī)系統(tǒng)與接口擴(kuò)展電路的設(shè)計(jì)方法,熟練應(yīng)用8086匯編語(yǔ)言編寫(xiě)應(yīng)用程序和實(shí)際設(shè)計(jì)中的硬軟件調(diào)試方法和步驟,熟悉微機(jī)系統(tǒng)的硬軟件開(kāi)發(fā)工具的使用方法。</p><p>  我組根據(jù)微機(jī)原理課程所學(xué)相關(guān)知識(shí)及實(shí)驗(yàn)教程相關(guān)內(nèi)容,在基于proteus平臺(tái),使用匯編語(yǔ)言,以8086為核心的情況下,配合可編程并行接口器件8255A,LED數(shù)碼管等器件實(shí)現(xiàn)可進(jìn)行簡(jiǎn)單四位數(shù)加減乘除法功能的十進(jìn)制計(jì)算器。在課程設(shè)計(jì)實(shí)踐中,我們不僅鍛

5、煉了實(shí)際動(dòng)手能力,培養(yǎng)了團(tuán)隊(duì)精神和嚴(yán)肅認(rèn)真的工作態(tài)度,更增強(qiáng)了自己在實(shí)際的工程設(shè)計(jì)中查閱資料,撰寫(xiě)設(shè)計(jì)報(bào)告表達(dá)設(shè)計(jì)思想和結(jié)果的能力。</p><p>  課程設(shè)計(jì)進(jìn)度及任務(wù)分工</p><p>  課設(shè)進(jìn)度:1.選擇課程設(shè)計(jì)題目,查閱相關(guān)資料。(全體組員)</p><p>  2.需求分析及總體設(shè)計(jì)。(全體組員)</p><p>  3.軟硬

6、件設(shè)計(jì)。(范昌負(fù)責(zé)主程序的框架與整體調(diào)試、LED數(shù)碼顯示部分及硬件構(gòu)架,賈旭負(fù)責(zé)鍵盤(pán)管理部分,郭歡、劉玉婷負(fù)責(zé)算法及相關(guān)程序)</p><p>  4.仿真調(diào)試。(范昌、賈旭)</p><p>  5.總結(jié)及撰寫(xiě)設(shè)計(jì)報(bào)告。(郭歡、劉玉婷)</p><p>  6.個(gè)人總結(jié)(全體組員)</p><p><b>  三、設(shè)計(jì)正文<

7、/b></p><p><b>  需求分析</b></p><p>  操控核心微處理器8086芯片</p><p>  可編程并行接口芯片8255A</p><p>  可編程定時(shí)/計(jì)數(shù)器8253A</p><p>  對(duì)輸入掃描的矩陣鍵盤(pán)</p><p>  顯

8、示模塊LED數(shù)碼管</p><p>  輔助器件如74LS138譯碼器、74LS373等</p><p><b>  總體設(shè)計(jì)</b></p><p>  確定鍵盤(pán)是否有輸入(使用程序不斷進(jìn)行掃描)</p><p>  若有輸入就調(diào)用子程序進(jìn)行判斷,是數(shù)值則進(jìn)行存儲(chǔ)并同時(shí)進(jìn)行顯示,是運(yùn)算符號(hào)等就調(diào)用相應(yīng)的子程序進(jìn)行操作&

9、lt;/p><p>  繼續(xù)掃描鍵盤(pán)是否有輸入,從而實(shí)現(xiàn)4位十進(jìn)制數(shù)以?xún)?nèi)的加減乘除法或者擴(kuò)展功能運(yùn)算</p><p>  運(yùn)算完成后將運(yùn)算的結(jié)果儲(chǔ)存并顯示到LED顯示器上</p><p><b>  硬件設(shè)計(jì)</b></p><p><b>  見(jiàn)附錄。</b></p><p>

10、<b>  軟件設(shè)計(jì)</b></p><p><b>  見(jiàn)附錄。</b></p><p>  四、課程設(shè)計(jì)總結(jié)或結(jié)論</p><p><b> ?。?)個(gè)人總結(jié)</b></p><p>  本次課程設(shè)計(jì)我們做的課題是用8255A實(shí)現(xiàn)4位十進(jìn)制數(shù)簡(jiǎn)易計(jì)算器,四人一組,我負(fù)責(zé)主程

11、序的框架與整體調(diào)試、LED數(shù)碼顯示部分及硬件構(gòu)架。對(duì)于主程序的框架,是整個(gè)計(jì)算器的核心,通過(guò)與其他組員的商量我們最終確定了我們的主要算法:通過(guò)一個(gè)4*4鍵盤(pán),輸入數(shù)據(jù),實(shí)現(xiàn)加減乘除操作,將輸入的數(shù)據(jù)和運(yùn)算符分別存儲(chǔ),接收到“=”時(shí)進(jìn)行運(yùn)算,并將結(jié)果輸出。</p><p>  看起來(lái)簡(jiǎn)單的算法,由于涉及到十進(jìn)制和十六進(jìn)制的轉(zhuǎn)換,其中就需要很多中間的轉(zhuǎn)換程序。經(jīng)過(guò)反復(fù)修改與查閱資料,我們的程序最終能夠完成部分預(yù)期功能

12、。</p><p>  我還負(fù)責(zé)LED數(shù)碼管顯示部分的程序,四位七段數(shù)碼管的顯示,原理看起來(lái)簡(jiǎn)單,但是實(shí)際操作時(shí)卻有各種各樣的毛病,按照原理寫(xiě)好程序,往往不能達(dá)到預(yù)期效果,數(shù)碼管又是不顯示,有時(shí)會(huì)顯示亂碼,有時(shí)會(huì)閃爍,所有這些,都要一步一步調(diào)試,加入合適的延時(shí)程序是關(guān)鍵,延時(shí)過(guò)長(zhǎng)、過(guò)短都不好。顯示亂碼是程序方面出了問(wèn)題,經(jīng)過(guò)一次次調(diào)試,終于得到了穩(wěn)定的顯示,</p><p>  我對(duì)數(shù)碼管

13、的應(yīng)用也更熟練了。</p><p>  由于我之前有接觸過(guò)proteus仿真軟件,所以我負(fù)責(zé)硬件的搭建,熟悉使用proteus軟件對(duì)我們專(zhuān)業(yè)來(lái)說(shuō)是一項(xiàng)基本技能,通過(guò)一次次摸索與百度,我對(duì)這個(gè)軟件的使用也越來(lái)越熟悉,學(xué)會(huì)了怎么連總線(xiàn),怎么仿真,怎么快速連線(xiàn),以及常用元件的搜索。其中最讓我滿(mǎn)足的是鍵盤(pán)的設(shè)計(jì),如果用16個(gè)按鈕排列當(dāng)然可以實(shí)現(xiàn)我們的要求,但是每次按按鈕有很不方便,所以我在網(wǎng)上查詢(xún)資料,學(xué)會(huì)了用prote

14、us自身的模型制作自己的元件,上圖左邊是普通矩陣鍵盤(pán),右圖是我利用proteus自身模型制作的的鍵盤(pán),感覺(jué)很滿(mǎn)意。整個(gè)硬件仿真的搭建,由于對(duì)軟件的不熟悉,本身設(shè)計(jì)的問(wèn)題,花了我很長(zhǎng)時(shí)間,而且重復(fù)連接了很多次,最后我們成功仿真出了我們的計(jì)算器。</p><p>  通過(guò)本次課程設(shè)計(jì),就我本身來(lái)說(shuō)我學(xué)會(huì)了很多東西,無(wú)論是軟件上匯編語(yǔ)言程序的編寫(xiě)與調(diào)試,還是硬件的搭建技巧與相關(guān)軟件的應(yīng)用的能力都得到了很大提高,同時(shí)也鍛

15、煉了我的自我學(xué)習(xí)能力與交流合作能力,相關(guān)軟件的學(xué)習(xí)使用,相關(guān)芯片與元件的使用與選擇能力都在一定程度上有了很大進(jìn)步。同時(shí),軟硬件的結(jié)合,也體現(xiàn)了我們自動(dòng)化專(zhuān)業(yè)的特點(diǎn)。</p><p>  最后,有一點(diǎn)遺憾的就是做好了四位的簡(jiǎn)易計(jì)算器,我們想進(jìn)一步擴(kuò)展做成八位的計(jì)算器,但是難度有所加大,不是想象中的那么簡(jiǎn)單,數(shù)碼管顯示部分就花了很大精力去調(diào)試。最后由于時(shí)間關(guān)系沒(méi)有完成8位計(jì)算器的制作。</p><

16、p><b> ?。?)團(tuán)隊(duì)總結(jié)</b></p><p>  本次課程設(shè)計(jì),我們是四人一組,團(tuán)隊(duì)合作的要求就比較高。因?yàn)檫x題的關(guān)系,需要更多的人合作,所以決定四人組隊(duì),各自發(fā)揮特長(zhǎng)。</p><p>  在設(shè)計(jì)過(guò)程中,我們配合得很好,初期的查閱資料共享,極大地體現(xiàn)了我們?nèi)藬?shù)上的優(yōu)勢(shì)。對(duì)于整個(gè)設(shè)計(jì)的交流更讓我們?cè)诖蠓较蛏献呱狭苏_的道路,少走了很多彎路。我們的課題看

17、起來(lái)簡(jiǎn)單,其實(shí)不然,仔細(xì)分析,涉及的知識(shí)面很廣,很考驗(yàn)我們的基本功和自學(xué)能力。軟件方面的算法由于是大家一起討論后決定的,一般都是可行的,也有很多難點(diǎn),比如說(shuō)十進(jìn)制與十六進(jìn)制的轉(zhuǎn)換,數(shù)據(jù)的輸出與存儲(chǔ)等,但是在我們的通力合作下一一解決了我們面臨的很多難題。硬件方面用的是proteus軟件仿真,硬件電路的設(shè)計(jì)也是一個(gè)難點(diǎn),但是通過(guò)查閱資料與相互交流,我們的電路最終是可行的,雖然之前失敗了好幾次。軟件和硬件的結(jié)合再一次考驗(yàn)了我們的合作精神,軟件

18、是建立在硬件上的,硬件體現(xiàn)軟件的功能,主要負(fù)責(zé)硬件和組要負(fù)責(zé)軟件的同學(xué)建立了很好的默契,相互學(xué)習(xí),圓滿(mǎn)的完成了任務(wù)。</p><p>  本次課程設(shè)計(jì)我們對(duì)自己的成果相對(duì)比較滿(mǎn)意,在設(shè)計(jì)的過(guò)程中,大家相互學(xué)習(xí),相互幫助,都收獲很多。但是我們也有很多不足的地方,比如四位的計(jì)算器位數(shù)太少,不能進(jìn)行小數(shù)運(yùn)算等,這些都是對(duì)我們能力的極大挑戰(zhàn),為了解決這些問(wèn)題我們也進(jìn)行了積極探索,設(shè)計(jì)了一個(gè)八位的簡(jiǎn)單計(jì)算器,但是由于時(shí)間有

19、限,沒(méi)能完成設(shè)計(jì)。</p><p><b>  五、參考文獻(xiàn)</b></p><p>  [1]《清華大學(xué)TPC—2003A實(shí)驗(yàn)指導(dǎo)書(shū)》,2006版</p><p>  [2]《新編16/32位微型計(jì)算機(jī)原理及應(yīng)用》,李繼燦主編,清華大學(xué)出版社,2008版,第四版</p><p>  [3] 陳繼紅.微機(jī)原理及應(yīng)用[M]

20、.北京:高等教育出版社,2011年,276-283頁(yè)</p><p>  [4] 周明德.微型計(jì)算機(jī)系統(tǒng)原理及應(yīng)用[M].北京:清華大學(xué)出版社,2007年</p><p><b>  附錄</b></p><p><b>  軟件設(shè)計(jì)</b></p><p><b>  總程序流程圖<

21、;/b></p><p><b>  掃描程序流程圖</b></p><p><b>  程序代碼</b></p><p> ?。?255A端口地址:A口:40H,B口:44H,C口:42H,控制端口:46H</p><p>  DATA SEGMENT</p><p&g

22、t;  XDB? , ? , ? , ?;存放數(shù)據(jù)的每一位</p><p>  X1DW ?;存放第一個(gè)數(shù)據(jù)值</p><p>  X2DW?;存放第二個(gè)數(shù)據(jù)值</p><p>  YDW?;存放運(yùn)算結(jié)果</p><p>  SDB? ;存放運(yùn)算符號(hào)值</p>&

23、lt;p>  EDB? ;按下等號(hào)鍵標(biāo)記</p><p>  CC DB? ;存放運(yùn)算數(shù)據(jù)位數(shù)</p><p>  HDB0 ;存放按鍵行號(hào)</p><p>  LDB0 ;存放按鍵列號(hào)</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 ;設(shè)置為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中存放當(dāng)前按鍵的行列號(hào)</p><p><b>  KEY PROC</b></p><p>  CHECK:CALLDISP ;等待按鍵按下的同時(shí)進(jìn)行顯示</p><p>  MOVAL,0F0H ;所有行輸出低電平</p><p>  OUT44H,AL</p><p>

28、;  INAL,40H</p><p>  CMPAL,0FFH ;讀列值</p><p>  JZ CHECK ;若都為高電平則無(wú)鍵按下,等待</p><p><b>  MOVCX,50</b></p><p>  LOOP$ ;延時(shí)消抖</p><

29、;p>  INAL,DX ;重讀列值</p><p>  CMPAL,0FFH</p><p>  JZCHECK ;無(wú)鍵按下一直等待</p><p>  MOVH,0 ;有鍵按下,先把行列號(hào)變量清0</p><p><b>  MOVL,0</b></p

30、><p>  MOVBL,01H</p><p>  MOVBH,0FEH ;掃描法讀鍵值:從第一行開(kāi)始測(cè)試,即PC0輸出低電平</p><p>  NEXT:MOVAL,BH</p><p>  OUT 44H,AL</p><p>  NEXTH:INAL,40H ;讀列值,判斷是

31、第幾列有鍵按下</p><p>  TESTAL,BL ;從第一列開(kāi)始判斷</p><p><b>  JZWAIT0</b></p><p><b>  ROLBL,1</b></p><p>  CMPBL,10H ;當(dāng)前行狀態(tài)下沒(méi)有列有鍵按下,則轉(zhuǎn)為對(duì)下一行的測(cè)

32、試</p><p><b>  JZNEXTL</b></p><p>  INCH ;每判斷一列,列號(hào)加1</p><p>  JMPNEXTH ;再對(duì)下一列進(jìn)行判斷</p><p>  NEXTL:MOVH,0</p><p>  MOVBL,01H</p&

33、gt;<p>  ROLBH,1 ;對(duì)下一行測(cè)試,讓下一個(gè)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 ;若有鍵按下,則等該按鍵松開(kāi)后再計(jì)算鍵值</p><p>  CMPAL,0FFH</p><p>  JNZWAIT0</p><p><b>  MOVCX,50</b></p><p&g

35、t;  LOOP$ ;延時(shí)消抖</p><p>  INAL,40H</p><p>  CMPAL,0FFH</p><p>  JNZWAIT0</p><p>  CALLKEYVALUE ;調(diào)計(jì)算鍵值子程序</p><p>  EXIT:RET</p>

36、<p><b>  KEY ENDP</b></p><p>  ;以下為計(jì)算鍵值子程序,通過(guò)行列號(hào)計(jì)算鍵值(鍵值=行號(hào)*4+列號(hào))鍵值存放在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 ;列號(hào)乘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 ;按下的是運(yùn)算鍵</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 ;存放運(yùn)算鍵的鍵值</p><p><b>  MOVE,0</b></p><p>  CALLCOUNT 調(diào)運(yùn)算鍵處理子程序,計(jì)算第一個(gè)加數(shù)</p><p><b>  JMPEXIT1

41、</b></p><p>  OUTP_CALL:CALLOUTP ;調(diào)等號(hà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>  ;以下為等號(hào)鍵處理子程序,該子程序負(fù)責(zé)將第二個(gè)運(yùn)算數(shù)據(jù)的數(shù)值計(jì)算出

44、來(lái)存入X2變量</p><p>  ;并根據(jù)運(yùn)算符號(hào),調(diào)用相應(yīng)的運(yùn)算子程序</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)運(yùn)算鍵處理子程序,計(jì)算第二個(gè)運(yùn)算數(shù)據(jù)</p><p><b>  CMPS,10</b></p><p>  JZADD_CALL ;運(yùn)算符為加號(hào),則調(diào)用加法子

46、程序</p><p><b>  CMPS,11</b></p><p>  JZSUB_CALL ;運(yùn)算符為減號(hào),則調(diào)用減法子程序</p><p><b>  CMPS,12</b></p><p>  JZMUL_CALL ;運(yùn)算符為乘號(hào),則調(diào)用乘法子程序</p&g

47、t;<p><b>  CMPS,13</b></p><p>  CALLDIVP ;運(yùn)算符為除號(hào),則調(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ū)⒏鬟\(yùn)算子程序返回的運(yùn)算結(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>  ;以下為運(yùn)算鍵處理子程序,該程序?qū)⒌谝粋€(gè)運(yùn)算數(shù)據(jù)的數(shù)值計(jì)算出來(lái)并存入X1變量</p><p&

53、gt;  ;或者將第二個(gè)運(yùn)算數(shù)據(jù)的數(shù)值計(jì)算出來(lái)并存入X2變量</p><p>  ;將運(yùn)算符的值存入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 ;測(cè)試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 ;按下的是等號(hào),則將第二個(gè)運(yùn)算數(shù)據(jù)的值存入X2

60、變量</p><p><b>  JMPEXIT3</b></p><p>  X1_S:MOVX1,DX ;按下的是運(yùn)算符號(hào),則將第一個(gè)運(yùn)算數(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位,即沒(méi)有數(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 ;將當(dāng)前鍵入的數(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ù)超過(guò)4位,重新從最低位開(kāi)始存放</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ù)值按位顯示出來(lái)</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、 ;測(cè)試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位開(kāi)始顯示</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位開(kāi)始顯示</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位開(kāi)始顯示</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位開(kāi)始顯示

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中沒(méi)有數(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 ;否則,沒(méi)有數(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>  ;延時(shí)子程序</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>  硬件設(shè)計(jì)</b></p><p>  1.微處理器8086</p><p>  當(dāng)引腳接高電平時(shí)

96、,CPU工作于最小模式。此時(shí),引腳信號(hào)24~31的含義及其功能如下: </p><p>  (1)INTA/(interrupt acknowledge):可屏蔽中斷響應(yīng)信號(hào),輸出,低電平有效。 CPU通過(guò)信號(hào)對(duì)外設(shè)提出的可屏蔽中斷請(qǐng)求做出響應(yīng)。為低電平時(shí),表示CPU已經(jīng)響應(yīng)外設(shè)的中斷請(qǐng)求,即將執(zhí)行中斷服務(wù)程序。</p><p> ?。?)ALE(address lock enable):

97、地址鎖存允許信號(hào),輸出,高電平有效。 CPU利用ALE信號(hào)可以把AD15 ~AD0地址/數(shù)據(jù)、A19/S6~A16/S3地址/狀態(tài)線(xiàn)上的地址信息鎖存在地址鎖存器中。 </p><p> ?。?)DEN/(data enable):數(shù)據(jù)允許控制信號(hào),輸出,三態(tài),低電平有效。信號(hào)用作總線(xiàn)收發(fā)器的選通控制信號(hào)。當(dāng)為低電平時(shí),表明CPU進(jìn)行數(shù)據(jù)的讀/寫(xiě)操作。 </p><p> ?。?)DT/(d

98、ata transmit or receive):數(shù)據(jù)發(fā)送/接收信號(hào),輸出,三態(tài)。 DT/信號(hào)用來(lái)控制數(shù)據(jù)傳送的方向。DT/為高電平時(shí),CPU發(fā)送數(shù)據(jù)到存儲(chǔ)器或I/O端口;DT/為低電平時(shí),CPU接收來(lái)自存儲(chǔ)器或I/O端口的數(shù)據(jù)。</p><p> ?。?)IO/M/(memory I/O select):存儲(chǔ)器、I/O端口選擇控制信號(hào)。 信號(hào)指明當(dāng)前CPU是選擇訪(fǎng)問(wèn)存儲(chǔ)器還是訪(fǎng)問(wèn)I/O端口。為高電平時(shí)訪(fǎng)問(wèn)存儲(chǔ)器

99、,表示當(dāng)前要進(jìn)行CPU與存儲(chǔ)器之間的數(shù)據(jù)傳送。為低電平時(shí),訪(fǎng)問(wèn)I/O端口,表示當(dāng)前要進(jìn)行CPU與I/O端口之間的數(shù)據(jù)傳送。 </p><p> ?。?)WR/(write):寫(xiě)信號(hào),輸出,低電平有效。 信號(hào)有效時(shí),表明CPU正在執(zhí)行寫(xiě)總線(xiàn)周期,同時(shí)由信號(hào)決定是對(duì)存儲(chǔ)器還是對(duì)I/O端口執(zhí)行寫(xiě)操作。</p><p> ?。?)HLDA(hold acknowledge):總線(xiàn)保持響應(yīng)信號(hào),輸出

100、,高電平有效。HLDA是與HOLD配合使用的聯(lián)絡(luò)信號(hào)。在HLDA有效期間,HLDA引腳輸出一個(gè)高電平有效的響應(yīng)信號(hào),同時(shí)總線(xiàn)將處于浮空狀態(tài),CPU讓出對(duì)總線(xiàn)的控制權(quán),將其交付給申請(qǐng)使用總線(xiàn)的8237A控制器使用,總線(xiàn)使用完后,會(huì)使HOLD信號(hào)變?yōu)榈碗娖?,CPU又重新獲得對(duì)總線(xiàn)的控制權(quán)。</p><p> ?。?)HOLD(bus hold request):總線(xiàn)保持請(qǐng)求信號(hào),輸入,高電平有效。在DMA數(shù)據(jù)傳送方式

101、中,由總線(xiàn)控制器8237A發(fā)出一個(gè)高電平有效的總線(xiàn)請(qǐng)求信號(hào),通過(guò)HOLD引腳輸入到CPU,請(qǐng)求CPU讓出總線(xiàn)控制權(quán)。 </p><p>  2. 可編程并行接口芯片8255A</p><p>  RESET:復(fù)位輸入線(xiàn),當(dāng)該輸入端外于高電平時(shí),所有內(nèi)部寄存器(包括控制寄存器)均被清除,所有I/O 口均被置成輸入方式。</p><p>  PA0~PA7:端口A(yíng) 輸入

102、輸出線(xiàn),一個(gè)8 位的數(shù)據(jù)輸出鎖存器/緩沖器, 一個(gè) 8 位的數(shù)據(jù)輸入鎖存器。</p><p>  PB0~PB7:端口B 輸入輸出線(xiàn),一個(gè)8 位的I/O 鎖存器, 一個(gè) 8 位的輸入輸出緩沖器。</p><p>  PC0~PC7:端口C 輸入輸出線(xiàn),一個(gè)8 位的數(shù)據(jù)輸出鎖存器/緩沖器, 一個(gè) 8 位的數(shù)據(jù)輸入緩沖器。端口C 可以通過(guò)工作方式設(shè)定而分成2 個(gè)4 位的端口, 每個(gè) 4 位的端

103、口包含一個(gè)4 位的鎖存器,分別與端口A(yíng) 和端口B 配合使用,可作為控制信號(hào)輸出或狀態(tài)信號(hào)輸入端口。</p><p>  CS:片選信號(hào)線(xiàn),當(dāng)這個(gè)輸入引腳為低電平時(shí),表示芯片被選中,允許8255 與CPU 進(jìn)行通訊。</p><p>  RD:讀信號(hào)線(xiàn),當(dāng)這個(gè)輸入引腳為低電平時(shí),允許8255 通過(guò)數(shù)據(jù)總線(xiàn)向CPU 發(fā)送數(shù)據(jù)或狀態(tài)信息,即CPU 從8255 讀取信息或數(shù)據(jù)。</p>

104、<p>  WR:寫(xiě)入信號(hào),當(dāng)這個(gè)輸入引腳為低電平時(shí),允許CPU 將數(shù)據(jù)或控制字寫(xiě)8255。</p><p>  D0~D7:三態(tài)雙向數(shù)據(jù)總線(xiàn),8255 與CPU 數(shù)據(jù)傳送的通道,當(dāng)CPU 執(zhí)行輸入輸出指令時(shí),通過(guò)它實(shí)現(xiàn)8 位數(shù)據(jù)的讀/寫(xiě)操作,控制字和狀態(tài)信息也通過(guò)數(shù)據(jù)總線(xiàn)傳送。</p><p>  8255 的讀寫(xiě)控制:</p><p>  8255

105、 的讀/寫(xiě)控制邏輯電路接受CPU 發(fā)來(lái)的控制口號(hào)RD、WR、RESET 和地址信號(hào)A1~A0。然后根據(jù)命令端口,控制信號(hào)的要求,將端口的數(shù)據(jù)讀出選信CPU 或者將CPU送來(lái)的數(shù)據(jù)寫(xiě)入端口,各端口的工作狀態(tài)。通過(guò)用輸出指令對(duì)8255A 的控制字寄存器編程,寫(xiě)入設(shè)定工作方式的控制字,可以讓3個(gè)數(shù)據(jù)口以不同的方式工作,端口A(yíng) 可工作于3 種方式的任一種,端口B 只能工作于方式0 和方式1,端口C 除了用于輸入輸出端口外,還能配合A 口和B 口

106、工作,為這兩個(gè)端口的輸入輸出操作提供聯(lián)系信號(hào)。</p><p>  3.可編程定時(shí)/計(jì)數(shù)器8253A</p><p>  8253A的引腳可以分為兩部分:與CPU的接口引腳和與外設(shè)的接口引腳。</p><p>  (1) 與CPU的接口引腳 </p><p>  D0~D7:三態(tài)雙向數(shù)據(jù)線(xiàn),和CPU數(shù)據(jù)總線(xiàn)相連,用于傳輸CPU與82

107、53之間的數(shù)據(jù)信息、控制信息和狀態(tài)信息。</p><p>  CS:片選信息,輸入、低電平有效。</p><p>  A1、A0:用來(lái)對(duì)8253A片內(nèi)三個(gè)計(jì)數(shù)通道和控制字寄存器進(jìn)行尋址。</p><p>  RD:讀信號(hào),輸入,低電平有效。</p><p>  WR:寫(xiě)信號(hào),輸入,低電平有效。</p><p>  (2

108、) 與外設(shè)的接口引腳</p><p>  CLK:時(shí)鐘輸入引腳,用于輸入定時(shí)脈沖或計(jì)數(shù)脈沖信號(hào)。計(jì)數(shù)器對(duì)這個(gè)引腳輸入的脈沖進(jìn)行計(jì)數(shù)。</p><p>  GATE:門(mén)控輸入端。用于外部控制計(jì)數(shù)器的啟動(dòng)計(jì)數(shù)和停止計(jì)數(shù)的操作。兩個(gè)或兩個(gè)以上計(jì)數(shù)器連用時(shí),可以用此信號(hào)來(lái)同步,也可用于與外部某信號(hào)的同步。</p><p>  OUT:計(jì)數(shù)輸出端。不管8253以何種方式工作,

109、當(dāng)計(jì)數(shù)器計(jì)數(shù)到0時(shí),在OUT引腳上必定有輸出。在不同模式下,可輸出不同形式的信號(hào)。</p><p><b>  4.LED數(shù)碼管</b></p><p>  LED為發(fā)光二極管構(gòu)成的顯示器件,亦稱(chēng)數(shù)碼管。由7個(gè)字符段和一個(gè)小數(shù)點(diǎn)段組成,每段對(duì)應(yīng)一個(gè)發(fā)光二極管,當(dāng)發(fā)光二極管點(diǎn)亮?xí)r,相應(yīng)的字符段點(diǎn)亮。LED有共陰極和共陽(yáng)極兩種供應(yīng)狀態(tài)。共陰極顯示時(shí),將LED顯示的COM接

110、地,將八個(gè)字符段端a、b、c、d、e、f、g、dp依次與一個(gè)8位I/O口的最低到最高位連接,當(dāng)I/O給LED的哪個(gè)字符段送入一個(gè)高電平時(shí),該段就被點(diǎn)亮,從而可從這7個(gè)字符段中被點(diǎn)亮的構(gòu)成相應(yīng)的字符顯示出來(lái)。同理,COM陽(yáng)極即將COM端接Vcc,其顯示原理與COM陰極的基本相同,但I(xiàn)/O口送入低電平是相應(yīng)的段才被點(diǎn)亮。 </p><p><b>  5.4×4矩陣按鍵</b><

111、/p><p>  鍵盤(pán)是信息輸入元件,由一個(gè)個(gè)按鈕組成,如果是獨(dú)立按鈕的話(huà)必須要需要一個(gè)I/O口對(duì)它進(jìn)行檢測(cè)。因?yàn)?×4矩陣鍵盤(pán)有8個(gè)管腳,于是將鍵盤(pán)接8255A的PC口。因?yàn)檫M(jìn)行鍵盤(pán)掃描一般要求有一部分的I/O口的工作方式是輸入,另一部分I/O是輸出,具體到4×4鍵盤(pán)則要求4個(gè)I/O口輸入,另外4個(gè)輸出,這一點(diǎn)PC口剛好符合,而PA、PB口要么全部輸入或輸出,所以只能是PC口接鍵盤(pán)。</p

112、><p><b>  4x4矩陣按鍵面板</b></p><p>  6.74L138譯碼器</p><p>  ①當(dāng)一個(gè)選通端(E1)為高電平,另兩個(gè)選通端((/E2))和/(E3))為低電平時(shí),可將地址端(A0、A1、A2)的二進(jìn)制編碼在Y0至Y7對(duì)應(yīng)的輸出端以低電平譯出。比如:A2A1A0=110時(shí),則Y6輸出端輸出低電平信號(hào)。 </p

113、><p>  ②利用 E1、E2和E3可級(jí)聯(lián)擴(kuò)展成 24 線(xiàn)譯碼器;若外接一個(gè)反相器還可級(jí)聯(lián)擴(kuò)展成 32 線(xiàn)譯碼器。 </p><p> ?、廴魧⑦x通端中的一個(gè)作為數(shù)據(jù)輸入端時(shí),74LS138還可作數(shù)據(jù)分配器。 </p><p>  ④可用在8086的譯碼電路中,擴(kuò)展內(nèi)存。</p><p>  7.74LS373D 鎖存器 </p>

114、<p>  373為三態(tài)輸出的八 D 透明鎖存器,共有 54S373 和 74LS373 兩種線(xiàn)路。</p><p>  ①當(dāng)三態(tài)允許控制端 OE 為低電平時(shí),Q0~Q7為正常邏輯狀態(tài),可用來(lái)驅(qū)動(dòng)負(fù)載或總線(xiàn)。當(dāng) OE 為高電平時(shí),Q0~Q7 呈高阻態(tài),即不驅(qū)動(dòng)總線(xiàn),也不為總線(xiàn)的負(fù)載,但鎖存器內(nèi)部的邏輯操作不受影響。 </p><p>  ②當(dāng)鎖存允許端 LE 為高電平時(shí),Q 隨

115、數(shù)據(jù) D 而變。當(dāng) LE 為低電平時(shí),D 被鎖存在已建立的數(shù)據(jù)電平。當(dāng) LE 端施密特觸發(fā)器的輸入滯后作用,使交流和直流噪聲抗擾度被改善 400mV。 </p><p><b> ?、垡龆朔?hào):</b></p><p>  D0~D7 數(shù)據(jù)輸入端 </p><p>  OE 三態(tài)允許控制端(低電平有效) </p><p&g

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論