單片機(jī)原理實(shí)_第1頁(yè)
單片機(jī)原理實(shí)_第2頁(yè)
單片機(jī)原理實(shí)_第3頁(yè)
單片機(jī)原理實(shí)_第4頁(yè)
單片機(jī)原理實(shí)_第5頁(yè)
已閱讀5頁(yè),還剩47頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、文檔來(lái)源為:從網(wǎng)絡(luò)收集整理.word版本可編輯.歡迎下載支持單片機(jī)原理實(shí)驗(yàn)講義郭海燕周小方編漳州師范學(xué)院物理與電子信息工程系2010年11月文檔來(lái)源為:從網(wǎng)絡(luò)收集整理.word版本可編輯.歡迎下載支持、八前言隨著微電子技術(shù)的發(fā)展,當(dāng)前各種電子設(shè)備中幾乎都能見到微控制器的身影,單片機(jī)原理課程是電子信息科學(xué)與技術(shù)、電子信息工程、電氣工程及其自動(dòng)化等本科專業(yè)學(xué)生的重要專業(yè)課,是這些專業(yè)學(xué)生首次學(xué)習(xí)與微控制器有關(guān)的課程,學(xué)好本課程內(nèi)容,掌握單片機(jī)應(yīng)用系統(tǒng)程序設(shè)計(jì)方法,養(yǎng)成良好的設(shè)計(jì)規(guī)范,對(duì)學(xué)生進(jìn)一步學(xué)習(xí)其它功能更強(qiáng)、復(fù)雜性更高的微控制器(或微處理器)有重要意義。課程主要講述51系列單片機(jī)的內(nèi)部結(jié)構(gòu)、指

2、令系統(tǒng)和編程設(shè)計(jì)方法,是一門實(shí)踐性很強(qiáng)的課程。本實(shí)驗(yàn)講義共安排六個(gè)實(shí)驗(yàn),分別為:實(shí)驗(yàn)一、單片機(jī)集成開發(fā)環(huán)境入門;實(shí)驗(yàn)二、I/O口輸入輸出實(shí)驗(yàn)循環(huán)燈程序設(shè)計(jì);實(shí)驗(yàn)三、I/O口輸入輸出實(shí)驗(yàn)LED數(shù)碼管動(dòng)態(tài)顯示與按鍵去抖程序設(shè)計(jì);實(shí)驗(yàn)四、定時(shí)器應(yīng)用實(shí)驗(yàn)一一LED數(shù)碼動(dòng)態(tài)顯示與矩陣鍵盤賦值程序設(shè)計(jì);實(shí)驗(yàn)五、計(jì)數(shù)器應(yīng)用實(shí)驗(yàn)一一基于熱敏電阻和555電路的簡(jiǎn)易溫度報(bào)警系統(tǒng)設(shè)計(jì);實(shí)驗(yàn)六、中斷實(shí)驗(yàn)一一簡(jiǎn)易溫度控制器設(shè)計(jì)。其中實(shí)驗(yàn)一是入門實(shí)驗(yàn),為基礎(chǔ)性實(shí)驗(yàn),另五個(gè)實(shí)驗(yàn)為設(shè)計(jì)性、綜合性實(shí)驗(yàn)。圍繞“簡(jiǎn)易溫度控制器”這個(gè)實(shí)際應(yīng)用系統(tǒng)的設(shè)計(jì)的各個(gè)環(huán)節(jié)展開,每個(gè)實(shí)驗(yàn)完成最終系統(tǒng)的一個(gè)或二個(gè)子模塊的設(shè)計(jì),最終將各模塊集成為一

3、個(gè)完整系統(tǒng)。本實(shí)驗(yàn)采用自制實(shí)驗(yàn)板,三名學(xué)生領(lǐng)用1套實(shí)驗(yàn)板和1條下載線,組成討論小組,以個(gè)人電腦為設(shè)計(jì)平臺(tái),利用課外時(shí)間完成設(shè)計(jì)、仿真和調(diào)試等前期工作,在利用課內(nèi)2課時(shí)時(shí)間集中進(jìn)行點(diǎn)評(píng)和設(shè)計(jì)總結(jié)。五個(gè)設(shè)計(jì)性、綜合性實(shí)驗(yàn)均采用“WAVE3.2”集成開發(fā)環(huán)境完成程序設(shè)計(jì)、仿真,并最終下載到自制的系統(tǒng)板中運(yùn)行,其設(shè)計(jì)、仿真、調(diào)試過(guò)程與真實(shí)的工程設(shè)計(jì)無(wú)異,全方位實(shí)踐CDIO工程教育理念,突出“構(gòu)思(Conceive)、設(shè)計(jì)(design)、實(shí)現(xiàn)(implement)”三個(gè)重要環(huán)節(jié),對(duì)提高學(xué)生工程創(chuàng)新能力、綜合應(yīng)用所學(xué)知識(shí)解決實(shí)際工程問題的能力有重要作用。在單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)中,最核心的問題如何構(gòu)建系統(tǒng)監(jiān)

4、控程序,最重要的程序設(shè)計(jì)方法是模塊化程序設(shè)計(jì)法,最重要的系統(tǒng)分析方法是狀態(tài)及轉(zhuǎn)移分析法。本講義的五個(gè)設(shè)計(jì)性實(shí)驗(yàn)的設(shè)計(jì)內(nèi)容著重突出狀態(tài)及轉(zhuǎn)移分析法和模塊化程序設(shè)計(jì)法,力圖讓學(xué)生初步建立單片機(jī)應(yīng)用系統(tǒng)程序的宏觀結(jié)構(gòu)框架,而不過(guò)分糾纏各種算法子程序的微觀結(jié)構(gòu)及編程技巧。就前者而言,未能應(yīng)用系統(tǒng)程序的宏觀結(jié)構(gòu)框架,意味著課程教學(xué)目標(biāo)未能達(dá)到;就后者而言,建立后者需經(jīng)長(zhǎng)期專業(yè)工作的積累,對(duì)初學(xué)者不能要求過(guò)高,且有各種資料可供參考。目錄前言實(shí)驗(yàn)一、單片機(jī)集成開發(fā)環(huán)境入門實(shí)驗(yàn)二、I/O口輸入輸出實(shí)驗(yàn)循環(huán)燈程序設(shè)計(jì)實(shí)驗(yàn)三、I/O口輸入輸出實(shí)驗(yàn)LED數(shù)碼管動(dòng)態(tài)顯示與按鍵去抖程序設(shè)計(jì)實(shí)驗(yàn)四、定時(shí)器應(yīng)用實(shí)驗(yàn)一一LE

5、D數(shù)碼動(dòng)態(tài)顯示與矩陣鍵盤賦值程序設(shè)計(jì)實(shí)驗(yàn)五、計(jì)數(shù)器應(yīng)用實(shí)驗(yàn)一一基于熱敏電阻和555電路的簡(jiǎn)易溫度報(bào)警系統(tǒng)設(shè)計(jì)文檔來(lái)源為:從網(wǎng)絡(luò)收集整理.word版本可編輯.歡迎下載支持實(shí)驗(yàn)六、中斷實(shí)驗(yàn)一一簡(jiǎn)易溫度控制器設(shè)計(jì)附錄一、WAVE3.2集成開發(fā)環(huán)境菜單及其功能說(shuō)明附錄二、AT89S52實(shí)驗(yàn)板硬件原理圖附錄三、單片機(jī)ISP下載編程軟件及USB下載器簡(jiǎn)介附錄四、“簡(jiǎn)易溫度控制器”設(shè)計(jì)項(xiàng)目程序匯總實(shí)驗(yàn)一、單片機(jī)集成開發(fā)環(huán)境入門一、實(shí)驗(yàn)?zāi)康?掌握單片機(jī)集成開發(fā)軟件“WAVE3.2”的開發(fā)環(huán)境配置。2.掌握單片機(jī)集成開發(fā)軟件“WAVE3.2”的基本功能,了解MCS-51系列單片機(jī)應(yīng)用系統(tǒng)的軟件開發(fā)過(guò)程。掌握創(chuàng)建

6、工程項(xiàng)目和管理工程項(xiàng)目的方法。掌握MCS-51系列單片機(jī)匯編程序的編輯、編譯方法。掌握MCS-51系列單片機(jī)匯編程序的仿真調(diào)試方法和觀察窗口的使用。二、實(shí)驗(yàn)設(shè)備PC兼容機(jī)一臺(tái),操作系統(tǒng)為WindowsXP,安裝有單片機(jī)集成開發(fā)軟件“WAVE3.2”。三、實(shí)驗(yàn)原理1單片機(jī)集成開發(fā)軟件“WAVE3.2”簡(jiǎn)介單片機(jī)應(yīng)用程序的設(shè)計(jì)步驟通??煞譃橐韵聨撞剑海?)根據(jù)單片機(jī)應(yīng)用系統(tǒng)的功能進(jìn)行算法構(gòu)思和設(shè)計(jì),畫出程序流程圖;(2)用單片機(jī)匯編語(yǔ)言、C語(yǔ)言或PLM語(yǔ)言(初學(xué)者一般應(yīng)采用匯編語(yǔ)言)編寫源程序;(3)將源程序翻譯成單片機(jī)可執(zhí)行的機(jī)器碼程序,即所謂的目標(biāo)程序,該過(guò)程稱為匯編或編譯;(4)程序調(diào)試,將

