模板單片機(jī)實(shí)驗(yàn)報(bào)告_第1頁
模板單片機(jī)實(shí)驗(yàn)報(bào)告_第2頁
模板單片機(jī)實(shí)驗(yàn)報(bào)告_第3頁
模板單片機(jī)實(shí)驗(yàn)報(bào)告_第4頁
模板單片機(jī)實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

單片機(jī)實(shí)驗(yàn)報(bào)告學(xué)院:信息工程學(xué)院專業(yè):電子信息工程班級(jí):學(xué)號(hào):姓名:實(shí)驗(yàn)一存儲(chǔ)器塊清零一、實(shí)驗(yàn)要求1.指定存儲(chǔ)器中某塊的起始地址和長度,要求能將其內(nèi)容清零。二、實(shí)驗(yàn)?zāi)康?.掌握存儲(chǔ)器讀寫方法2.了解存儲(chǔ)器的塊操作方法三、實(shí)驗(yàn)說明通過本實(shí)驗(yàn),學(xué)生可以了解單片機(jī)讀寫存儲(chǔ)器的讀寫方法,同時(shí)也可以了解單片機(jī)編程,調(diào)試方法。如何將存儲(chǔ)器塊的內(nèi)容置成某固定值(例全填充為0FFH)?請(qǐng)學(xué)生修改程序,完成此操作。程序框圖程序設(shè)計(jì):MOVDPTR,#1000H;MOVB,#64H;CLRALOOP:MOVX@DPTR,A;INCDPTR;DJNZB,LOOP;LJMP$END遇到的問題及解決方法問題:直接給存儲(chǔ)器清零解決方法:在給存儲(chǔ)器賦值時(shí)只有一條語句即:MOVX@DPTR,A不存在MOVX@DPTR,#data所以要實(shí)現(xiàn)給存儲(chǔ)器清零則需要首先將累加器A清零,然后通過A給存儲(chǔ)器清零。實(shí)驗(yàn)二內(nèi)存塊移動(dòng)一、實(shí)驗(yàn)要求將指定源地址和長度的存儲(chǔ)塊移到指定目標(biāo)位置二、實(shí)驗(yàn)?zāi)康?.了解內(nèi)存的移動(dòng)方法。2.加深對(duì)存儲(chǔ)器讀寫的認(rèn)識(shí)。三、實(shí)驗(yàn)說明塊移動(dòng)是計(jì)算機(jī)常用操作之一,多用于大量的數(shù)據(jù)復(fù)制和圖象操作。本程序是給出起始地址,用地址加一方法移動(dòng)塊,請(qǐng)思考給出塊結(jié)束地址,用地址減一方法移動(dòng)塊的算法。另外,若源塊地址和目標(biāo)塊地址有重疊,該如何避免?程序框圖程序:MOVDPTR,#1000H;MOVB,#64H;MOVA,#09HLOOP:MOVX@DPTR,A;INCDPTR;DJNZB,LOOP;MOVR0,#10HMOVR1,#00HMOVR2,#30HMOVR3,#00HMOVB,#64HLOOP1:MOVDPH,R0MOVDPL,R1MOVXA,@DPTRMOVDPH,R2MOVDPL,R3MOVX@DPTR,ACJNER1,#0FFH,Goon1INCR0Goon1:INCR1CJNER3,#0FFH,Goon2INCR2Goon2:INCR3DJNZB,LOOP1LJMP$END遇到的問題及解決方法。問題:使用一個(gè)8位寄存器,若移動(dòng)的數(shù)據(jù)超出256個(gè)會(huì)出現(xiàn)數(shù)據(jù)丟失。解決方法:如果是一個(gè)寄存器,如:INCR1一旦R1為0FFH再增加1后就會(huì)清零從新由1000H處移動(dòng)數(shù)據(jù)而1100H后的數(shù)據(jù)就會(huì)丟失。所以增加一個(gè)8位寄存器后,依然如上例當(dāng)R1加到0FFH后將高8位地址加1即R0為11H就實(shí)現(xiàn)了1100H后的數(shù)據(jù)移動(dòng)。

