單片機(jī)試題庫_第1頁
單片機(jī)試題庫_第2頁
單片機(jī)試題庫_第3頁
單片機(jī)試題庫_第4頁
單片機(jī)試題庫_第5頁
已閱讀5頁,還剩129頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

編程題:編一個子程序,將寄存器R0中的內(nèi)容*10(積<256)編程將片內(nèi)RAM30H單元開始的15B的數(shù)據(jù)送到片外RAM3000H開始的單元中去.用查表法編一子程序,將40H單元中的BCD碼轉(zhuǎn)換成ASCII碼.片內(nèi)RAM50H、51H單元中有一個10B的二進(jìn)制數(shù),高位在前,低位在后,請編程將其求補,存回原單元中去。片內(nèi)RAM30H開始的單元中有10B的二進(jìn)制數(shù),請編程求它們的和。R1中存有一BCD碼,請編程將它轉(zhuǎn)換成ASKII碼,存入外RAM1000H單元中去。編一個程序,將累加器中的一個字符從串行接口發(fā)送出去。片外RAM2000H開始的單元中有5B的數(shù)據(jù),編程將它們傳送到片內(nèi)RAM20H開始的單元中去。9用查表法編一子程序,將R3中的BCD碼轉(zhuǎn)換成ASKII碼。片內(nèi)RAM40H開始的單元內(nèi)有10B二進(jìn)制數(shù),編程找出其中最大值并存于50H單元中。編程將片外RAM3000H開始的20B的數(shù)據(jù)傳送到片內(nèi)RAM30H開始的單元中。編程將R1、R2中的16位二進(jìn)制數(shù)增1后送回原單元。編程將片內(nèi)RAM40H開始的單元存放的10B的二進(jìn)制數(shù)傳送到片外RAM4000H開始的單元中去。編一子程序,從串行接口接受一個數(shù)據(jù)。編寫將30H和31H單元中2B二進(jìn)制數(shù)乘2的子程序。片外RAM2000H單元中有一BCD碼,編程將其轉(zhuǎn)換成ASKII碼。試編制單字節(jié)BCD碼數(shù)的減法程序。利用調(diào)子程序的方法,進(jìn)行兩個4B無符號數(shù)相加。請編主程序及子程序。若圖11-2中數(shù)據(jù)為無符號數(shù),求數(shù)據(jù)中最大值送A。編程并注釋。圖 11-2片外RAM中的數(shù)據(jù)塊片外RAM數(shù)據(jù)塊長 0000H度 0001HD1D2 :D3I