7、目標(biāo)程序下載到目標(biāo)單片機(jī)(即應(yīng)用系統(tǒng)板中的單片機(jī)),運(yùn)行目標(biāo)程序,對(duì)運(yùn)行結(jié)果進(jìn)行監(jiān)控。若運(yùn)行結(jié)果與預(yù)期結(jié)果相符,程序正確,調(diào)試結(jié)束;否則由結(jié)果的差異分析算法或程序的可能錯(cuò)誤,重復(fù)步驟2至4,修改源程序、重新匯編、再調(diào)試,直至程序正確。以上步驟2至4可應(yīng)用單片機(jī)集成開發(fā)軟件在個(gè)人計(jì)算機(jī)上完成?!癢AVE3.2”是一款功能強(qiáng)大的單片機(jī)集成開發(fā)軟件,可開發(fā)多個(gè)系列的單片機(jī)應(yīng)用系統(tǒng)。該軟件主要功能有:(1)集成了文本編輯器,可對(duì)源程序進(jìn)行編輯、修改;(2)集成了匯編器,可對(duì)源程序進(jìn)行匯編,自動(dòng)查找源程序中的語(yǔ)法錯(cuò)誤,并將無(wú)語(yǔ)法錯(cuò)誤的源程序翻譯成目標(biāo)程序;(3)集成了仿真調(diào)試器,可對(duì)目標(biāo)系統(tǒng)進(jìn)行在線仿真

8、調(diào)試,也可在個(gè)人計(jì)算機(jī)上對(duì)目標(biāo)程序進(jìn)行模擬仿真調(diào)試。在線仿真調(diào)試,必需借助硬件仿真器,PC機(jī)通過(guò)硬件仿真器與目標(biāo)系統(tǒng)相連,可用PC機(jī)監(jiān)控目標(biāo)程序的運(yùn)行,目標(biāo)單片機(jī)內(nèi)部RAM和特殊功能寄存器的值可實(shí)時(shí)反饋回PC機(jī)。程序員通過(guò)分析目標(biāo)單片機(jī)內(nèi)部RAM和特殊功能寄存器的值、觀測(cè)目標(biāo)程序與單片機(jī)應(yīng)用系統(tǒng)的配合情況,判斷系統(tǒng)的軟硬件是否正確。模擬仿真調(diào)試是一種純軟件模擬,它直接利用PC機(jī)的資源,在PC機(jī)上模擬目標(biāo)程序的運(yùn)行,并顯示虛擬單片機(jī)內(nèi)部RAM和特殊功能寄存器的值,程序員通過(guò)分析虛擬單片機(jī)內(nèi)部RAM和特殊功能寄存器的值僅能判斷與硬件無(wú)關(guān)的那部分軟件的正確與否,無(wú)法判斷單片機(jī)應(yīng)用系統(tǒng)的硬件是否正確,

9、目標(biāo)程序與系統(tǒng)硬件是否匹配。由于在線仿真調(diào)試需要硬件仿真器,設(shè)備成本較高,使用較復(fù)雜,不利于普及。因此,本課程的實(shí)驗(yàn)將采用模擬仿真調(diào)試與硬件無(wú)關(guān)的部分軟件(這部分軟件所占比例很大),采用將目標(biāo)程序下載到目標(biāo)系統(tǒng)中實(shí)際運(yùn)行,進(jìn)行軟硬件綜合調(diào)試。2集成開發(fā)軟件“WAVE3.2”的界面啟動(dòng)“WAVE3.2”后,集成開發(fā)軟件的界面如圖1.1所示,菜單功能見附錄圖1.1:WAVE集成開發(fā)環(huán)境界面主菜單工具欄項(xiàng)目窗口觀察窗口編輯窗口圖1.2:產(chǎn)生方波流程圖1.3:50mS延時(shí)子程3.單片機(jī)應(yīng)用程序設(shè)計(jì)及調(diào)試方法以下舉例說(shuō)明51系列單片機(jī)應(yīng)用程序設(shè)計(jì)及調(diào)試的主要方法,主要步驟如下:創(chuàng)建工程項(xiàng)目,編輯源程序;

10、匯編或編譯;使用軟件模擬器及觀察窗口調(diào)試程序。以實(shí)現(xiàn)“從P1.0口輸出1Hz方波”程序?yàn)槔?。先進(jìn)行算法設(shè)計(jì),若每隔500mS將P1.0求反,則P1.0口將輸出頻率為1Hz的方波,程序流圖如圖1.2和圖1.3所示。為了能在本例中能盡可能多地實(shí)踐程序調(diào)試方法,我們故意將500mS延時(shí)子程序復(fù)雜化,采用二級(jí)子程序嵌套,并引入十進(jìn)制加法運(yùn)算。該程序的匯編源程序清單如下ORG0000HLJMPMAINORG0030HMAIN:MOVSP,#60H;初始化MAIN1:XRLP1,#01H;P1.0求反ACALLDELAY;調(diào)用500mS延時(shí)子程序SJMPMAIN1DELAY:MOV30H,#0;500mS

11、延時(shí)子程序DELAY1:ACALLD10MS;調(diào)用10mS延時(shí)子程序MOVA,30HADDA,#01HDAAMOV30H,ACJNEA,#50H,DELAY1RETD10MS:MOVR6,#20;延時(shí)(2*R7+4)*R6+5=10005機(jī)器周期D10MS1:MOVR7,#248NOPDJNZR7,$DJNZR6Q10MS1RETEND3.1創(chuàng)建工程項(xiàng)目建立一個(gè)工作文件夾(不妨取為學(xué)號(hào)實(shí)驗(yàn)一)用于保存與本例的工程項(xiàng)目有關(guān)的各種文件。啟動(dòng)WAV歆件,系統(tǒng)將自動(dòng)打開最近使用過(guò)的工程項(xiàng)目,將所有窗口全部關(guān)閉。編輯源程序,選擇菜單文件|新建文件功能,出現(xiàn)一個(gè)文件名為NONAME的源程序編輯窗口,在此窗

12、口中輸入上述程序,選擇菜單文件|保存文件或文件|另存為功能,將文件保存到工作目錄中,文件名自定義,如取為eg1.asm,文件保存后,程序窗口上文件名變成了:學(xué)號(hào)實(shí)驗(yàn)一eg1.asm。建立新的項(xiàng)目,選擇菜單文件|新建項(xiàng)目功能,自動(dòng)打開項(xiàng)目名為UNTITLED的項(xiàng)目窗口,并彈出加入模塊文件對(duì)話框,選擇eg1.asm源程序文件,點(diǎn)擊打開。緊接著彈出加入包含文件對(duì)話框,因沒有需要添加的其它文件,點(diǎn)擊取消鈕。再接著彈出保存項(xiàng)目對(duì)話框,鍵入工程項(xiàng)目的名稱project,點(diǎn)擊保存鈕,項(xiàng)目窗口中的項(xiàng)目名稱顯示為project.prj。注意:工程項(xiàng)目文件、源程序文件等要保存在同一文件夾中。設(shè)置項(xiàng)目,選擇菜單設(shè)置

13、|仿真器設(shè)置功能或按“仿真器設(shè)置”快捷圖標(biāo)或雙擊項(xiàng)目窗口的第一行來(lái)打開“仿真器設(shè)置”對(duì)話框。由于本課程實(shí)驗(yàn)沒有使用硬件仿真器,自制實(shí)驗(yàn)板的CPU型號(hào)為AT89S52,因此在“仿真器”欄中應(yīng)如下設(shè)置仿真器:在仿真器標(biāo)簽中任意選取仿真器和仿真頭,只要所選仿真器和仿真頭可仿真的CPU列表中有8032或8732即可,并選擇其中一款CPU,然后選中“使用偉福軟件模擬器,并設(shè)置晶體頻率1200000Hz。在“語(yǔ)言”欄中,由于本課程實(shí)驗(yàn)均采用匯編語(yǔ)言編寫程序,因此“編譯器選擇”選擇“偉福匯編器”。當(dāng)仿真器設(shè)置好后,再次保存項(xiàng)目,完成項(xiàng)目創(chuàng)建。3.2匯編(或編譯)程序選擇菜單項(xiàng)目|編譯功能或按編譯快捷圖標(biāo),編

14、譯你的項(xiàng)目。在編譯過(guò)程中,如果源程序有語(yǔ)法錯(cuò)誤,將自動(dòng)彈出信息窗口,顯示錯(cuò)誤所在行號(hào)及錯(cuò)誤編號(hào)等信息,雙擊錯(cuò)誤信息,可以在源程序中定位所在行。糾正錯(cuò)誤后,再次編譯直到?jīng)]有錯(cuò)誤。在編譯之前,軟件會(huì)自動(dòng)將項(xiàng)目和程序存盤。在編譯沒有錯(cuò)誤后,打開工作文件夾,可以看到文件夾中產(chǎn)生egl.lst、project.bin、project.hex三個(gè)文件,第1個(gè)是源程序egl.asm的匯編列表文件,可用記事本編輯器打開該文件,解讀該文件提供的信息;第2和3個(gè)文件是該工程項(xiàng)目的二種格式的目標(biāo)程序(.bin和.hex格式)。3.3匯編程序的仿真調(diào)試方法和觀察窗口的使用如前所述,模擬仿真調(diào)試的方法是在PC機(jī)上模擬目

