匯編語言實(shí)用子程序舉例_第1頁
匯編語言實(shí)用子程序舉例_第2頁
匯編語言實(shí)用子程序舉例_第3頁
匯編語言實(shí)用子程序舉例_第4頁
匯編語言實(shí)用子程序舉例_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

例:編寫10ms延時(shí)子程序。(假設(shè)晶振頻率為12MHZ)D10ms:MOVR5,#10;1usD1ms:MOVR4,#249;1usDL:NOPNOP

DJNZR4,DL;4x249=996us

DJNZR5,D1ms;2us,總循環(huán)共(1+996+2)

×10=9990usRET;2us07:22:551.延時(shí)子程序設(shè)計(jì)初始化:循環(huán)次數(shù)賦值循環(huán)體次數(shù)計(jì)算:晶振頻率→機(jī)器周期→循環(huán)體時(shí)間→循環(huán)次數(shù)精確計(jì)算:考慮賦值次數(shù)與時(shí)間,還要考慮進(jìn)入與返回時(shí)間進(jìn)入時(shí),應(yīng)注意子程序使用到的寄存器的保護(hù);返回時(shí),無參數(shù)帶出。多時(shí)間延時(shí)子程序如何設(shè)計(jì)?——外循環(huán)次數(shù)參數(shù)帶入,內(nèi)循環(huán)時(shí)間固定。07:22:55延時(shí)子程序設(shè)計(jì)要點(diǎn):07:22:55子程序:DLnms:NOPD1ms:

MOVR4,#249DL:NOPNOPDJNZR4,DLDJNZR5,D1msRET;主程序:

……

MOVR5,#n

CALLDLnms

……多時(shí)間延時(shí)子程序調(diào)用07:22:552.輸入設(shè)備子程序設(shè)計(jì)撥碼開關(guān)電路設(shè)計(jì)撥碼開關(guān)狀態(tài)的讀???設(shè)置輸入端口讀輸入端口保存輸入值KEYRD:MOVP3,#0FFHMOVA,P3

MOVR5,ARET07:22:55輕觸開關(guān)電路設(shè)計(jì)輕觸開關(guān)狀態(tài)的讀???設(shè)置輸入端口讀輸入端口去抖動(dòng)保存輸入值07:22:55ANYKEY:MOVP3,#0FFHNOKEY:MOVA,P3 CPLA JZNOKEY;無鍵按下

MOVTEMP,P3;有鍵按下,TEMP為存儲(chǔ)器單元,保存結(jié)果

CALLD10ms MOVA,P3 CJNEA,TEMP,NOKEY;去抖

MOVR5,A;保存按鍵

SETB00H;有鍵標(biāo)志

RET例:有二個(gè)輕觸開關(guān),分別控制二個(gè)計(jì)數(shù)器,每按一次,計(jì)數(shù)器加1,最大分別加到5與9,又從0開始。編寫其子程序。07:22:55寄存器資源分配:

R3、R4:保存計(jì)數(shù)值

R5:保存開關(guān)值設(shè)計(jì)關(guān)鍵點(diǎn):是否有按鍵?有按鍵,是什么鍵?是否同一次按下的鍵?07:22:55按鍵判斷、去抖ANYKEY:MOVP3,#03HNOKEY:MOVA,P3ORLA,#0FCH CPLA JZNOKEY MOVTEMP,A

CALLD10MS MOVA,P3 ORLA,#0FCH CPLA CJNEA,TEMP,NOKEY MOVR5,A RETKEYAGIN:MOVP3,#03HKEYTA:MOVA,P3 ORLA,#0FCHCPLA CJNEA,TEMP,KEYCHSJMPKEYTAKEYCH:NOPRET按鍵釋放判斷07:22:55計(jì)數(shù)控制COUNTER:MOVA,R5CJNEA,#01,KEY2CON CJNER3,#05,CON1ADD MOVR3,#00H SJMPCONOVERCON1ADD:INCR3 SJMPCONOVERKEY2CON:CJNER4,#09H,CON2ADD MOVR4,#00H SJMPCONOVERCON2ADD:INCR4CONOVER:NOP RET07:22:55主程序引用:

TEMPEQU30HORG0000HLJMPMAINORG00100HMAIN:MOVR3,#00H MOVR4,#00HLOOP:LCALLDISP LCALLANYKEY LCALLCOUNTER LCALLKEYAGIN SJMPLOOPDISP:MOVA,R3SWAPAORLA,R4MOVP1,ARET07:22:55問題:1.分析程序工作過程——多個(gè)子程序調(diào)用關(guān)系2.如何分解任務(wù)(判鍵—去抖—計(jì)數(shù)—鍵盤再次判斷—顯示)3.顯示從P1口輸出,用發(fā)光二極管代替,也可以用帶譯碼的數(shù)碼實(shí)現(xiàn)4.修改程序,將程序修改為二鍵,先選擇需要調(diào)整的計(jì)數(shù)位(可以閃爍顯示),再用相同二鍵分別實(shí)現(xiàn)加減功能改變計(jì)數(shù)值。07:22:553.信號(hào)處理(運(yùn)算)子程序設(shè)計(jì)例:編寫多字節(jié)無符號(hào)數(shù)的減法子程序。設(shè)2個(gè)多字節(jié)無符號(hào)數(shù)的低字節(jié)地址分別存于R0和R1中,低字節(jié)在高地址單元。相減后的差存放在減數(shù)原來的位置。子程序入口:(R0)=被減數(shù)低字節(jié)地址;

(R1)=減數(shù)的低字節(jié)地址;

(R7)=字節(jié)數(shù)子程序出口:(R1)=差的高字節(jié)地址;07:22:55程序:ORG0000H ljmpMAIN ORG0040HMAIN:MOVR0,#37HMOVR1,#3FH ACALLNSUB SJMP$NSUB:MOVR7,#3CLRCNSUB1:MOVA,@R0SUBBA,@R1 MOV@R1,A DECR0 DECR1 DJNZR7,NSUB1 INCR1 RET END07:22:55例:利用子程序?qū)崿F(xiàn)c=a2+b2。設(shè)a,b,c分別存于內(nèi)部RAM的30H,31H,32H三個(gè)單元中。子程序入口:(A)=預(yù)平方數(shù);子程序出口:(A)=平方值;07:22:55SQR:MOVDPTR,#TABMOVCA,@A+DPTR RETTAB:DB0,1,4,9,16,25,36,49,64,81ENDORG0000H LJMPMAIN ORG0040HMAIN:MOV30H,#4MOV31H,#5 MOVA,30H ACALLSQR MOVR1,A MOVA,31H ACALLSQR ADDA,R1 MOV32H,A SJMP$07:22:55例:將1位十六進(jìn)制數(shù)轉(zhuǎn)換成相應(yīng)的ASCII碼。設(shè)十六進(jìn)制數(shù)存放在R0中,轉(zhuǎn)換后的ASCII碼存放于R2中。ORG0000HljmpMAIN ORG0040HMAIN:MOVR0,#0BHACALLHASC SJMP$HASC:MOVA,R0ANLA,#0FH PUSHACC CLRC SUBBA,#0AH POPACC JCLOOP ADDA,#07HLOOP:ADDA,#30HMOVR2,A RETEND07:22:55例:雙字節(jié)二進(jìn)制數(shù)轉(zhuǎn)換成BCD碼。設(shè)(R2R3)為雙字節(jié)二進(jìn)制數(shù),(R4R5R6)為轉(zhuǎn)換完的壓縮型BCD碼。ORG0000HljmpMAINORG0040HMAIN:MOVR2,#0B2HMOVR3,#1BH ACALLDCDTH SJMP$07:22:55DCDTH:CLRAMOVR4,A MOVR5,A MOVR6,A MOVR7,#16LOOP:CLRCMOVA,R3 RLCA MOVR3,AMOVA,R2 RLCA MOVR2,AMOVA,R6 ADDCA,R6 DAA MOVR6,A MOVA,R5 ADDCA,R5 DAA MOVR5,A MOVA,R4 ADDCA,R4 DAA MOVR4,A DJNZR7,LOOP RET END07:22:554.輸出設(shè)備子程序設(shè)計(jì)例:數(shù)據(jù)端與P0口正序連接。編寫程序,實(shí)現(xiàn)功能:上電后數(shù)碼管顯示“P”,1秒后,顯示從“0”開始每隔1秒加1,加至“F”后,數(shù)碼管顯示“P”,重新開始。07:22:55ORG0000HJMPSTARTORG0100HSTART:MOVSP,#5FHMOVP0,#8CH;顯示"P" MOVP3,#0FFHCALLD_1SCALLDISPJMPSTART07:22:55DISP:MOVR7,#16 MOVR2,#0LOOP:MOVA,R2MOVDPTR,#CODE_P0MOVCA,@A+DPTRMOVP0,AINCR2

SETBRS0;切換組

CALLD_1SCLRRS0DJNZR7,LOOPRETD_1S:(子程序)

CODE_P0:DB0C0H,0F9H,0A4H,0B0HDB99H,92H,82H,0F8HDB80H,90H,8

溫馨提示

  • 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)論