II若圖 11-2中數(shù)據(jù)塊是有符號數(shù),求正數(shù)個數(shù)。編程并注釋。若圖11-2中數(shù)據(jù)塊為無符號數(shù),求其累加和。編程并注釋。已知20H單元有一位十進(jìn)制數(shù),通過查表找出與其對應(yīng)的共陰極七段碼,并存于30H單元。若20H的數(shù)大于或等于0AH,將FF裝入30H單元。在ROM中存儲的共陰極七段碼表如下:表格地址七段碼表格地址七段碼20003F20056D20010620067D20025B20070720034F20087F20046620096F將片外RAM空間2000H~200AH中的數(shù)據(jù)的高四位變零,低四位不變,原址存放。將累加器A和狀態(tài)寄存器內(nèi)容壓入堆棧保護(hù),然后再恢復(fù)A和狀態(tài)寄存器內(nèi)容。求片外RAM3000H、3001H單元數(shù)據(jù)的平均值,并傳送給3002H單元。分別寫出實現(xiàn)如下功能的程序段。(1) 將片外RAM30H的中間4位,31H的低2位,32H得高2位按序拼成一個新字節(jié),存入33H單元。(2) 將DPTR中間8位取反,其余位不變。寫出達(dá)到下列要求的指令(不能改變各未涉及位的內(nèi)容)。(1)使A的最低位置1。清除A得高4位。使ACC.2和ACC.3置1。清除A的中間4位。有一段程序如下:地址碼機(jī)器碼標(biāo)號匯編助記符200AHE8CHAR:MOVA,R0 2010H80relSJMPCHAR(1)計算指令“SJMPCHAR”的相對便移量rel的值(十六進(jìn)制機(jī)器碼形式)。(2)支出相對偏移量值rel所在的地址單元。編寫程序?qū)⑵瑑?nèi)RAM30H中的2位十進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼,并存入31H和32H中。編寫程序段,用三種方法實現(xiàn)累加器A與寄存器B的內(nèi)容轉(zhuǎn)交換。將如圖11-3所示片外RAM中兩個無符號數(shù)按從小到大順序排列,編程并注釋。0000HD10001HD2圖11-3片外RAM數(shù)據(jù)編程將一個按高低字節(jié)存放在21H、20H中的雙字節(jié)數(shù)乘2后,在按高低次序?qū)⒔Y(jié)果存放到22H、21H、20H單元。編程將存放在片外RAM1000H、1001H中的兩個數(shù),按大小次序存放到片內(nèi)RAM的30H、31H單元。多字節(jié)減法編程,一直有兩個多字節(jié)數(shù),從高到低依次存放如下:X1--(13H)(12H)(11H)(10H)X2--(23H)(22H)(21H)(20H)計算X1-X2,差存放在13H、12H、11H、10H中。計算下面邏輯值(用x表示邏輯乘,+表示邏輯加)。P1.0二P1.1xP1.2+ACC.7xC+/PSW.0在ROM空間建立一個10以內(nèi)的平方值表,根據(jù)R0中的數(shù)查出平方值,若平方值超出表的范圍則將FF裝入A。三字節(jié)無符號數(shù)相加,被加數(shù)在片外RAM的200H-2002H(低位在前),加數(shù)在片內(nèi)RAM的20H-22H(低位在前),要求把相加之和存放在20H-22H之中,請編程。將片內(nèi)RAM30H-3FH中的數(shù)據(jù)按順序傳送到片外RAM2000H-200FH,請編程。列舉4條能使累加器A清0的指令。已知A=7AH,R0=30H,片內(nèi)RAM30H單元的內(nèi)容為A5H,請問下列程序段執(zhí)行后,(A)二?ANLA,#17HORL30H,AXRLA,@R0CPLA編程將片外RAM1000-1010H內(nèi)容傳入片內(nèi)RAM30H開始的單元。42.8255A控制字地址為300FH,請按:A口方式0輸入,B口方式1輸出,C口高位輸出、C口低位輸入,確定8255A控制字并編程初始化程序。復(fù)位后,跳過中斷區(qū),重新設(shè)置堆棧,并將工作寄存器切換至3區(qū)。在片外RAM空間有一個數(shù)據(jù)塊如圖11-4所示。(1(1)若該數(shù)據(jù)塊為無符號數(shù),求該數(shù)據(jù)塊1000H 數(shù)據(jù)塊長度中數(shù)據(jù)最小值,并存放于片內(nèi)RAM20H單元。 1001HX1(2)若該數(shù)據(jù)塊是有符號數(shù),求正數(shù)、負(fù)1002HX2數(shù)和0的個數(shù),并將它們的個數(shù)分別存到12H、 1003HX311H、10H單元中。圖11-4數(shù)據(jù)塊編寫一個軟件延時1s和1min的子程序。設(shè)fosc=6MHz,則1個機(jī)器周期二2us。試用DAC0832芯片設(shè)計單脈沖方式的D/A轉(zhuǎn)換接口電路,并編寫兩個程序,分別使DAC0832輸出負(fù)向鋸齒波和15個正向階梯波。試設(shè)計DAC0809對1路模擬信號進(jìn)行轉(zhuǎn)換的電路,并編制采集100個數(shù)據(jù)存入89C51的程序。請編制串行通信的數(shù)據(jù)發(fā)送程序,發(fā)送片內(nèi)RAM50H-5FH的16B數(shù)據(jù),串行接口設(shè)定為方式2,采用偶校驗方式。設(shè)晶振頻率為6MHz。請編制串行通信數(shù)據(jù)接收程序,將接收的16B數(shù)據(jù)送入片內(nèi)RAM58H-5FH單元中,串行接口設(shè)定為工作方式3,波特率為1200波特,fosc=6MHz。在89C51片內(nèi)RAM20H-3FH單元中有32B數(shù)據(jù),若采用方式1進(jìn)行串行通信,波特率為1200波特,fosc=12MHz,用查詢和中斷兩種方式編寫發(fā)送/接收程序?qū)?。已知?dāng)前PC值為2000H,請用兩種方法將程序存儲器20F0H中的常數(shù)送入累加器A中。請用兩種方法實現(xiàn)累加器A與寄存器B的內(nèi)容交換。請用位操作指令編寫下面邏輯表達(dá)值的程序。P1.7二ACC.0X(B.0+P2.1)+P3.2編程將片內(nèi)20H單元開始的30個數(shù)據(jù)送到片外RAM3000H開始的單元中。在片外2000H開始的單元中有100個有符號數(shù),試編程統(tǒng)計其中正數(shù)、負(fù)數(shù)和0的個數(shù)的程序。在2000H-2004H單元中,存有5個壓縮BCD碼,編程將他們轉(zhuǎn)換成ASCII碼,存入2005H開始的連續(xù)單元中。編程將累加器A的低4位數(shù)據(jù)送P1口的高4位,P1口的低4位保持不變。編程將片內(nèi)RAM40H單元的中間4位取反,其余位不變。如果R0的內(nèi)容0,將R1置為0,如R0內(nèi)容非0,置R1為FFH,試進(jìn)行編程。編程將片內(nèi)數(shù)據(jù)存儲器20H-24H單元壓縮的BCD碼轉(zhuǎn)換成ASCII存放在25H開始的單元。片內(nèi)存儲單元40H中有一個ASCII字符,試編一程序給該數(shù)的最高位加上奇校驗。編寫一段程序,將存放在自DATA單元開始的一個4B數(shù)(高位在高地址),取補后送回原單元。將片內(nèi)RAM的20H單元中的十六進(jìn)制數(shù)變換成ASCII存入22H、21H單元,高位存入22H單元,要求用調(diào)子程序編寫。編寫一段程序,以實現(xiàn)圖11-5種硬件的邏輯運算功能。圖11-5邏輯運算圖用位操作指令實現(xiàn)下面的邏輯方程。P1.2=(ACC.3XP1.4X/ACC.5)+(/B.4X/P1.5)利用89C51的P1口,監(jiān)測某一按鍵開關(guān),使每按鍵一次,輸出一個正脈沖(脈寬隨意)。畫出電路,編出匯編語言程序。利用89C51的P1口控制8個發(fā)光二極管LED。相鄰的4個LED位一組,使2組每隔0.5s交替發(fā)亮一次,周而復(fù)始。畫出電路,編寫程序(設(shè)延時0.5s子程序為D05,已存在)。設(shè)計一個4位數(shù)碼顯示電路,并用匯編語言編程使“8”從右到左顯示1遍。編制一個循環(huán)閃爍燈的程序。有8個發(fā)光二極管,每次其中某個燈閃爍點亮10次后,轉(zhuǎn)到下一個閃爍10次,循環(huán)不止。畫出電路圖。設(shè)計89C51和ADC0809的接口:圖,編出延時方式;查詢方式;中斷方式中的一種程序。五、編程題答案程序如下:STRAT:MOVA,RO采集2通道10個數(shù)據(jù),存入內(nèi)部RAM的50H-59H單元,畫出電路MULMOVRETSTRAT:MOV程序如下:START:MOVLOOP:MOVMOVXINCINCDJNZABRO,ARO,#30HMOVR7,#0FHDPTR,W3000HA,?RO?DPTR,ARODPTRR7,LOOPRET程序如下:程序如下:START: MOVMOVMOVCMOVRETTAB: DBDBSTART:CLRMOVCPLADDMOVA,40HDPTR,#TABA,@A+DPTR40H,A30H,31H,32H,33H,34H35H,36H,37H,38H,39HCA,51HAA,#01H51H,AMOV A,50HCPL AADDCA,#OOHMOV 50H,ARET5.ADDIO: MOVRO,30HMOV R7,#9HMOV A,?ROLOOP: INCROADDA,?RODJNZ R7,LOOPRET6.RIB-AI:MOVA,R1ORLA,#30HMOVDPTR,W1OOOHMOVX?DPTR,ARET7.SOUT:MOVSCON,#40HMOVTMOD,#20HMOVTL1,#OE8HMOVTH1,#0E8HSETB TRIMOV SBUF,AJNBTl,$CLRRET8.CARY: MOVMOVMOVNEXT: MOVXMOVINCINCDJNZRET9.程序如下:MAIN: MOVRO,#20HR3,#05HA,?DPTR?RO,ADPTRROR3,NEXTRETRETTAB: DBDB10 START: MOVMOVMOVLOOP: INCMOVCJNENEXT: JNCMOVC A,?A+DPTRMOV R3,A30H,31H,32H,33H,34H,35H,36H,37H,38H,39HRO,#40HR7,#09HA,?RORO30H,?ROA,30H,NEXTBIE1BIE1: DJNZR7,LOOPMOV50H,ARET11.START:MOVDPTR,W3000HMOVR7,#20HMOVRO,#30HLOOP:MOVXA,?DPTRMOV?RO,AINCROINCDPTRDJNZR7,LOOPRETMOVA,R2ADDA,#O1HMOVR2,AMOVA,R1ADDCA,#OOHMOVRl,A12STARTRET13.MOVR7,#0AHMOVDPTR,W4000HLOOP:MOVA,?ROMOVX?DPTR,AINCROINCDPTRDJNZR7,LOOP14.START:RETMOVTMOD,#20HMOVTL1,#0E8HR1R1A,SBUFCLRCA,31HA31H,AA,30HASETBTRIMOV SCON,#50HLI: JNBR1,L1CLRMOVRETSTART:MOVRLCMOVMOVRLCMOV30H,ARETSTART: MOVDPTR,#2000HMOVXA,@DPTRADDA,#30HMOVX@DPTR,ARET解:要實現(xiàn)單字節(jié)BCD數(shù)的減法,應(yīng)當(dāng)設(shè)法將減法變?yōu)榧臃ê?,再用DAA指令調(diào)整。具體操作是:先用模(99+1)H即9AH減去減數(shù),再與被減數(shù)進(jìn)行加法操作,然后用DAA調(diào)整。假定被減數(shù)放在片內(nèi)RAM的60H單元,減數(shù)放在61H單元,差值放入62H單元。程序如下:CLRCSUBBA,61HADDA,60HDAAMOV62H,ARET解:用R0和R1作數(shù)據(jù)指針,R0指向第一個加數(shù),并兼做“和”的指針,R1指向另一個加數(shù),字節(jié)數(shù)存放到R2中作記初值。主程序:JAFA:MOVR0,#20HMOV R1,#29HMOV R2,#04HACALLJASUB,?RO,?ROA,@R1?RO,AROR1R2,JASUB1MOVDPTR,WOOOOHAJMPRET多字節(jié)加法子程序:JASUB:CLRCJASUB1:MOVADDCMOVINCINCDJNZRET解:START:MOVB,#OOHMOVDPTR,W0001HTHREE:MOVXA,?DPTRCJNEA,B,ONEONE:JCTWOXCHA,BTWO:INCDPTRDJNZ10H,THREEMOVA,BRET20解:ORG0030HMOVDPTR,WOOOOHMOVXA,?DPTRMOV1OH,AMOVDPTR,WOOO1HTWO:MOVXA,?DPTRJBACC.7,ONEONE:INCDPTRDJNZ1OH,TWORET21.解:ORG0030HSTART:MOVDPTR,WOOOOHINC DPTRMOV A,#OOHONE:PUSH AMOVX A,?DPTRMOV 20H,APOP AADDA,20HINC DPTRDJNZ 1OH,ONERET22.解:TABLE:MOVA,20HNEXT:JCLEDMOV30H,WOFFHSJMPENDDLED:MOVDPTR,W2000HMOVCA,?A+DPTRMOV30H,AENDD:SJMPENDD23.解: ORG1OOOHSTART:MOVDPTR,W2000HMOV1OH,#0BHLOOP:MOVXA,?DPTRANLA,#0FHINCDPTRDJNZ1OH,LOOPRET解:ORG1OOOHSTART:PUSH APUSH PSWI