15、標(biāo)程序的運(yùn)行,并顯示虛擬單片機(jī)內(nèi)部RAM和特殊功能寄存器的值,程序員通過(guò)分析虛擬單片機(jī)內(nèi)部RAM和特殊功能寄存器的值僅能判斷與硬件無(wú)關(guān)的那部分軟件的正確與否。常用先打開合適的觀察窗口,用跟蹤、單步、執(zhí)行到光標(biāo)處等方式來(lái)調(diào)試程序。比如打開CPU窗口、數(shù)據(jù)窗口(DATA窗口)、外設(shè)端口,適當(dāng)調(diào)整各窗口位置和大小,如圖1.4所示。圖1.4:WAV軟件工作環(huán)境在主窗口下方的狀態(tài)欄中顯示CPU的當(dāng)前狀態(tài),包括PCDPTRACCPSWSP的值及上次程序執(zhí)行(跟蹤、單步、或執(zhí)行到光標(biāo)處)的時(shí)間。在CUP窗口中,第一欄顯示每條指令的地址、機(jī)器碼、反匯編結(jié)果、對(duì)應(yīng)的源程序行,若該欄未顯示正確指令,可重新編譯;第

16、二欄顯示SFR及其值,第三欄顯示被選中的SFR名位的值,被選中的SFR的名稱和值的顯示格為立體框樣式。點(diǎn)擊跟蹤快捷圖標(biāo),程序轉(zhuǎn)移到“MAIN標(biāo)號(hào)行,此時(shí)在源程序窗口最左邊出現(xiàn)“o”和“=”符號(hào),其中“o”代表此行為有效程序,此行產(chǎn)生了可以執(zhí)行的機(jī)器碼,偽指令不產(chǎn)生機(jī)器碼;“=”所指的行(被點(diǎn)亮的行)就是下次將要執(zhí)行的程序指令行。數(shù)據(jù)窗口逐行顯示內(nèi)部RAM的內(nèi)容,每行16字節(jié)。端口顯示PO、P1、P2、P3的狀態(tài),“V”表示高電平(即邏輯1)。由于待調(diào)試程序僅涉及SFR中的ACCPSWSP和RAM中R6R7、30H單元、堆CPU口中關(guān)閉無(wú)關(guān)的SFRCPU口中關(guān)閉無(wú)關(guān)的SFR圖1.5:經(jīng)修改后CP

17、U窗口中的第二、三欄棧(60H7FH),為了便于觀察這些單元的內(nèi)容變化,可在的顯示,添加R6R7、30H單元的顯示。選擇菜單仿真器|設(shè)置匯編預(yù)定義符號(hào)功能,彈出符號(hào)定義對(duì)話框;例如要關(guān)閉DPL,則雙擊DPL,將DPL的用途由“預(yù)定義符號(hào)+SFR窗口顯示”改為“預(yù)定義符號(hào)”,確認(rèn)修改;例如要添加R6,則點(diǎn)擊“添加”鈕,輸入名稱一一R6、地址一一06H,用途選擇為“預(yù)定義符號(hào)+SFR窗口顯示”,確認(rèn)修改。所有修改完后,關(guān)閉CPU窗口,再重新打開CPU窗口,此時(shí)窗口第二、三欄的顯示內(nèi)容如圖1.5所示,添加30H單元時(shí),將該單元取名為XR1。跟蹤法調(diào)試程序。在“=”指向“MOVSP,#60H”時(shí),點(diǎn)擊

18、跟蹤快捷圖標(biāo)1次,觀察CPU窗口中SP值的變化,及該指令的執(zhí)行時(shí)間;再點(diǎn)擊跟蹤快捷圖標(biāo)1次,執(zhí)行“XRLP1,#01H”指令,觀察端口P1的變化;文檔來(lái)源為:從網(wǎng)絡(luò)收集整理.word版本可編輯.歡迎下載支持.繼續(xù)點(diǎn)擊跟蹤快捷圖標(biāo)1次,執(zhí)行“ACALLDELAY指令,觀察程序的轉(zhuǎn)移及CPU窗口SP值的變化及RAM窗口60H、61H內(nèi)容的變化,這些變化反映子程序調(diào)用時(shí)斷點(diǎn)地址的進(jìn)棧保護(hù);繼續(xù)點(diǎn)擊蹤快捷圖標(biāo)1次,執(zhí)行“MOV30H,#0”,由于執(zhí)行前XR1的值為0,因此CPU窗口中XR1的值沒有變化,仍為黑色;繼續(xù)點(diǎn)擊蹤快捷圖標(biāo)1次,執(zhí)行“ACALLD10MS,觀察程序的轉(zhuǎn)移、CPU窗口SP值的變化

19、及RAM窗口62H、63H內(nèi)容的變化,這些變化反映子程序二級(jí)嵌套的斷點(diǎn)保護(hù)。繼續(xù)點(diǎn)擊跟蹤快捷圖標(biāo)6次,每次均觀察CPU窗口的變化,從第5次開始,循環(huán)執(zhí)行“DJNZR7,$”指令,若繼續(xù)用跟蹤法調(diào)試程序,還需點(diǎn)擊245次才能結(jié)束循環(huán),調(diào)試效率太低,可用以下的“斷點(diǎn)”法調(diào)試。跟蹤及斷點(diǎn)調(diào)試法。用鼠標(biāo)左鍵點(diǎn)擊“DJNZR6Q10MS1程序行,光標(biāo)移至該行,點(diǎn)擊鼠標(biāo)右鍵,打開快捷菜單,選擇“執(zhí)行到光標(biāo)處”,觀察“=”和程序執(zhí)行時(shí)間的變化。繼續(xù)點(diǎn)擊跟蹤快捷圖標(biāo)4次,每次均觀察CPU窗口R6R7的變化,從第4次開始又進(jìn)入“DJNZR6Q10MS1循環(huán)。至此,根據(jù)程序執(zhí)行情況,已可判斷10mS延時(shí)程序編寫基

20、本正確,用鼠標(biāo)左鍵點(diǎn)擊D10mS?程序的“RET行,選擇“執(zhí)行到光標(biāo)處”,觀察觀察CPU窗口R6R7的變化和執(zhí)行時(shí)間。點(diǎn)擊跟蹤快捷圖標(biāo),執(zhí)行“RET,結(jié)束子程序調(diào)用,觀察SP值的變化和程序的轉(zhuǎn)向,這些情況反映子程序返回時(shí)的斷點(diǎn)擊棧情況。繼續(xù)點(diǎn)擊跟蹤快捷圖標(biāo)5次,每次均觀察CPU窗口變化,第5次執(zhí)行“CJNEA,#50H,DELAY1”指令,“=”指向“DELAY1:ACALLD10MS,由于前面的調(diào)試已表明D10MS子程序正確,若再采用前述的調(diào)試方法,調(diào)試效率太低,可采用以下的單步調(diào)試方法。單步調(diào)試法。點(diǎn)擊單步快捷圖標(biāo)1次,觀察“=”的指向和執(zhí)行時(shí)間;繼續(xù)點(diǎn)擊單步快捷圖標(biāo)5次,每次均觀察CPU

21、窗口的變化。至此,500mS延時(shí)子程序調(diào)試基本完成,僅剩(30H)單元十進(jìn)制加1的算法邏輯是否正確無(wú)法判斷,采用以下方法可提高調(diào)試效率。先雙擊CPU窗口的XR1,將XR1值修改為49H,然后繼續(xù)點(diǎn)擊單步快捷圖標(biāo),并觀察CPU窗口的變化,直至執(zhí)行“DELAY子程序的返回指令“RETo至此500mS延時(shí)子程序調(diào)試完畢。返回主程序以后,繼續(xù)重復(fù)點(diǎn)擊單步快捷圖標(biāo),觀察每一單步執(zhí)行的結(jié)果和執(zhí)行時(shí)間,判斷主程序的邏輯是否正確。模塊化程序的調(diào)試程序設(shè)計(jì)通常采用模塊化的結(jié)構(gòu),因此程序調(diào)試一般也按模塊進(jìn)行調(diào)試。通常先調(diào)試子程序,再逐模塊調(diào)試各功能模塊,在子程序或模塊程序調(diào)試時(shí),常采用修改CPU的狀態(tài),設(shè)定模塊程

22、序的入口條件,再調(diào)試程序,如調(diào)試雙加法子程序時(shí),往往先設(shè)定RAM中存放被加數(shù)和加數(shù)的單元,然后再進(jìn)行調(diào)試。四、實(shí)驗(yàn)內(nèi)容1掌握“WAVE3.2”的基本功能5文檔收集于互聯(lián)網(wǎng),如有不妥請(qǐng)聯(lián)系刪除.文檔來(lái)源為:從網(wǎng)絡(luò)收集整理.word版本可編輯.歡迎下載支持按“實(shí)驗(yàn)原理”中所述,完成“從P1.0口輸出1Hz方波”程序的項(xiàng)目創(chuàng)建、編譯程序、程序調(diào)試等內(nèi)容。6位無(wú)符號(hào)壓縮BCD碼加法子程序設(shè)計(jì)與調(diào)試設(shè)兩個(gè)6位BCD碼相加,設(shè)加數(shù)、被加數(shù)已經(jīng)按壓縮BCD碼從高位到低位存放在內(nèi)存單元中,被加數(shù)存于RAM的30H、31H32H,加數(shù)存于33H34H35H,和存于R2、R3、R4中,進(jìn)位位保存在C中。試進(jìn)行算法