硬件實(shí)驗(yàn)三外部中斷實(shí)驗(yàn)一、實(shí)驗(yàn)要求用單次脈沖申請(qǐng)中斷,在中斷處理程序中對(duì)輸出信號(hào)進(jìn)行反轉(zhuǎn)。二、實(shí)驗(yàn)?zāi)康?、學(xué)習(xí)外部中斷技術(shù)的基本使用方法。2、學(xué)習(xí)中斷處理程序的編程方法。三、實(shí)驗(yàn)電路及連線四、實(shí)驗(yàn)說實(shí)明中斷服務(wù)程序的關(guān)鍵是:1.保護(hù)進(jìn)入中斷時(shí)的狀態(tài),并在退出中斷之前恢復(fù)進(jìn)入時(shí)的狀態(tài)。2.必須在中斷程序中設(shè)定是否允許中斷重入,即設(shè)置EXO位。3.對(duì)于80C196,要選擇相應(yīng)的中斷源,并設(shè)置中斷屏蔽寄存器的相應(yīng)位。本例中使用了INTO中斷(80C196為EXTINT中斷),一般中斷程序進(jìn)入時(shí)應(yīng)保護(hù)PSW,ACC以及中斷程序使用但非其專用的寄存器。本例的中斷程序保護(hù)了PSW,ACC等三個(gè)寄存器并且在退出前恢復(fù)了這三個(gè)寄存器。另外中斷程序中涉及到關(guān)鍵數(shù)據(jù)的設(shè)置時(shí)應(yīng)關(guān)中斷,即設(shè)置時(shí)不允許重入。本例中沒有涉及這種情況。INTO(P32)端(80C196為EINT端)接單次脈沖發(fā)生器。P1.0接LED燈,以查看信號(hào)反轉(zhuǎn).實(shí)驗(yàn)框圖程序:ORG0000HLJMPMAINORG0003HLJMPINTORG0100HMAIN:SETBEX0SETBIT0SETBEAHERE:AJMPHEREINT:CLREAPUSHPSWPUSHAccSETBEACPLP1.0CLREAPOPAccPOPPSWSETBEARETIEND遇到的問題及解決方法問題:等待中斷指令混淆如將LJMP$中的$與AJMP組成AJMP$.解決方法:使用LJMP$或者HERE:AJMPHERE等規(guī)定的指令。