IIPOP PSWPOP ARET解:MOVDPTR,W3000HMOVRO,AINC DPTRMOVX A,?DPTRADD A,RORRC AINC DPTRMOVX ?DPTR,ARET解:⑴MOV A,30HANLA,#3CHRL ARL AANLANLMOVORLRLRLORL⑵XRLXRL27.解:⑴SETB31H,#332H,WOCOHA,31HA,32HAA33H,ADPH,#0FHDPL,WOFOHACC.0或ORLA,#1⑵ANLA,#0FH⑶ORLA,OCH⑷ANLA,#0C3H解:相對偏移量的計算方法有兩種,一種是偏移量=轉(zhuǎn)移地址一(相對轉(zhuǎn)移指令地址+相對轉(zhuǎn)移指令字節(jié)數(shù)),則本題中的偏移量=200AH-(2010H+2)=FFF8。另一種是根據(jù)轉(zhuǎn)移指令的硬件動作直接計算,既偏移量=目標(biāo)地址一下條指令的地址,則本題中的偏移量=H200AH-2012H=FFF8H。取低8位偏移值,rel二F8H。解:程序如下:MOVR0,#30HMOVA,@R0SWAPAANL A,#0FHORL A,#30HMOV 31H,AXCHDA,@R0MOV 32H,ARET30.解:方法1方法230.解:方法1方法2用3條指令實現(xiàn):MOVR0MOV B,AMOV A,RO方法3用4條指令實現(xiàn):方法3PUSHBPOPACCPOPB31.解:31.解:START:MOVDPTR,WOOOOHMOVX A,?DPTRMOV B,AINCDPTRMOVXA,?DPTRCJNEA,B,ONEONE:JNC TWOMOV DPTR,WOOOOHMOVX?DPTR,AXCH A,BINC DPTRMOVX?DPTR,ATWO:SJMPTWO32.解:ORG0030HMOVA,20HCLRCRLCAMOVMOVRLCMOVJNCMOVNEXT:SJMP33.解:20H,AA,21HA21H,ANEXT22H,#01$ORG0030HMOVDPTR,1000HMOVX A,?DPTRMOV B,AINCDPTRCJNEA,B,OOHJNCNEXT1MOV30H,BMOV31H,ASJMPNEXT2NEXT1:MOV30H,AMOV31H,BNEXT2:SJMPNEXT234.解: ORG0030HMOVRO,#1OHMOVRl,#20HMOVR7,#04HCLRCLOOP:MOVA,?ROSUBBA,@R1MOV ?RO,ADJNZ R7,LOOPRET35.解:ORG0030HMOV C,Pl.1ANL C,Pl.2MOV 7EH,CANL C, ACC.7ORL C, 7FHORL C, /PSW.0RET36.解:ORG0030HDPTR,#TABDPTR,#TABA,ROA,#1OH,NEXTNEXT1A,?A+DPTRNEXT2A,WOFFHNEXT2CDPTR,W2000HMOVMOVCJNENEXT:JNCMOVCSJMPNEXT1:MOVNEXT2:SJMP解:CLRMOVA,?DPTRA,?DPTRA,?RO?RO,ARODPTRRl,LOOPRO,#30HDPTR,W2000HRl,#10HA,2R0MOVRl,#03HLOOP:MOVXADDCMOVINCINCDJNZRET解:MOVMOVMOVLOOP:MOVINC R0INC DPTRDJNZ R1,LOOPRET解:⑴ MOV A,#00H⑵ XRL A,ACC⑶ ANL A,#00H⑷ CLR A解:因7AHA17H=01111010BA00010111B=00010010B=12H故A=12H因A5HV12H=10100101BV00010010B=10110111B=B7H故(30)=B7H因12H十B7H=00010010B十10110111B=10100101B=A5H故A=A5H解: ORL0800HMOVDPTR,#1000HMOV RO,#30HMOV R7,#11HLOOP:MOVXA,?DPTRMOV ?RO,AINC ROINC DPTRDJNZ R7,LOOPRET解:控制字為:10010101二95H初始化程序:MOV DPTR,W300FHMOV A,#95H?DPTR,AMOVX?DPTR,ALJMP0030H0030H0030HSP,#60HRSIRSOORGMOVMOVXMOVINCCLRORGMOVSETBSETBRET解:⑴0030HDPTR,W1OOOHA,?DPTRR7,ADPTRCLOOP:MOVXCJNEJNCMOVNEXT:INCDJNZRET⑵ ORGMOVMOVXMOVA,?DPTRA,20H,OOHNEXT20H,ADPTRR7,LOOP0030HDPTR,W1OOOHA,?DPTRR7,A12H,#OOHMOVMOVL2:INCMOVXJZJBINCSJMPNEXT1:INCSJMPNEXT2:INCLI:DJNZRET1OH,#OOHDPTRA,?DPTRNEXT1ACC.7,NEXT212HLI1OHLI11HR7,L2解:(l)ls二2usX5X1055X10^500000=250X2000=250X200X10所以:要編寫三重循環(huán)。ORL 1000HTIME: MOV R7,#10HT3: MOV R6,#200T2: MOV R5,#250Tl:DJNZ R5,T1DJNZ R6,T2DJNZ R7,T3RET⑵Imin二60s,調(diào)用上面Is子程序60次。ORG0030HMOVR0,#60LOOP:LCALLTIMEDJNZRO,LOOPRET解:⑴輸出負(fù)向鋸齒波的程序MOV RO,#FEHMOV A,WOFFHLOOP:MOVX?RO,ADEC ALCALLDELAYSJMP LOOPDELAY:……RET⑵輸出15個正向階梯波程序15個正向階梯波,即將00H?FFH分為16個等級,以形成15個臺階。此時數(shù)字遞增幅度要加大為每次增16(或10H),對應(yīng)程序為:MOVR0,#FEHCLRAUP:MOVX@R0,AADDA,#10HLCALLDELAYSJMPUPDELAY:……RET解:采用無條件傳送方法,即啟動轉(zhuǎn)換后等待100us(這是1DC0809的最保守轉(zhuǎn)換時間)再讀轉(zhuǎn)換結(jié)果。模擬信號接至IN0引腳,但要保證模擬量在一次A/D轉(zhuǎn)換過程中不發(fā)生變化。如果變化速度快,在輸入前應(yīng)該增加采樣保持電路。100個數(shù)據(jù)的采集程序如下:MOVR0,#1CHMOVR7,#100HSETBP1.0LOOPI:CMOVX@R0,AACALLDELAYMOVXA,@R0MOV@R0,AINC R0DJNZ R7,LOOPOSJMP$DELAY:MOVRl,310HDLOOP:MULABMULABDJNZRl,DLOOPRET解:查詢方式發(fā)送程序如下:MOVSCON,#80HMOVPCON,#80HMOVRO,#50HMOVR7,#16LOOP:MOVA,?ROMOVC,PMOVTB8,CMOVSBUF,AJNB TI,$CLR R0DJNZR7,LOOPRET49.解:0SMOD波特率(Bd片%-0SMOD波特率(Bd片%-XTl(溢出率戶一X———32 12獎(?56—湘2siuioDx£ 6X10^=加二二256_熨2X波將率二256—32X12-X-1200查詢接受程序如下:MOVTMOD,#20HMOVMOVSETBMOVMOVMOVCONT:JBCSJMPPRI: MOVJNBJNBAJMPPNP: JBTH1,#0F3HTL1,#0F3HTRISCON,#0D0HRO,#50HR7,#16HRI,PRICONTA,SBUFP,PNPRB8,PERRIGHTRB8,PERRIGHT:MOV@R0,ATOC\o"1-5"\h\zINC R0DJNZR7,CONTCLR F1SJMP $PER:SETB F1SJMP $50.解:T1工作于方式2作為波特率發(fā)生器,取SCOM=0,T1的計數(shù)初值計算如下:bluIUL1 F波特率=g——X ——32 12X(256-^.:1200=XX12XI儼北一12:X(256-x)苴=230=E6⑴查詢方式程序①發(fā)送程序ORG 0000HAJMP STARTORG 0030HSTART:MOV TMOD,#20HMOV TH1,#0E6HMOV TL1,#0E6HSETB TRIMOV SCON,#40HMOV RO,#20HMOV R7,#32LOOP: MOV SUBF,?ROJNBTICLRINCDJNZSJMP②接受程序ORGAJMPORGSTART:MOVMOVMOVSETBTIROR7,LOOP$OOOOHSTART0030HTMOD,#20HTH1,0E6HTL1,#0E6HTRISCON,#50HMOVR0,#20HMOVR7,#32HTOC\o"1-5"\h\zLOOP:JNB RI,$CLR RIMOV@R0,SUBFINC R0SJMP $⑵中斷方式程序:中斷方式的初始化部分同查詢方式,以下僅寫不同部分。①中斷發(fā)送程序:■