23、設(shè)計(jì),畫出程序流圖,寫出匯編語(yǔ)言源程序。按“實(shí)驗(yàn)原理”中所述,完成該程序的項(xiàng)目創(chuàng)建、編譯程序、程序調(diào)試等內(nèi)容。五、實(shí)驗(yàn)報(bào)告要求實(shí)驗(yàn)報(bào)告要求寫明實(shí)驗(yàn)?zāi)康?,并提交以下?nèi)容。1提交“實(shí)驗(yàn)內(nèi)容2”中的程序流圖、匯編語(yǔ)言源程序清單。2簡(jiǎn)述“實(shí)驗(yàn)內(nèi)容2”中的程序的調(diào)試方法。實(shí)驗(yàn)二、I/O口輸入輸出實(shí)驗(yàn)一一循環(huán)燈程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康卣莆?1系列單片機(jī)I/O端口操作方法,I/O端口控制程序的編寫。2.了解數(shù)碼管動(dòng)態(tài)顯示的工作原理,了解按鍵抖動(dòng)的現(xiàn)象。掌握51系列單片機(jī)目標(biāo)程序的下載方法。掌握循環(huán)速度可鍵控循環(huán)燈控制程序設(shè)計(jì)方法。二、實(shí)驗(yàn)設(shè)備PC兼容機(jī)1臺(tái)、目標(biāo)程序下載接口電路1套、AT89S52實(shí)驗(yàn)板1套;操

24、作系統(tǒng)為WindowsXP,安裝有單片機(jī)集成開發(fā)軟件“WAVE3.2”和下載器驅(qū)動(dòng)軟件。三、實(shí)驗(yàn)原理1.AT89S52單片機(jī)實(shí)驗(yàn)板簡(jiǎn)介本實(shí)驗(yàn)采用自制實(shí)驗(yàn)板,實(shí)驗(yàn)板硬件原理圖參見附錄二。該實(shí)驗(yàn)板的主芯片為AT89S52,含有穩(wěn)壓電源電路、CPU及時(shí)鐘電路、復(fù)位電路、在線編程接口電路、獨(dú)立鍵盤電路、數(shù)碼顯示電路、矩陣鍵盤電路、循環(huán)燈(指示燈)電路、工頻交流電同步電路、溫度測(cè)量電路、加熱功率調(diào)整電路、擴(kuò)展EEPROM電路、擴(kuò)展串口電路、擴(kuò)展數(shù)字電位器(或D/A)電路、擴(kuò)展四通道A/D轉(zhuǎn)換器電路。其中穩(wěn)壓電源電路、CPU及時(shí)鐘電路、復(fù)位電路、在線編程接口電路、獨(dú)立鍵盤電路都是典型電路,其原理不再贅述,

25、其它模塊將在實(shí)驗(yàn)二至六中使用,各模塊電路的工作原理在各實(shí)驗(yàn)中介紹。2.循環(huán)燈(指示燈)電路工作原理圖2.1:循環(huán)燈電路工作原理如圖2.1所示,8只紅色發(fā)光管LED接成共陽(yáng)極形式,開關(guān)管T5控制8只共陽(yáng)極發(fā)光管的電源,當(dāng)CS4(P2.4)引腳輸出0時(shí),T5導(dǎo)通,發(fā)光管陽(yáng)極得到5V電源,CS4為循環(huán)燈(或指示燈)模塊的選擇控制端。各發(fā)光管的陰極分別經(jīng)限流電阻R714后由P0口控制,當(dāng)CS4=0時(shí),P0口某位(女口P0.0)為0時(shí),與該端口相連接的發(fā)光管(如LD1)點(diǎn)亮,反之發(fā)光管熄滅。循環(huán)燈(指示燈)表2.1:發(fā)光管真值表CS4P0.0LD1H一滅LH滅LL亮表2.1:發(fā)光管真值表真值表如表2.1

26、所示。當(dāng)CS4=QP0.0=0時(shí),LD1點(diǎn)亮,若忽略開關(guān)管T5和P0.0口內(nèi)部MOSt的飽和電壓降,則流過(guò)LD1的正向電流為式中Vf為發(fā)光管正向?qū)妷?,紅色發(fā)光管的Vf1.8V,因此ILD16.8mA。若每只發(fā)光管全部點(diǎn)亮,則通過(guò)開關(guān)管T5的電流為54.4mA,T5選用9012(200mA/50V)可以滿足要求。當(dāng)CS4(P2.4)=0時(shí),若P2.4引腳內(nèi)部MOS管的飽和電壓降,則T5基極控制電流為0.9mA,該基極電流要驅(qū)動(dòng)54.4mA的集電極電流,T5管的放大倍數(shù)需超過(guò)60倍,通常9012均能滿足此要求。發(fā)光管的亮度與流過(guò)發(fā)光管的正向電流大小有關(guān),發(fā)光效率區(qū)分,發(fā)光管通??煞譃槌吡炼龋?/p>

27、用于室外)度(用于較暗背景)3種,根據(jù)不同的亮度要求,110mA范圍內(nèi)。3.定速循環(huán)燈的軟件設(shè)計(jì)若采用軟件延時(shí)的方法使8盞LED燈從右至左也與發(fā)光管的發(fā)光效率有關(guān),按、咼亮度(用于室內(nèi))、普通亮3發(fā)光管的正向電流可設(shè)定在也與發(fā)光管的發(fā)光效率有關(guān),按、咼亮度(用于室內(nèi))、普通亮3發(fā)光管的正向電流可設(shè)定在LD1tLDMLDILD1t)循環(huán)點(diǎn)亮,循環(huán)速度固定,每盞燈亮的時(shí)間0.5秒。根據(jù)循環(huán)燈控制要求和真值表2.1,用RAM的1個(gè)單元(如記為P0S,地址31H)來(lái)記錄8個(gè)LED的狀態(tài),P0S的每位對(duì)應(yīng)有盡有只LED,從低位到高位分別對(duì)應(yīng)LD1到LD8,某位的邏輯值為0表示相應(yīng)LED為亮(負(fù)邏輯)。P

28、0S的初始值為0FEH(LD1亮,其它滅),每隔0.5秒P0S的值左循移1位,并將P0S的值從P0口輸出,從而實(shí)現(xiàn)循環(huán)燈控制,程序流圖如圖2.2所示,程序清單如下;=程序首“ORG0000H”前定義各變量=CS4BITP2.4P0SEQU31H;P0口的輸出狀態(tài)ORG0000HLJMPMAINORG0030HMAIN:CLRCS4MOVP0,#0FFHMOVP0S,#0FEHMLOOP:MOVA,P0SMOVP0,ARLAMOVP0S,ALCALLDELAY圖2.2:循環(huán)燈流程圖圖2.2:循環(huán)燈流程圖;LED燈全滅;右邊第一個(gè)亮;暫存A內(nèi)容;延時(shí)0.5秒AJMPMLOOP=延時(shí)子程序=DELA

29、Y:MOVR5,#200;延時(shí)(2*R7+3)*R6+5)*R50.5SDL00:MOVR6,#05DL01:MOVR7,#250DL02:DJNZR7,DL02DJNZR6,DL01DJNZR5,DL00RETEND圖2.2:獨(dú)立鍵盤接口電路實(shí)驗(yàn)板中配有兩個(gè)獨(dú)立按鍵,如圖22所示。4.獨(dú)立健盤使用由于P1口內(nèi)部有上拉電阻(2040kQ),當(dāng)按鍵SW1(或SW2)按下時(shí),端口P1.6(或P1.7)為低電平,而按鍵松開時(shí),端口P1.6為高電平。將P1口的狀態(tài)讀至ACC,可以判斷是否有鍵按下,ACC.6=0(或ACC.7=0)表示有SW1(或SW2)鍵下,此種狀態(tài)表示為負(fù)邏輯表示,A求反后可得正邏

30、輯表示。若用RAM的1個(gè)單元(如記為KEY,地址20H)來(lái)記錄獨(dú)立按鍵的狀態(tài),則可采用以F子程序讀取、并保存按鍵的狀態(tài)。;=程序首“ORG0000H”前定義各變量=KEYEQU20H;保存按鍵的狀態(tài)SW1BITKEY.6;SW1鍵要內(nèi)部RAM的映射SW2BITKEY.7;SW2鍵要內(nèi)部RAM的映射讀獨(dú)立鍵盤子程序RDKEY:ORLP1,#0C0H;讀I/O,先置1再讀入MOVA,P1XRLA,#0C0H;第6和7位求反,轉(zhuǎn)為正邏輯MOVKEY,A;保存鍵狀態(tài)RET四、實(shí)驗(yàn)內(nèi)容1.定速循環(huán)燈項(xiàng)目調(diào)試建立定速循環(huán)燈項(xiàng)目建立工作文件夾“學(xué)號(hào)實(shí)驗(yàn)二”,采用實(shí)驗(yàn)一所述方法完成以下任務(wù),建立定速循環(huán)燈項(xiàng)目