硬件實(shí)驗(yàn)四定時(shí)器實(shí)驗(yàn)一、實(shí)驗(yàn)要求用CPU內(nèi)部定時(shí)器中斷方式計(jì)時(shí),實(shí)現(xiàn)每一秒鐘輸出狀態(tài)發(fā)生一次反轉(zhuǎn).二、實(shí)驗(yàn)?zāi)康?、學(xué)習(xí)8031內(nèi)部計(jì)數(shù)器的使用和編程方法。2、進(jìn)一步掌握中斷處理程序的編程方法。三、實(shí)驗(yàn)電路及連線四、實(shí)驗(yàn)說明1、關(guān)于內(nèi)部計(jì)數(shù)器的編程主要是定時(shí)常數(shù)的設(shè)置和有關(guān)控制寄存器的設(shè)置。內(nèi)部計(jì)數(shù)器在單片機(jī)中主要有定時(shí)器和計(jì)數(shù)器兩個(gè)功能。本實(shí)驗(yàn)使用的是定時(shí)器。2、定時(shí)器有關(guān)的寄存器有工作方式寄存器TMOD和控制寄存器TCON。TMOD用于設(shè)置定時(shí)器/計(jì)數(shù)器的工作方式0-3,并確定用于定時(shí)還是用于計(jì)數(shù)。TCON主要功能是為定時(shí)器在溢出時(shí)設(shè)定標(biāo)志位,并控制定時(shí)器的運(yùn)行或停止等。3、內(nèi)部計(jì)數(shù)器用作定時(shí)器時(shí),是對(duì)機(jī)器周期計(jì)數(shù)。每個(gè)機(jī)器周期的長度是12個(gè)振蕩器周期。因?yàn)閷?shí)驗(yàn)系統(tǒng)的晶振是6MHZ,本程序工作于方式2,即8位自動(dòng)重裝方式定時(shí)器,定時(shí)器100us中斷一次,所以定時(shí)常數(shù)的設(shè)置可按以下方法計(jì)算:機(jī)器周期=12÷6MHZ=2uS(256-定時(shí)常數(shù))×2uS=100us定時(shí)常數(shù)=206.然后對(duì)100us中斷次數(shù)計(jì)數(shù)10000次,就是1秒鐘.4、在例程的中斷服務(wù)程序中,因?yàn)橹袛喽〞r(shí)常數(shù)的設(shè)置對(duì)中斷程序的運(yùn)行起到關(guān)鍵作用,所以在置數(shù)前要先關(guān)對(duì)應(yīng)的中斷,置數(shù)完之后再打開相應(yīng)的中斷。5、對(duì)于80C196,與定時(shí)器有關(guān)的寄存器為IOC1.2和INT-MASK。IOC1.2為定時(shí)器1溢出中斷允許/禁止位。INT-MASK的第0位為定時(shí)器溢出屏蔽位。6、對(duì)于80C196,在設(shè)置中斷定時(shí)常數(shù)時(shí),要注意先設(shè)置窗口寄存器WSR,設(shè)置完常數(shù)后,再恢復(fù)原WSR值。實(shí)驗(yàn)框圖定時(shí)1s:ORG0000HLJMPMAINORG000BHLJMPIT0PORG1000HMAIN:MOVSP,#60HMOVR1,#32HMOVR2,#28HMOVTMOD,#02HMOVTH0,#06HMOVTL0,#06HSETBTR0SETBET0SETBEAHERE:SJMPHEREIT0P:DJNZR1,LOOPMOVR1,#32HDJNZR2,LOOPCLREAPUSHPSWPUSHAccSETBEACPLP1.0CLREAPOPAccPOPPSWSETBEALOOP:RETI遇到的問題及解決方法1.問題:定時(shí)器工作在方式一解決方法:工作在方式一不能自動(dòng)重新裝載定時(shí)器,需要用軟件來從新設(shè)置初值。改正后使用方式二,可以實(shí)現(xiàn)自動(dòng)從新裝載定時(shí)器。問題:定時(shí)一秒誤差比較大解決方法:可以盡量使定時(shí)器循環(huán)的次數(shù)減少,如將每次定時(shí)器計(jì)時(shí)100us(計(jì)數(shù)50次T0初值為0CEH,循環(huán)10000次)改為每次計(jì)時(shí)500us(計(jì)數(shù)250次T0初值為06H循環(huán)2000次)。

硬件實(shí)驗(yàn)五D/A轉(zhuǎn)換實(shí)驗(yàn)一、實(shí)驗(yàn)要求利用DAC0832,編制程序產(chǎn)生鋸齒波、三角波、正弦波。三種波輪流顯示,用示波器觀看。二、實(shí)驗(yàn)?zāi)康?、了解D/A轉(zhuǎn)換的基本原理。2、了解D/A轉(zhuǎn)換芯片0832的性能及編程方法。3、了解單片機(jī)系統(tǒng)中擴(kuò)展D/A轉(zhuǎn)換的基本方法。三、實(shí)驗(yàn)電路及連線用電壓表或示波器探頭接-5V~+5V輸出,觀察顯示電壓或波形。四、實(shí)驗(yàn)說明1、D/A轉(zhuǎn)換是把數(shù)字量轉(zhuǎn)換成模擬量的變換,實(shí)驗(yàn)臺(tái)上D/A電路輸出的是模擬電壓信號(hào)。要實(shí)現(xiàn)實(shí)驗(yàn)要求,比較簡單的方法是產(chǎn)生三個(gè)波形的表格,然后通過查表來實(shí)現(xiàn)波形顯示。2、產(chǎn)生鋸齒波和三角波的表格只需由數(shù)字量的增減來控制,同時(shí)要注意三角波要分段來產(chǎn)生。要產(chǎn)生正弦波,較簡單的方法是造一張正弦數(shù)字量表。即查函數(shù)表得到的值轉(zhuǎn)換成十六進(jìn)制數(shù)填表。D/A轉(zhuǎn)換取值范圍為一個(gè)周期,采樣點(diǎn)越多,精度越高些。本例采用的采樣點(diǎn)為256點(diǎn)/周期。3、8位D/A轉(zhuǎn)換器的輸入數(shù)據(jù)與輸出電壓的關(guān)系為U(0∽-5V)=Uref/256×NU(-5V∽+5V)=2·Uref/256×N-5V(這里Uref為+5V)實(shí)驗(yàn)框圖程序:ORG0000HSTART:MOVR0,#0FEHMOVA,#00HLOOP:MOVX@R0,AINCACJNEA,#00H,LOOPUP:MOVX@R0,AINCAJNZUPDOWN:DECAMOVX@R0,AJNZDOWNLOOP1:MOVR2,#02HMOVR4,#0FFHSJMPLOOP3LOOP2:MOV@R0,AINCR2DJNZR4,LOOP3AJMPSTARTLOOP3:MOVA,R2ADDA,#02HMOVCA,@A+PCSJMPLOOP2TAB:DB