■ISETBEASETBESSUBF,?ROSUBF,?RO$R7,LOOPEA$0023HTIDPHDPLDPTR,#AGADPLDPHROMOVLOOP:SJMPAGA:DJNZCLRSJMPORGIOIP:CLRPOPPOPMOVPUSHPUSHINCEAEAES$R7,LOOPEA$0023HRIMOVSUBF,?RORETI②中斷接受程序:SETBSETBLOOP:SJMPAGA:DJNZCLRSJMPORGIOIP:CLRPOP DPHTOC\o"1-5"\h\zPOP DPLMOVDPTR,#AGAPUSH DPLPUSH DPHINC RORETI解:方法一:以PC作為基址寄存器。MOVA,WOFOHMOVCA,?A+PC方法二:以DPTR作為基址寄存器。MOVDPTR,W20F0HMOVA,#00HMOVCA,?A+DPTR解:方法一:利用交換指令。XCHA,B方法二:利用堆棧交換指令。PUSHAPUSHBPOPAPOPB解:在位操作中,與操作即乘,或操作即加。MOVC,B.0ORL C.P2.1ANL C.ACC.0ORL C.P3.2MOV P1.7,C@Ri,A指令解:將片內(nèi)數(shù)據(jù)傳送到片外RAM可用MOVX@DPTR,A或MOVX@Ri,A指令MOV R7,#30MOV R0,#20HMOVDPTR,#3000HLOOP: MOV A,@R0MOVX @DPTR,AINC R0INC DPTRDJNZ R7,LOOP解:判斷一個數(shù)是否等于0,可用JZrel或CJNEA,#00H,rel指令;判斷其正負(fù),可直接判斷該數(shù)的D7(符號位),當(dāng)D7=1時,為負(fù),當(dāng)D7=0時,為整數(shù)。設(shè):R2為負(fù)數(shù)個數(shù)的計數(shù);R3為。的個數(shù)的計數(shù);R4為正數(shù)個數(shù)的計數(shù)。MOVR2,#00HMOVR3,#00HMOVR4,#00HMOVR7,#100MOVDPTR,W2000HLOOP:MOVXA,?DPTRJZRR3JBCC.7,RR2INCR4SJMPTTRR3:INCR3SJMPTTRR2:INCR2TT:INCDPTRDJNZR7,LOOP解:壓縮BCD碼用4位二進(jìn)制數(shù)表示一位十進(jìn)制數(shù),換成ASCII碼,只需要加上30H。程序如下:MOVP2,#20HMOVRl,#00HMOVDPTR,W2005HMOVR7,05LOOP:MOVXA,@R1即一個字節(jié)存放二位十進(jìn)制數(shù)。十進(jìn)制數(shù)轉(zhuǎn)PUSHANLADDMOVXINCPOPANLSWAPADDMOVXINCINCDJNZACCA,#OFHA,#30H?DPTR,ADPTRACCA,WOFOHAA,#30H?DPTR,AR1DPTRR7,LOOP57.解:SWPAANLORLPl,#0FHPl,A58.解:方法-XRL40H,#3CH方法二MOVA,40HCPLAANLA,#3CHANL40H,#0C3HORL40H,A59.解:MOVA,ROJZZEMOVRl,WOFFHSJMP$ZE:MOVRl,#0RET解: ORG0100HMOV R7,#05HMOV RO,#20HMOV Rl,#25HASNE:MOV A,?ROANL A,WOFOHSWAP AADD A,#30HMOV @R1,AINC R1ANLA,#OFHADDA,#30HMOV @R1,ATOC\o"1-5"\h\zINC ROINC R1DJNZ R7,NESJMP $END解: ORGO1OOHMOV A,40HJB P,EN

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論