31、、建立源程序文件、編輯源程序、編譯。按實(shí)驗(yàn)一所述方法,使用偉福軟件模擬器對(duì)定速循環(huán)燈項(xiàng)目進(jìn)行模擬仿真。將軟件模擬調(diào)試通過(guò)的目標(biāo)程序下載到目標(biāo)實(shí)驗(yàn)板的CPU(AT89S52)上,下載方法參見附錄三。取下下載器,上電試運(yùn)行,觀察循環(huán)燈運(yùn)行情況。2.循環(huán)速度可鍵控循環(huán)燈項(xiàng)目設(shè)計(jì)設(shè)計(jì)一個(gè)可以用按鍵控制循環(huán)燈循環(huán)速度的工程項(xiàng)目,該項(xiàng)目可實(shí)現(xiàn)以下功能:開始時(shí),循環(huán)燈從右到左循環(huán)點(diǎn)亮,每盞燈亮的時(shí)間為2.5mS,采用軟件延時(shí)的方法實(shí)現(xiàn);通過(guò)獨(dú)立按鍵SW1和SW2可改變循環(huán)燈循環(huán)速度,每盞燈亮的時(shí)間從2.5mS至0.5S可步進(jìn)調(diào)整,每按一次SW1鍵,每盞燈亮的時(shí)間增加2.5mS;每按一次SW2鍵,每盞燈亮的時(shí)

32、間減少2.5mS。本設(shè)計(jì)項(xiàng)目算法的核心是編寫一個(gè)延時(shí)時(shí)間可調(diào)的延時(shí)子程序,延時(shí)時(shí)間從2.5mS至0.5S可鍵控步進(jìn)調(diào)整,步進(jìn)值2.5mS??刹捎靡韵路椒▽?shí)現(xiàn):在內(nèi)部RAM中定義1個(gè)變量,如TDL地址30H初值為#01H,在主程序的每一次循環(huán)中都讀一次獨(dú)立按鍵的狀態(tài),并根據(jù)SW1(或SW2鍵的狀態(tài)對(duì)TDL進(jìn)行加1(或減1)控制;文檔來(lái)源為:從網(wǎng)絡(luò)收集整理.word版本可編輯.歡迎下載支持將“定速循環(huán)燈”控制程序中延時(shí)子程序的“MOVR5,#200”指令改為“MOVR5,TDL”,即可實(shí)現(xiàn)循環(huán)燈循環(huán)速度鍵控。項(xiàng)目程序設(shè)計(jì)完后,完成以下任務(wù):建立循環(huán)速度可鍵控循環(huán)燈項(xiàng)目,建立項(xiàng)目、建立源程序文件、編

33、輯源程序、編譯。使用偉福軟件模擬器對(duì)循環(huán)速度可鍵控循環(huán)燈項(xiàng)目進(jìn)行模擬仿真。將軟件模擬調(diào)試通過(guò)和目標(biāo)程序下載到目標(biāo)實(shí)驗(yàn)板的CPU(AT89S52)上,取下下載器,上電試運(yùn)行,觀察循環(huán)燈運(yùn)行情況、按鍵SW1和SW2對(duì)循環(huán)速度的控制作用。注意觀察以下現(xiàn)象。其一是,當(dāng)總循環(huán)周期為20mS(每盞燈亮的時(shí)間為2.5mS)時(shí),循環(huán)燈亮成一條直線,當(dāng)循環(huán)周期大于40mS時(shí),循環(huán)燈或逐個(gè)點(diǎn)亮、或亮成一條抖動(dòng)的直線(即頻閃現(xiàn)象)。其二是,點(diǎn)擊SW1和SW2鍵時(shí),單片機(jī)有時(shí)可檢測(cè)到按鍵,有時(shí)檢測(cè)不到按鍵。其三是,點(diǎn)擊一次按鍵時(shí),單片機(jī)有時(shí)會(huì)檢測(cè)到多次按鍵。五、實(shí)驗(yàn)報(bào)告要求實(shí)驗(yàn)報(bào)告要求寫明實(shí)驗(yàn)?zāi)康?,并提交以下?nèi)容。1

34、簡(jiǎn)述“循環(huán)速度可鍵控循環(huán)燈”控制算法原理,提交程序流圖、匯編語(yǔ)言源程序清單。2對(duì)在實(shí)驗(yàn)板運(yùn)行“循環(huán)速度可鍵控循環(huán)燈”項(xiàng)目目標(biāo)程序所觀察到的現(xiàn)象進(jìn)行分析,解釋其原因。3回答思考題。六、思考題1調(diào)整哪些電路參數(shù)可以調(diào)整循環(huán)燈的亮度。2.如果8只LED發(fā)光二極管改為8只LED數(shù)碼管,使用類似于循環(huán)燈方式,循環(huán)點(diǎn)亮8只LED數(shù)碼管,若要正常顯示沒有頻閃,每只LED數(shù)碼管顯示的時(shí)間不能超過(guò)毫秒?實(shí)驗(yàn)三、I/O口輸入輸出實(shí)驗(yàn)LED數(shù)碼管動(dòng)態(tài)顯示與按鍵去抖程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康卣莆誏ED數(shù)碼管動(dòng)態(tài)顯示電路工作原理及其驅(qū)動(dòng)程序設(shè)計(jì)方法。掌握軟件處理按鍵去抖動(dòng)的算法原理及其程序設(shè)計(jì)方法。學(xué)習(xí)模塊化程序設(shè)計(jì)方法。二

35、、實(shí)驗(yàn)設(shè)備PC兼容機(jī)1臺(tái)、目標(biāo)程序下載接口電路1套、AT89S52實(shí)驗(yàn)板1套;操作系統(tǒng)為WindowsXP,安裝有單片機(jī)集成開發(fā)軟件“WAVE3.2”和下載器驅(qū)動(dòng)軟件。三、實(shí)驗(yàn)原理1.LED數(shù)碼管動(dòng)態(tài)顯示電路工作原理在實(shí)驗(yàn)二中,我們觀察到當(dāng)循環(huán)燈的總循環(huán)周期為20mS(每盞燈亮的時(shí)間為2.5mS)時(shí),循環(huán)燈亮成一條直線。這個(gè)現(xiàn)象是由于眼睛有視覺惰性,即光像一旦在視網(wǎng)膜上形成,視覺將會(huì)對(duì)這個(gè)光像的感覺維持一個(gè)有限的時(shí)間,這種生理現(xiàn)象叫做視覺暫留性,光亮度越大視覺暫留時(shí)間越長(zhǎng),對(duì)中等亮度的光刺激,視覺暫留時(shí)間約為0.05至0.2秒。循環(huán)燈完成一次循環(huán)稱為一幀圖像,由于LED的亮度較低,當(dāng)每秒超過(guò)4

36、0幀圖像時(shí),循環(huán)燈亮成一條直線,無(wú)頻閃感覺。圖3.1LED數(shù)碼管動(dòng)態(tài)顯示電路LED數(shù)碼管動(dòng)態(tài)顯示電路如圖3.1所示,其工作原理也是基于眼睛的視覺暫留效應(yīng),與循環(huán)燈的工作原理相似。在圖3.1中,SEG14為4只共陽(yáng)極數(shù)碼管,8只LED指示燈LD18也按共陽(yáng)極聯(lián)接,相當(dāng)于1只共陽(yáng)極數(shù)碼管(記為SEG5),每只數(shù)碼管均通過(guò)開關(guān)管9012控制陽(yáng)極電源,電路中電阻R714、開關(guān)管T15的選擇方法與實(shí)驗(yàn)二所述方法相同。LED數(shù)碼管動(dòng)態(tài)顯示采用循環(huán)點(diǎn)亮(或掃描)數(shù)碼管,當(dāng)每秒的總循環(huán)超過(guò)40次時(shí),即每秒40幀像以上,將產(chǎn)生每個(gè)數(shù)碼管“連續(xù)點(diǎn)亮”的視覺效果。圖3.2:5位LED數(shù)碼管的動(dòng)態(tài)顯示時(shí)序11文檔收集

37、于互聯(lián)網(wǎng),如有不妥請(qǐng)聯(lián)系刪除;關(guān)閉數(shù)碼顯示器;根據(jù)掃描循環(huán)變量轉(zhuǎn)移圖3.3:主程序循環(huán);掃描個(gè)位數(shù)碼管ANLA,#0FHMOVDPTR,#LED7碼表MOVCA,A+DPTRMOVP0,ACLRCS0MOVDSW,#01HRETDIS1:DIS2:DIS3:DIS4:MOVA,DSB4CPLAMOVP0,ACLRCS4;查顯緩個(gè)位值的七段;七段碼送P0口;點(diǎn)亮個(gè)位數(shù)碼管;掃描指針指向下十位;掃描十位數(shù)碼管;掃描百位數(shù)碼管;掃描千位數(shù)碼管;掃描指示燈返回MOVDSW,#00H12文檔收集于互聯(lián)網(wǎng),如有不妥請(qǐng)聯(lián)系刪除文檔來(lái)源為:從網(wǎng)絡(luò)收集整理.word版本可編輯歡迎下載支持顯示驅(qū)動(dòng)程序設(shè)計(jì)方法若在