80H,83H,86H,89H,8DH,90H,93H,96H

DB

99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH

DB

0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H

DB

0C7H,0CAH,0CCH,0CFH,0D1H,0D4H,0D6H,0D8H

DB

0DAH,0DDH,0DFH,0E1H,0E3H,0E5H,0E7H,0E9H

DB

0EAH,0ECH,0EEH,0EFH,0F1H,0F2H,0F4H,0F5H

DB

0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FDH

DB

0FDH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB

0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FEH,0FDH

DB

0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6H

DB

0F5H,0F4H,0F2H,0F1H,0EFH,0EEH,0ECH,0EAH

DB

0E9H,0E7H,0E5H,0E3H,0E1H,0DEH,0DDH,0DAH

DB

0D8H,0D6H,0D4H,0D1H,0CFH,0CCH,0CAH,0C7H

DB

0C5H,0C2H,0BFH,0BCH,0BAH,0B7H,0B4H,0B1H

DB

0AEH,0ABH,0A8H,0A5H,0A2H,9FH,9CH,99H

DB

96H,93H,90H,8DH,89H,86H,83H,80H

DB

80H,7CH,79H,76H,72H,6FH,6CH,69H

DB

66H,63H,60H,5DH,5AH,57H,55H,51H

DB

4EH,4CH,48H,45H,43H,40H,3DH,3AHDB

38H,35H,33H,30H,2EH,2BH,29H,27H

DB

25H,22H,20H,1EH,1CH,1AH,18H,16H

DB

15H,13H,11H,10H,0EH,0DH,0BH,0AH

DB

09H,8H,7H,6H,5H,4H,3H,2H

DB

02H,1H,0H,0H,0H,0H,0H,0H

DB

00H,0H,0H,0H,0H,0H,1H,2H

DB

02H,3H,4H,5H,6H,7H,8H,9H

DB

0AH,0BH,0DH,0EH,10H,11H,13H,15H

DB

16H,18H,1AH,1CH,1EH,20H,22H,25H

DB

27H,29H,2BH,2EH,30H,33H,35H,38H

DB

3AH,3DH,40H,43H,45H,48H,4CH,4EH

DB

51H,51H,55H,57H,5AH,5DH,60H,63H

DB

69H,6CH,6FH,72H,76H,79H,7CH,80H遇到的問題及解決方法問題:轉(zhuǎn)換出的三種波形出現(xiàn)疊加現(xiàn)象。解決方法:原程序:MOVR0,#0FEHMOVR7,#00HMOVA,#00HLOOP:MOVX@R0,AINCACJNEA,#00H,LOOPDJNZR7,LOOPUP:MOVX@R0,AINCAJNZUPDOWN:DECAMOVX@R0,AJNZDOWNDJNZR7,UPLOOP1:MOVR2,#02HMOVR4,#0FFHSJMPLOOP3LOOP2:MOV@R0,AINCR2DJNZR4,LOOP3DJNZR7,LOOP1RETLOOP3:MOVA,R2ADDA,#02HMOVCA,@A+PCSJMPLOOP2分析此程序可以發(fā)現(xiàn)產(chǎn)生的三種波形方式為分時(shí)顯示即先產(chǎn)生256個(gè)鋸齒波然后產(chǎn)生256個(gè)三角波最后產(chǎn)生256個(gè)正弦波。理論上可以顯示但實(shí)際上各種波形顯示的時(shí)間非常短,上個(gè)波形的余暉尚未消失下一個(gè)的波形就顯示出來以至于出現(xiàn)波形疊加。程序應(yīng)該改為將三種波同時(shí)顯示然后循環(huán),即將鋸齒波、三角波、正弦波三個(gè)波連起來作為一個(gè)波,周期為三個(gè)波的周期之和。改正后的程序:LOOP:MOVX@R0,AINCACJNEA,#00H,LOOPUP:MOVX@R0,AINCAJNZUPDOWN:DECAMOVX@R0,AJNZDOWNLOOP1:MOVR2,#02HMOVR4,#0FFHSJMPLOOP3LOOP2:MOV@R0,AINCR2DJNZR4,LOOP3AJMPSTARTLOOP3:MOVA,R2ADDA,#02HMOVCA,@A+PCSJMPLOOP2

硬件實(shí)驗(yàn)六外部中斷(急救車與交通燈)一、實(shí)驗(yàn)要求本實(shí)驗(yàn)?zāi)M交通信號(hào)燈控制,一般情況下正常顯示,有急救車到達(dá)時(shí),兩個(gè)方向交通信號(hào)燈全紅,以便讓急救車通過。設(shè)急救車通過路口時(shí)間為10秒,急救車通過后,交通恢復(fù)正常,本實(shí)驗(yàn)用單次脈沖申請(qǐng)外部中斷,表示有急救車通過。二、實(shí)驗(yàn)?zāi)康?、學(xué)習(xí)外部中斷技術(shù)的基本使用方法。2、學(xué)習(xí)中斷處理程序的編程方法。三、實(shí)驗(yàn)電路及連線四、實(shí)驗(yàn)說明中斷服務(wù)程序的關(guān)鍵是:1、保護(hù)進(jìn)入中斷時(shí)的狀態(tài),并在退出中斷之前恢復(fù)進(jìn)入時(shí)的狀態(tài)。2、必須在中斷程序中設(shè)定是否允許中斷重入,即設(shè)置EXO位。本例中使用了INTO中斷(80C196為EINT中斷),一般中斷程序進(jìn)入時(shí)應(yīng)保護(hù)PSW,ACC以及中斷程序使用但非其專用的寄存器。本例的中斷程序保護(hù)了PSW,ACC等三個(gè)寄存器并且在退出前恢復(fù)了這三個(gè)寄存器。另外中斷程序中涉及到關(guān)鍵數(shù)據(jù)的設(shè)置時(shí)應(yīng)關(guān)中斷,即設(shè)置時(shí)不允許重入。本例中沒有涉及這種情況。對(duì)于8051CPU外部中斷由INTO(P32)端接入。對(duì)于80C196CPU外部中斷由EINT接入。中斷信號(hào)由單次脈沖發(fā)生器產(chǎn)生。對(duì)中斷的處理可參見硬件實(shí)驗(yàn)十一本實(shí)驗(yàn)提供了用8255的PA口和用單片機(jī)的I/O端口控制交通信號(hào)燈兩種方法,其中196用8255,51用P1口,可以互相參考51和196的程序。實(shí)驗(yàn)框圖程序:LED1EQUP1.0LED2EQUP1.1LED3EQUP1.2LED4EQUP1.3LED5EQUP1.4LED6EQUP1.5ORG0000HLJMPDIRORG0003HLJMPINT0ORG0100HMAIN:SETBLED1SETBLED4CLRLED2CLRLED3CLRLED5CLRLED6SETBEASETBEX0SETBIT0LOOP1:CLRLED6CLRLED1SETBLED2SETBLED4LCALLDL3sLOOP2:MOVR7,#02HCLRLED2SETBLED3LCALLDL1sLOOP21:CPLLED3LCALLDL1sDJNZR7,LOOP21LOOP3:CLRLED3CLRLED4SETBLED1SETBLED5LCALLDL3sLOOP4:MOVR7,#02HCLRLED5SETBLED6LCALLDL1sLOOP41:CPLLED6LCALLDL1sDJNZR7,LOOP41LJMPLOOP1INT0:CLREAMOVAcc,P1PUSHR1PUSHR2PUSHR3PUSHR4PUSHAccSETBEASETBLED1SETBLED4CLRLED2CLRLED3CLRLED5CLRLED6LCALLDL1sCLREAPOPAccPOPR1POPR2POPR3POPR4MOVP1,AccSETBEARETIDL3s:MOVR1,#250MOVR2,#200MOVR3,#30DL31:DJNZR1,DL31MOVR1,#250DL32:DJNZR2,DL31MOVR2,#200DL33:DJNZR3,DL31MOVR3,#30RETDL1s:MOVR1,#250MOVR2,#200MOVR4,#10DL11:DJNZR1,DL11MOVR1,#250DL12:DJNZR2,DL11MOVR2,#200DL13:DJNZR4,DL11MOVR4,#10RET遇到的問題及解決方法問題:中斷返回時(shí)無法恢復(fù)中斷前的狀態(tài)(如:中斷前南北綠燈剛好亮了一秒這時(shí)中斷來了,待中斷執(zhí)行完后恢復(fù)之前狀態(tài)沿著中斷前南北綠燈亮一秒繼續(xù)執(zhí)行)。解決方法:按之前的程序MOVAcc,P1;PUSHAcc只保護(hù)中斷前的狀態(tài)并沒有保護(hù)各狀態(tài)執(zhí)行了多長時(shí)間。所以改正后應(yīng)增加對(duì)各寄存器狀態(tài)也保護(hù)起來即下列程序PUSHR1PUSHR2PUSHR3PUSHR4