38、單片機(jī)內(nèi)部RAM中指定1個(gè)字節(jié)作為掃描循環(huán)變量(記為DSW)和5個(gè)字節(jié)的顯示緩沖區(qū)(記為DSB04),其中DSB03分別保存?zhèn)€、十、百、千位數(shù)碼的顯示數(shù)據(jù),DSB4保存8個(gè)指示燈的狀態(tài)(每位對(duì)應(yīng)一個(gè)指示燈狀態(tài),該字節(jié)應(yīng)可位尋址),則5位LED數(shù)碼管的動(dòng)態(tài)顯示時(shí)序如圖3.2所示。若主程序循環(huán)中每隔5mS調(diào)用一次LED數(shù)碼管動(dòng)態(tài)顯示子程序,如圖3.3所示,則5位LED數(shù)碼管動(dòng)態(tài)顯示子程序的算法流圖如3.4所示,部分程序清單如下。;=5位數(shù)碼管掃描子程序DISP:ORLP2,#1FHMOVA,DSWANLA,#07HRLAMOVDPTR,#DSTABJMPA+DPTRDSTAB:AJMPDIS0AJ

39、MPDIS1AJMPDIS2AJMPDIS3AJMPDIS4AJMPDIS0AJMPDIS0AJMPDIS0DIS0:MOVA,DSB0圖3.4:5位LED數(shù)碼管動(dòng)態(tài)顯示子程序流圖RET;=LED段碼表=LED7:DB0C0H,;09,af共16個(gè)七段碼SW1和SW2鍵時(shí),單片機(jī)鍵去抖動(dòng)的軟件處理方法在實(shí)驗(yàn)二中,我們還觀察到以下兩現(xiàn)象,其一是,點(diǎn)擊有時(shí)可檢測(cè)到按鍵,有時(shí)檢測(cè)不到按鍵;其二是,點(diǎn)擊一次按鍵時(shí),單片機(jī)有時(shí)會(huì)檢測(cè)到多次按鍵。前者是由于在實(shí)驗(yàn)二的“循環(huán)速度可鍵控循環(huán)燈”項(xiàng)目中,每換一盞燈主程序循環(huán)一次,讀一次鍵狀態(tài),當(dāng)循環(huán)時(shí)間較長(zhǎng)時(shí)鍵狀態(tài)變化,若采用圖3.3所示的主程序循環(huán),每5mS讀

40、一次鍵狀態(tài),本問題將得到解決。后者是由于鍵的抖動(dòng),所有的按鍵在按下的初始時(shí)間段內(nèi),觸點(diǎn)未達(dá)到穩(wěn)定接觸,連接按鍵的端口的電平不穩(wěn)定,CPU賣到的鍵狀態(tài)不穩(wěn)定,此即所謂的鍵抖動(dòng),如圖3.5所示,通常鍵抖動(dòng)發(fā)生在鍵按下的最初20mS內(nèi)。鍵去抖動(dòng)處理方法有多種,軟件延時(shí)去抖是最常用的方法,其算法原理是CPU一旦檢測(cè)到鍵狀態(tài)有變化表明有鍵按下,延時(shí)一段時(shí)間(不小于20mS)后,待鍵狀態(tài)穩(wěn)定后,再讀取有效的鍵狀態(tài)。(超過(guò)點(diǎn)出按鍵時(shí)間),將漏過(guò)鍵狀態(tài)原始鍵狀訂ewrrwn空、去抖后I鍵狀態(tài)%J20mS-鍵狀態(tài)穩(wěn)定鍵按下時(shí)刻圖3.5:鍵抖動(dòng)及處理在內(nèi)部RAM指定1字節(jié)用于保存鍵狀態(tài),記為KEY該字節(jié)應(yīng)是可位尋

41、址,以便主程序?qū)︽I狀態(tài)的查詢;另指定1字節(jié)作為鍵去抖延時(shí)器,記為KTMR若采用圖3.3主程序?qū)︽I狀態(tài)的查詢;另指定1字節(jié)作為鍵去抖延時(shí)器,記為KTMR若采用圖3.3所示的主程序循環(huán),由于系統(tǒng)每5mS調(diào)用一次讀鍵狀態(tài)及去抖處理子程序,因此每次讀鍵狀態(tài)后,先暫存鍵狀態(tài),若鍵狀態(tài)發(fā)生變化則啟動(dòng)去抖延時(shí)器(實(shí)際是記錄子程序調(diào)用次數(shù),每調(diào)用1次相當(dāng)5mS),延時(shí)未到則放棄不穩(wěn)定的鍵狀態(tài),仍延用原來(lái)的鍵狀態(tài);若延時(shí)已到則啟用新的鍵狀態(tài),鍵去抖算法如圖3.6所示。在一個(gè)微機(jī)系統(tǒng)中,按鍵可以有兩種用法。其一是不論鍵按下有多久,按一下只起一次作用,這種按鍵是鍵狀態(tài)變化的前沿起作用,不妨將這種鍵稱為前沿型(或觸發(fā)

42、型)鍵。其二是鍵只在按下時(shí)才有作用,一旦鍵松開其作用也消失,不妨稱這種鍵為開關(guān)型鍵。如前所述KEY保存鍵狀態(tài),它保存的是開關(guān)型的鍵狀態(tài)(按下為1,抬起為0),因此在讀鍵狀態(tài)及處理子程序中添加了鍵狀態(tài)變化前沿提取功能,前沿提取算法如下:若前后兩次鍵狀態(tài)有變化(異或?yàn)?),且本次鍵狀態(tài)也為1,則表明鍵狀態(tài)發(fā)生了正躍變。在內(nèi)部RAM中另指定1字節(jié)用于EKEY保存前沿型的鍵狀態(tài),記為;=讀獨(dú)立按鍵子程序(延時(shí)去抖)=RDKEY:ORLP1,#0C0H;先置1,后讀口鍵前沿提取啟用新的鍵狀態(tài)圖3.6:讀鍵狀態(tài)及去抖等處理子程序流圖MOVA,P1ANLA,#0C0HXRLA,#0C0HMOVR7,ACJN

43、EA,KEY,RDK0MOVKTMR,#05HSJMPRDK1RDK0:MOVA,KTMRJZRDK1DECKTMRMOVR7,KEYRDK1:MOVA,KEYXRLA,R7ANLA,R7MOVEKEY,AMOVKEY,R7;讀鍵;接獨(dú)立鍵盤的位保留;求反轉(zhuǎn)正邏輯;新的鍵狀態(tài)暫存R7;鍵狀態(tài)變化則轉(zhuǎn)移;去抖延時(shí)器加載初值;過(guò)了延時(shí)時(shí)間?;延時(shí)未結(jié)束;放棄不穩(wěn)定的鍵狀態(tài);鍵前沿提取;啟用鍵的新狀態(tài)RET4模塊化程序設(shè)計(jì)方法實(shí)際的應(yīng)用程序一般都由一個(gè)主程序(包括若干個(gè)功能模塊)和多個(gè)子程序構(gòu)成。每一程序模塊都能完成一個(gè)明確的任務(wù),實(shí)現(xiàn)某個(gè)具體功能,如發(fā)送、接收、延時(shí)、顯示等。采用模塊化的程序設(shè)計(jì)方

44、法,有以下優(yōu)點(diǎn):單個(gè)模塊程序的功能單一,易于編寫、調(diào)試和修改;便于分工,可使多個(gè)程序員同時(shí)進(jìn)行程序的編寫和調(diào)試,加快軟件研制進(jìn)度;程序可讀性好,便于功能擴(kuò)充和版本升級(jí);對(duì)程序的修改可局部進(jìn)行,其他部分可以保持不變;對(duì)于使用頻繁的子程序可以建立子程序庫(kù),便于移植到其它工程項(xiàng)目中。在進(jìn)行模塊劃分時(shí),應(yīng)首先弄清楚每個(gè)模塊的功能,確定其數(shù)據(jù)結(jié)構(gòu)以及與其他模塊的關(guān)系;其次是對(duì)主要任務(wù)進(jìn)一步細(xì)化,將一些專用的子任務(wù)交由下一級(jí)子模塊完成,按這種方法一直細(xì)分成易于理解和實(shí)現(xiàn)的小模塊為止。模塊的劃分應(yīng)遵循下述原則:每個(gè)模塊應(yīng)具有獨(dú)立的功能,完成一個(gè)明確的任務(wù)。模塊之間的控制耦合應(yīng)盡量簡(jiǎn)單,數(shù)據(jù)耦合應(yīng)盡量少,這就

45、是模塊間的低耦合性。控制耦合是指模塊進(jìn)入和退出的條件及方式,數(shù)據(jù)耦合是指模塊間的信息交換方式、交換量的多少及交換的頻繁程度。模塊長(zhǎng)度適中。模塊語(yǔ)句的長(zhǎng)度通常在20條100條的范圍較合適。模塊太長(zhǎng)時(shí),分析和調(diào)試比較困難,失去了模塊化程序結(jié)構(gòu)的優(yōu)越性;過(guò)短則模塊的連接太復(fù)雜,也不合適。例,如圖3.3所示程序結(jié)構(gòu)框架,可將模塊分成主程序、初始化模塊、讀鍵狀態(tài)及去抖處理子程序、數(shù)碼管動(dòng)態(tài)掃描顯示子程序4個(gè)模塊。采用匯編語(yǔ)言編程時(shí),主14文檔收集于互聯(lián)網(wǎng),如有不妥請(qǐng)聯(lián)系刪除.文檔來(lái)源為:從網(wǎng)絡(luò)收集整理.word版本可編輯.歡迎下載支持程序清單如下(文件名MAIN.ASM):;=變量定義段=CS0BITP