硬件實(shí)驗(yàn)七八段數(shù)碼管顯示一、實(shí)驗(yàn)要求利用實(shí)驗(yàn)儀提供的顯示電路,動(dòng)態(tài)顯示一行數(shù)據(jù).二、實(shí)驗(yàn)?zāi)康?.了解數(shù)碼管動(dòng)態(tài)顯示的原理。2.了解用總線方式控制數(shù)碼管顯示三、實(shí)驗(yàn)線路及連線這里只是顯示草圖,詳細(xì)原理參見圖1四、實(shí)驗(yàn)說明1.本實(shí)驗(yàn)儀提供了6位8段碼LED顯示電路,學(xué)生只要按地址輸出相應(yīng)數(shù)據(jù),就可以實(shí)現(xiàn)對(duì)顯示器的控制。顯示共有6位,用動(dòng)態(tài)方式顯示。8位段碼、6位位碼是由兩片74LS374輸出。位碼經(jīng)MC1413或ULN2003倒相驅(qū)動(dòng)后,選擇相應(yīng)顯示位。本實(shí)驗(yàn)儀中8位段碼輸出地址為0X004H,位碼輸出地址為0X002H。此處X是由KEY/LEDCS決定,參見地址譯碼。做鍵盤和LED實(shí)驗(yàn)時(shí),需將KEY/LEDCS接到相應(yīng)的地址譯碼上。以便用相應(yīng)的地址來訪問。例如,將KEY/LEDCS接到CS0上,則段碼地址為08004H,位碼地址為08002H。程序框圖程序:ORG0000HLJMPMAINORG0003HMAIN:MOVA,#05HMOV79H,AMOVA,#04HMOV74H,AMOVA,#03HMOV7BH,AMOVA,#02HMOV7CH,AMOVA,#01HMOV7DH,AMOVA,#00HMOV7EH,ADIR:MOVR0,#79HMOVR3,#01HMOVA,R3LD0:MOVDPTR,#8002HMOVX@DPTR,AINCDPTRINCDPTRMOVA,@R0ADDA,#0FHMOVCA,@A+PCDIR1:MOVX@DPTR,AACALLDL1msINCR0MOVA,R3JBAcc.5,LD1RLAMOVR3,AAJMPLD0LD1:LJMPMAINTAB:DB3FH,06H,5BH,4FH,66H,6DHDB7DH,07H,7FH,6FH,77H,7CHDB39H,5EH,79H,71H,73H,3EHDB31H,6EH,1CH,23H,40H,03HDB18H,00DL1ms:MOVR7,#04HDL:MOVR6,#7DHDL6:DJNZR6,DL6DJNZR7,DLRETEND遇到的問題及解決方法1.問題:錯(cuò)誤使用查表指令MOVCA,@A+DPTR解決方法:查表指令有兩種上面一種和MOVCA,@A+PC,如果使用第一種必須在DPTR未被使用,一旦使用需要在查表以前保護(hù)DPTR,這樣會(huì)增加程序的復(fù)雜度所以改用第二種查表方法只需在前面加一條偏移量指令即可。2.問題:無法顯示數(shù)據(jù)解決方法:原程序:DIR:MOVR0,#79HMOVR3,#01HMOVA,R3LD0:MOVDPTR,#8002HMOVX@DPTR,AINCDPTRINCDPTRMOVA,@R0ADDA,#0FHMOVCA,@A+PCDIR1:MOVX@DPTR,AACALLDL1msINCR0MOVA,R3JBAcc.5,LD1RLAMOVR3,AAJMPLD0LD1:LJMPMAINTAB:DB3FH,06H,5BH,4FH,66H,6DHDB7DH,07H,7FH,6FH,77H,7CHDB39H,5EH,79H,71H,73H,3EHDB31H,6EH,1CH,23H,40H,03HDB18H,00DL1ms:MOVR7,#04HDL:MOVR6,#7DHDL6:DJNZR6,DL6DJNZR7,DLRETEND由原程序可知,程序中并沒有設(shè)置要顯示的數(shù)據(jù)。即R0中沒有內(nèi)容,所以需要在原程序前給R0賦值程序如下增加程序:ORG0000HLJMPMAINORG0003HMAIN:MOVA,#05HMOV79H,AMOVA,#04HMOV74H,AMOVA,#03HMOV7BH,AMOVA,#02HMOV7CH,AMOVA,#01HMOV7DH,AMOVA,#00HMOV7EH,A

硬件實(shí)驗(yàn)八鍵盤掃描顯示實(shí)驗(yàn)一、實(shí)驗(yàn)要求在上一個(gè)實(shí)驗(yàn)的基礎(chǔ)上,利用實(shí)驗(yàn)儀提供的鍵盤掃描電路和顯示電路,做一個(gè)掃描鍵盤和數(shù)碼顯示實(shí)驗(yàn),把按鍵輸入的鍵碼在六位數(shù)碼管上顯示出來。實(shí)驗(yàn)程序可分成三個(gè)模塊。①鍵輸入模塊:掃描鍵盤、讀取一次鍵盤并將鍵值存入鍵值緩沖單元。②顯示模塊:將顯示單元的內(nèi)容在顯示器上動(dòng)態(tài)顯示。③主程序:調(diào)用鍵輸入模塊和顯示模塊。二、實(shí)驗(yàn)?zāi)康?、掌握鍵盤和顯示器的接口方法和編程方法。2、掌握鍵盤掃描和LED八段碼顯示器的工作原理。三、實(shí)驗(yàn)電路及連線這里只是鍵盤草圖,詳細(xì)原理參見圖1四、實(shí)驗(yàn)說明本實(shí)驗(yàn)儀提供了一個(gè)6×4的小鍵盤,向列掃描碼地址(0X002H)逐列輸出低電平,然后從行碼地址(0X001H)讀回。如果有鍵按下,則相應(yīng)行的值應(yīng)為低,如果無鍵按下,由于上拉的作用,行碼為高。這樣就可以通過輸出的列碼和讀取的行碼來判斷按下的是什么鍵。在判斷有鍵按下后,要有一定的延時(shí),防止鍵盤抖動(dòng)。地址中的X是由KEY/LEDCS決定,參見地址譯碼。做鍵盤和LED實(shí)驗(yàn)時(shí),需將KEY/LEDCS接到相應(yīng)的地址譯碼上。以便用相應(yīng)的地址來訪問。例如將KEY/LEDCS信號(hào)接CS0上,則列掃描地址為08002H,行碼地址為08001H。列掃描碼還可以分時(shí)用作LED的位選通信號(hào)。實(shí)驗(yàn)框圖程序:ORG0000HLJMPMAINORG0030HMAIN:MOVSP,#60H;第一條指令入口地址KEYI:ACALLKS1;調(diào)用判定有無鍵閉合子程序KS1JNZLK1;有鍵閉合,跳轉(zhuǎn)至LK1NI:ACALLDIR;無鍵閉合,調(diào)用顯示子程校,延遲6毫秒,跳轉(zhuǎn)至KEYIAJMPKEYILK1:ACALLDIR;可能有鍵閉合,延遲12毫秒,軟件去抖動(dòng)ACALLDIR;ACALLKS1;調(diào)用判定有無閉合子程序JNZLK2;經(jīng)去抖動(dòng),判定鍵確實(shí)閉合,跳轉(zhuǎn)至LK2去處理ACALLDIR;調(diào)用顯示子程序延遲6毫秒AJMPKEYI;是抖動(dòng)引起,跳轉(zhuǎn)至KEYILK2:MOVR2,#0FEH;定義R2列選碼MOVR4,#00H;定義R4列號(hào)計(jì)數(shù)器LK4:MOVDPTR,#08002H;列選碼入口地址MOVA,R2MOVX@DPTR,A;送入列選碼MOVDPTR,#08001H;行碼地址MOVXA,@DPTR;讀行碼JBACC.0,LONE;0行線為高電平,無鍵閉合,跳轉(zhuǎn),轉(zhuǎn)判1行MOVA,#00H;0行首建號(hào)AJMPLKP;跳轉(zhuǎn),計(jì)算鍵號(hào)LONE:JBACC.1,LTWO;1行線為高電平,無鍵閉合,跳轉(zhuǎn),轉(zhuǎn)判2行MOVA,#06H;1行首建號(hào)AJMPLKP;跳轉(zhuǎn),計(jì)算鍵號(hào)LTWO:JBACC.2,LTHR;2行線為高電平,無鍵閉合,跳轉(zhuǎn),轉(zhuǎn)判3行MOVA,#0CH;2行首建號(hào)AJMPLKP;跳轉(zhuǎn),計(jì)算鍵號(hào)LTHR:JBACC.3,NEXT;3行線為高電平,無鍵閉合,跳轉(zhuǎn)MOVA,#12H;3行首建號(hào)LKP:ADDA,R4;計(jì)算建號(hào),即行首建號(hào)加列號(hào)PUSHA;鍵號(hào)進(jìn)棧保護(hù)LK3:ACALLDIR;調(diào)用顯示子程序延遲6毫秒ACALLDIRACALLKS1;調(diào)用判定有無鍵閉合子程序6毫秒JNZLK3;判定鍵是否釋放,未釋放,則循環(huán)POPA;鍵已釋放,建號(hào)出棧MOVB,#0AH;賦值DIVAB;除法運(yùn)算MOV5AH,AMOVA,BMOV59H,A;置緩沖器指針初值RET;返回NEXT:INCR4;列計(jì)數(shù)器加1MOVA,R2;判定是否已掃到最后一列JNBACC.5,KND;若掃到最后一列,跳轉(zhuǎn),重新鍵盤掃描RLA;未掃到最后一列,位選碼左移一位MOVR2,AAJMPLK4KND:AJMPKEYIKS1:MOVDPTR,#08002H;判定有無鍵閉合子程序MOVA,#00H;列線全0MOVX@DPTR,AMOVDPTR,#08001H

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論