46、2.0;個(gè)位位選CS1BITP2.1;十位位選CS2BITP2.2;百位位選CS3BITP2.3;千位位選CS4BITP2.4;LED燈位選DSWEQU30H;位選計(jì)數(shù)DSB0EQU31H;顯示緩沖單元個(gè)位DSB1EQU32H;顯示緩沖單元十位DSB2EQU33H;顯示緩沖單元百位DSB3EQU34H;顯示緩沖單元千位DSB4EQU20H;顯示緩沖單元指示燈狀態(tài)LD1BITDSB4.0;指示燈LD1控制位;指示燈LD27控制位LD8BITDSB4.7;指示燈LD8控制位KEYEQU21H;鍵狀態(tài)字SW1BITKEY.6;SW1鍵SW2BITKEY.7;SW2鍵EKEYEQU22H鍵前沿字ESW

47、1BITEKEY.6;SW1鍵前沿ESW2BITEKEY.7;SW2鍵前沿KTMREQU35H;鍵去抖延時(shí)器ORG0000HLJMPMAINORG0030HMAIN:INCLUDEINITIAL.ASM;添加初始化模塊MLOOP:LCALLDELAY;延時(shí)5msLCALLRDKEY;讀鍵LCALLDISP;主程序中的其它任務(wù)M05:LJMPMLOOP;=延時(shí)子程序(2*R7+3)*R6+5=5ms=DELAY:MOVR6,#0AHDL01:MOVR7,#0F8HDL02:DJNZR7,DL02DJNZR6,DL01RET;=通用子程序段=INCLUDERDKEY.ASM;添加讀鍵狀態(tài)及去抖處理

48、子程序INCLUDEDISP.ASM;添加數(shù)碼管動(dòng)態(tài)掃描顯示子程序END與高級(jí)語(yǔ)言編程不同,當(dāng)用匯編語(yǔ)言編程時(shí),程序員必須對(duì)CPU資源進(jìn)行統(tǒng)籌規(guī)劃,因此在主程序的開始處必須有變量定義段,該段中包含IO口定義、所有程序模塊所用變量的定義。各程序模塊、子程序中所用變量一般不使用各變量的地址,而使用變量的名稱(或符號(hào)),將所有變量集中在主程序開始處定義,便于CPU資源的統(tǒng)籌規(guī)劃、調(diào)整和修改。各模塊、子程序均以文件形式單獨(dú)編輯和調(diào)試,主程序使用INCLUDE”文件名”偽指令將各模塊添加到指定位置,主程序、模塊、子程序通常放在同一工作文件夾中。在上述程序清單中,5mS延時(shí)子程序僅有5行,因此未將其作成1

49、個(gè)獨(dú)立模塊。四、實(shí)驗(yàn)內(nèi)容1.5位LED數(shù)碼管動(dòng)態(tài)顯示驅(qū)動(dòng)子程序設(shè)計(jì)參照?qǐng)D3.4,將“實(shí)驗(yàn)原理2”的“5位LED數(shù)碼管動(dòng)態(tài)顯示子程序”中用“”表示的十、百、千位數(shù)碼管掃描部分程序行、以及程序最后1行的七段碼碼表寫完整。建立工作文件夾“學(xué)號(hào)實(shí)驗(yàn)三”,啟動(dòng)“WAVE3.2”軟件,點(diǎn)擊“新建文件”快捷按鈕,在打開的文件窗口中編輯5位LED數(shù)碼管動(dòng)態(tài)顯示子程序,編輯完成后,在工作文件夾中,以文件名“DISP.ASM”保存文件。2獨(dú)立鍵盤讀鍵狀態(tài)及去抖動(dòng)處理子程序設(shè)計(jì)點(diǎn)擊“新建文件”快捷按鈕,在打開的文件窗口中編輯“實(shí)驗(yàn)原理3”中的“讀獨(dú)立按鍵子程序(延時(shí)去抖)”,編輯完成后,在工作文件夾中,以文件名“R

50、DKEY.ASM”保存文件。3按鍵控制4位顯示數(shù)碼加減程序設(shè)計(jì)以圖3.3的框圖為基礎(chǔ),設(shè)計(jì)1個(gè)工程項(xiàng)目,實(shí)現(xiàn)以下功能:上電最初階段完成下列操作(即初始化),設(shè)置內(nèi)部RAM中60H7FH單元為堆棧區(qū),清除內(nèi)部RAM中的20H7FH單元,在LED數(shù)碼顯示器中顯示“學(xué)號(hào)”的低4位1秒,之后清除5個(gè)顯示緩沖單元(這樣進(jìn)入主循環(huán)后先顯示0000)。在主循環(huán)中“”添加內(nèi)容,以實(shí)現(xiàn)“每按1次SW1鍵,顯示數(shù)值十進(jìn)制加1,每按1次SW2鍵,顯示數(shù)值十進(jìn)制減1?!惫δ芸砂慈缦路椒▽?shí)現(xiàn),在內(nèi)部RAM中定義1個(gè)變量(比如記為AJS1:AJS2,無(wú)符號(hào)、雙字節(jié)、壓縮BCD碼);當(dāng)CPU查詢到SW1鍵(前沿型),則AJ

51、S1:AJS2十進(jìn)制加1;當(dāng)CPU查詢到SW2鍵(前沿型),則AJS1:AJS2十進(jìn)制加9999(等價(jià)于減1);將加減1后的AJS1:AJS2送入顯示緩沖單元DSB40。按工程項(xiàng)目的功能要求和上述算法,完成以下任務(wù):將圖3.3的主程序流程畫完整,寫出完整的主程序清單;用“WAVB2”軟件,點(diǎn)擊“新建文件”快捷按鈕,在打開的文件窗口中編輯主程序,編輯完成后,在工作文件夾中,以文件名“MAIN.ASM保存文件,用同樣方法建立初始化模塊“INITIAL.ASM;在工作文件夾中,以“PROJECT”文件名創(chuàng)建工程項(xiàng)目,將MAIN.ASM添加到模塊文件中,編譯項(xiàng)目直至通過(guò);將編譯通過(guò)的目標(biāo)程序下載到實(shí)驗(yàn)

52、板中,取下下載器,通電試運(yùn)行;若目標(biāo)程序運(yùn)行不能達(dá)到預(yù)期效果,用實(shí)驗(yàn)一、所述方法進(jìn)行模擬仿真,查找算法、程序錯(cuò)誤,再編譯、下載、運(yùn)行目標(biāo)程序直至達(dá)到預(yù)期效果,完成調(diào)試。五、實(shí)驗(yàn)報(bào)告要求實(shí)驗(yàn)報(bào)告要求寫明實(shí)驗(yàn)?zāi)康模⑻峤灰韵聝?nèi)容。1簡(jiǎn)述“按鍵控制4位顯示數(shù)碼加減程序設(shè)計(jì)”的控制算法原理,提交所有程序流圖、匯編語(yǔ)言源程序清單。2回答思考題。六、思考題1“按鍵控制4位顯示數(shù)碼加減程序設(shè)計(jì)”項(xiàng)目中,若查詢SW1或SW2鍵時(shí)采用開關(guān)型鍵狀態(tài),會(huì)出現(xiàn)什么現(xiàn)象?可修改程序,在實(shí)驗(yàn)板中運(yùn)行程序,觀察現(xiàn)象。2把5mS軟件延時(shí)改用定時(shí)器/計(jì)數(shù)器定時(shí),如何實(shí)現(xiàn)?并說(shuō)明兩種方法的優(yōu)缺點(diǎn)。實(shí)驗(yàn)四、定時(shí)器應(yīng)用實(shí)驗(yàn)LED數(shù)碼

53、顯示與矩陣鍵盤賦值程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康卣莆斩〞r(shí)器/計(jì)數(shù)器定時(shí)設(shè)計(jì)方法。掌握矩陣鍵盤工作原理及讀矩陣鍵盤和去抖程序設(shè)計(jì)方法。掌握LED數(shù)碼顯示與矩陣鍵盤賦值程序設(shè)計(jì)方法。進(jìn)一步學(xué)習(xí)模塊化的程序設(shè)計(jì)方法,掌握狀態(tài)及其轉(zhuǎn)移分析方法。二、實(shí)驗(yàn)設(shè)備PC兼容機(jī)1臺(tái)、目標(biāo)程序下載接口電路1套、AT89S52實(shí)驗(yàn)板1套;操作系統(tǒng)為WindowsXP,安裝有單片機(jī)集成開發(fā)軟件“WAVE3.2”和下載器驅(qū)動(dòng)軟件。三、實(shí)驗(yàn)原理定時(shí)器及其中斷在實(shí)驗(yàn)三中,我們采用調(diào)用處延時(shí)程序?qū)崿F(xiàn)5位LED數(shù)碼管動(dòng)態(tài)顯示,并采用獨(dú)立鍵盤對(duì)顯示內(nèi)容進(jìn)行加1和減1設(shè)置。我們發(fā)現(xiàn)在這樣一個(gè)簡(jiǎn)單的設(shè)計(jì)中,CPU很忙,每時(shí)每刻都在執(zhí)行不可缺省的

54、指令,沒有時(shí)間作完成其它任務(wù)。若要增加系統(tǒng)的功能必須在主程序中增加模塊,也就增加了CPU執(zhí)行相應(yīng)模塊的時(shí)間,這將導(dǎo)致主程序每次循環(huán)的時(shí)間超過(guò)5mS且每次循環(huán)的時(shí)間可能不相同。當(dāng)系統(tǒng)增加的功能消耗CPU時(shí)間不多,主程序循環(huán)時(shí)間偏離5mS的誤差較小,這樣的設(shè)計(jì)方法仍不失是一種可行的方法,反之應(yīng)放棄該方法。解決上述問題的方法可以采用單片機(jī)的定時(shí)/計(jì)數(shù)器,若將定時(shí)/計(jì)數(shù)器T0設(shè)置為方式1定時(shí)器,定時(shí)時(shí)長(zhǎng)為4mS則定時(shí)/計(jì)數(shù)器工作方式寄存器TMOD=01;若系統(tǒng)晶體振蕩器頻率為12MHz則定時(shí)器初值為:即TH0=F0HTL0=60Ho矩陣鍵盤工作原理及讀鍵盤和去抖處理在實(shí)驗(yàn)三中,獨(dú)立鍵盤SW1和SW2的

55、每個(gè)鍵均接獨(dú)立圖4.1:3*4矩陣鍵盤電路接1條10口,當(dāng)系統(tǒng)所需按鍵較多,若每個(gè)按鍵均占用1條IO端口,則按鍵占用的CPU資源過(guò)多,系統(tǒng)實(shí)現(xiàn)難度較大。解決上述問題的方法可以采用矩陣鍵盤電路。圖4.1是3*4矩陣鍵盤電路,其中K0K3四鍵、K4K7四鍵、K8K11四鍵組成矩陣鍵盤的第0、1、2行,各行分別由選擇控制口ROW0ROWA1ROW控制;(KO,K4,K8)三鍵、(K1,K5,K9)三鍵、(K2,K6,K10)三鍵、(K3,K7,K11)三鍵組成矩陣鍵盤的第0、1、2、3列,分別由4條數(shù)據(jù)線讀取鍵狀態(tài)。文檔來(lái)源為:從網(wǎng)絡(luò)收集整理.word版本可編輯歡迎下載支持由圖4.1可見,讀取鍵狀態(tài)

56、的4條數(shù)據(jù)線CSZ3與LED數(shù)碼管動(dòng)態(tài)顯示電路5條掃描線中的4條共用。之所以能夠共用CSA3端口,是由于CPU賣取按鍵狀態(tài)所需時(shí)間很短(幾十微秒),而LED數(shù)碼管動(dòng)態(tài)顯示每個(gè)數(shù)碼管的點(diǎn)亮?xí)r間為幾個(gè)毫秒,因此先短暫關(guān)閉數(shù)碼顯示(=1111),讀取按鍵狀態(tài);然后關(guān)閉矩陣鍵盤(=111),打開數(shù)碼顯示,并不會(huì)影響數(shù)碼顯示的視覺效果,或者說(shuō)矩陣鍵盤與數(shù)碼管動(dòng)態(tài)顯示分時(shí)復(fù)用CS0-3端口。矩陣鍵盤各行按鍵的鍵狀態(tài)也是分時(shí)讀取的。首先置=110選擇第0行四個(gè)按鍵,此時(shí)若K0K3中有鍵按下,CS0-3端口線的相應(yīng)位為0,其它位為1,而另兩行的按鍵如有鍵按下不會(huì)影響上述邏輯,此時(shí)從CSC3讀取的數(shù)據(jù)為第0行四

57、個(gè)按鍵的鍵狀態(tài)。然后置=101選擇第1行四個(gè)按鍵,讀取第1行四個(gè)按鍵的鍵狀態(tài)。再后然后置=011選擇第2行四個(gè)按鍵,讀取第2行四個(gè)按鍵的鍵狀態(tài)。如前所述,上述所有按鍵的鍵狀態(tài)讀取僅需幾十微秒。圖3.6所示的讀鍵狀態(tài)及去抖等處理子程序流圖對(duì)矩陣鍵盤仍然適用,所不同的是在內(nèi)部RAM中應(yīng)指定2字節(jié)KEY1和KEY2用于保存開關(guān)型的鍵狀態(tài);指定2字節(jié)EKEY1和EKEY2用于保存前沿型的鍵狀態(tài)共可以保存16個(gè)鍵狀態(tài),而本實(shí)驗(yàn)板中矩陣鍵盤只有12個(gè)鍵,因此可以將2個(gè)獨(dú)立按鍵的狀態(tài)也并入這2個(gè)字節(jié)中。這樣,矩陣鍵盤和獨(dú)立按鍵的讀鍵狀態(tài)及去抖處理子程序框仍可延用圖3.6的流圖,只需將圖3.6中第一個(gè)功能框“

58、讀鍵、轉(zhuǎn)正邏輯、新的鍵狀態(tài)暫存”可細(xì)化,如圖4.2所示。部分程序如下:;=讀矩陣、獨(dú)立按鍵子程序(延時(shí)去抖)=RDKEY:ORLP2,#0FFH;關(guān)閉LED數(shù)碼顯示器;ROW0=0,掃描K03鍵;延時(shí),鍵盤線越長(zhǎng)延時(shí)越長(zhǎng)。KEY1和KEY2CLRROW0NOPNOPMOVA,P2ANLA,#0FH;XRLA,#0FH;MOVR6,A;ORLP2,#0FFHCLRROW1;K03鍵位保留;求反轉(zhuǎn)正邏輯;新的鍵狀態(tài)暫存R6ORLP2,#0FFH;ORLP1,#0C0HMOVA,P1;ANLA,#0C0H;XRLA,#0C0H;ROW仁0,掃描K47鍵;掃描第1、2行按鍵等關(guān)閉矩陣鍵盤圖4.2:“圖

59、3.6讀鍵、轉(zhuǎn)正邏輯、新的鍵狀態(tài)暫存”細(xì)化讀獨(dú)立按鍵接獨(dú)立鍵盤的位保留求反轉(zhuǎn)正邏輯ADDA,R7MOVR7,A;鍵狀態(tài)變化判斷、延時(shí)去抖、鍵前沿提取等RET模塊化程序設(shè)計(jì)方法一一系統(tǒng)狀態(tài)及其轉(zhuǎn)移分析方法單片機(jī)應(yīng)用系統(tǒng)和程序構(gòu)架與系統(tǒng)所要實(shí)現(xiàn)的功能有關(guān),模塊化程序設(shè)計(jì)方法仍是常用的方法。程序員首先要分析系統(tǒng)的功能,將系統(tǒng)分解為幾個(gè)不同的工作狀態(tài),并用代碼表示系統(tǒng)的工作狀態(tài),保存狀態(tài)代碼的內(nèi)部RAM單元稱為狀態(tài)字(不妨記態(tài)字為STA),處在不同工作狀態(tài)時(shí),系統(tǒng)執(zhí)行不同的程序模塊,實(shí)現(xiàn)不同的功能;其次要分析實(shí)現(xiàn)這些功能的控制量有哪些,包括按鍵、開關(guān)量(或邏輯信號(hào))和模擬量(或模擬量)等,找出系統(tǒng)的工

60、作狀態(tài)發(fā)生變化的條件,即控制量滿足什么條件時(shí)工作狀態(tài)將發(fā)生什么變化,得出系統(tǒng)的狀態(tài)轉(zhuǎn)移表。在此基礎(chǔ)上,利用“JMPA+DPT”指令,根據(jù)工作狀態(tài)字STA的不同取值進(jìn)行間接長(zhǎng)轉(zhuǎn)移(或稱為散轉(zhuǎn)),從而實(shí)現(xiàn)系統(tǒng)工作狀態(tài)的轉(zhuǎn)移,完成工作任務(wù)的調(diào)度。下面舉簡(jiǎn)例說(shuō)明之。在實(shí)驗(yàn)板上設(shè)計(jì)一個(gè)系統(tǒng),實(shí)現(xiàn)以下功能:上電時(shí)4位數(shù)碼管顯示“8952”1秒,指示燈全亮。緊接著顯示“學(xué)號(hào)”(低4位),同時(shí)LD1燈亮表示當(dāng)前顯示內(nèi)容為“學(xué)號(hào)”,此時(shí)按鍵K011無(wú)效,SW1和SW2鍵有效。若按SW2鍵一次,LD2亮表示此時(shí)可以利用數(shù)碼顯示和按鍵KS9進(jìn)行賦值,K09鍵代表“09”數(shù)值鍵,每按1次數(shù)值鍵后,原4位顯示數(shù)值在顯示

溫馨提示

  • 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ù)覽,若沒有圖紙預(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)論