<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發(fā)網(wǎng)

      電子開發(fā)網(wǎng)電子設(shè)計(jì) | 電子開發(fā)網(wǎng)Rss 2.0 會(huì)員中心 會(huì)員注冊
      搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 電子開發(fā) >> 單片機(jī) >> 正文

      51單片機(jī)指令系統(tǒng)(3)

      作者:佚名    文章來源:網(wǎng)上收集    點(diǎn)擊數(shù):    更新時(shí)間:2008-11-4
      第二十一課:匯編程序的基本結(jié)構(gòu)
      程序編寫做到:
      占用存儲空間少;
      運(yùn)行時(shí)間短;
      程序的編制、調(diào)試及排錯(cuò)所需時(shí)間短;
      結(jié)構(gòu)清晰,易讀、易于移植。
      按結(jié)構(gòu)化程序設(shè)計(jì)思想,任何復(fù)雜程序都可由順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)等構(gòu)成。
      如圖1所示。


      一、順序程序舉例
      例1、設(shè)在外RAM的60H單元存有1個(gè)字節(jié)代碼,要求將其分解成兩個(gè)4位字段,高4位存入原單元的低4位,其低4位存入61H單元的低4位,且要求這兩個(gè)單元的高4位均為0,試編制完整程序。
      解: 字節(jié)分解:

      核心指令   ANL
                 ORL 1000H
         MODE:   MODE:MOV R0,#60H
                 MOVX A,@R0
                 MOV B,A
                 ANL A,#0F0H
                 SWAP A
                 MOVX @R0,A
                 ANL B,#0FH
                 MOV A,B
                 INC R0
                 MOVX @R0,A
                 END
      二、分支結(jié)構(gòu)與分支程序設(shè)計(jì)
      結(jié)構(gòu):根據(jù)不同的條件,進(jìn)行相應(yīng)的處理。
      通常用條件轉(zhuǎn)移指令形成簡單分支結(jié)構(gòu)。
      如: 判(A) = Z 或 NZ ,轉(zhuǎn)移
      判(CY)= 1 或 0 ,轉(zhuǎn)移
      判(bit)=1 或 0 ,轉(zhuǎn)移
      CJNE 比較不相等轉(zhuǎn)移
      例3、設(shè)a存放在累加器A中,b存放在寄存器B中,要求按下式計(jì)算Y值,并將結(jié)果Y存于累加器A 中,試編寫程序。

      解:本題關(guān)鍵是判a是正數(shù),還是負(fù)數(shù);由ACC7便知。
                ORG 1000H
            BR: JB ACC7,MINUS
                CLR C
                SUBB A,B
                SJMP DONE
         MINUS: ADD A,B
          DONE: SJMP $
                END
      例4、設(shè)有兩個(gè)16位無符號數(shù)NA,NB分別存放在8031單片機(jī)內(nèi)部RAM的40H、41H及50H、51H單元中,當(dāng)NA > NB時(shí),將內(nèi)部RAM的42H單元清0;否則,將該單元置成全1,試編程。
      解法I:因?yàn)闊o16位數(shù)的比較指令,所以,只能用8位數(shù)的比較指令。
      (畫出流程框圖)
                ORG 2000H
           CMP: MOV A,50H
                CJNE A,40H,CMP1
                MOV A,51H
                CJNE A,41H,CMP1
                SJMP NHIGHE
          CMP1: JC HIGHE
        NHIGHE:MOV 42H,#0FFH
                SJMP DONE
         HIGHE: MOV 42H,#00H
          DONE: SJMP $
                END
      上述程序中多次用到SJMP語句,該語句為無條件轉(zhuǎn)移語句。無條件語句應(yīng)盡量少用,這樣可使程序結(jié)構(gòu)緊湊而易讀,易理解。

      解法II:先假設(shè)NA > NB,再來判斷是否NA ≤ NB
                ORG 3000H
          CMP2: MOV R0,#00H
                MOV A,50H
                CJNE A,40H,CMP3
                MOV A,51H
                CJNE A,41H,CMP3
                SJMP NHIGHE
          CMP3: JC HIGHE
                NHIGHE:MOV R0,#0FFH ;不大于標(biāo)志
         HIGHE: MOV 42H,R0
                SJMP $
                END
      循環(huán)結(jié)構(gòu)不但使程序簡練,而且大大節(jié)省存儲空間。
      循環(huán)程序包含四部分:
      初始化部分
      循環(huán)處理部分(主體)
      循環(huán)控制部分(修改地址指針、修改變量、檢測循環(huán)結(jié)束條件)
      循環(huán)結(jié)束部分(對結(jié)果分析、處理,存放結(jié)果)

      循環(huán)有:單循環(huán)、多重循環(huán)。
      循環(huán)次數(shù)已知,可用計(jì)數(shù)器控制循環(huán)次數(shù);
      循環(huán)次數(shù)未知,按問題條件控制循環(huán)是否結(jié)束。
      一、單循環(huán)程序
      1、循環(huán)次數(shù)是已知的程序
      例1、已知片外RAM的10H單元存放8位二進(jìn)制數(shù),要求將其轉(zhuǎn)移成相應(yīng)的ASCII碼,并以高位在前,低位在后的順序,依次存放到片外RAM以11H為首地址的連續(xù)單元中,試編程。

      解:先將中間單元置成30H,然后判欲轉(zhuǎn)換位是否為1,
      若是,則將中間單元內(nèi)容加1;否則,中間單元內(nèi)容保持不變。
      通過左移指令實(shí)現(xiàn)由高到低的順序進(jìn)行轉(zhuǎn)換。
               ORG 1000H    
        START: MOV R2,#08H    ;循環(huán)計(jì)數(shù)初值(循環(huán)次數(shù)已知)
               MOV R0,#10H    ;地址指針初值
               MOVX A,@R0     ;取數(shù)
               MOV B,A        ;暫存B中
         LOOP: MOV A,#30H     ;將中間單元(A)置成30H
               JNB B.7,NA     ;判斷轉(zhuǎn)換的二進(jìn)制位為0否?
                               ;若是轉(zhuǎn)NA
               INC A           ;1的ASCII碼“31H”
           NA: INC R0          ;修改地址指針
               MOVX @R0,A     ;存放轉(zhuǎn)換的結(jié)果
               MOV A,B  
               RL A,B         ;作好準(zhǔn)備,判斷下一位
               MOV B,A        ;暫存
               DJNZ R2,LOOP   ;判斷轉(zhuǎn)換結(jié)束否?未完繼續(xù)
               SJMP $  
               END  
      2)循環(huán)次數(shù)未知的程序
      例2、設(shè)用戶用鍵盤輸入長度不超過100字節(jié)的字符串放在8031單片機(jī)外部RAM以20H為首地址的連續(xù)單元,該字符串用回車符CR(‘CR’= 0DH)作為結(jié)束標(biāo)志,要求統(tǒng)計(jì)此字符串的長度并存入內(nèi)部RAM的1FH單元中。
      解:從首單元開始取數(shù),每取一數(shù)判斷其是否為‘CR’,是則結(jié)束。
               ORG 1000H
         STADA DATA 20H
         SLANG DATA 1FH
               MOV R0,#STADA-1
        CMCR2: MOV B,#0FFH
               INC R0
        CRLOP: INC B
               MOVX A,@R0
               CJNE A,#0DH,CRLOP
               MOV SLANG,B
               SJMP $
               END
      2、多重循環(huán)設(shè)計(jì)
      循環(huán)體中還包含著一個(gè)或多個(gè)循環(huán)結(jié)構(gòu),即雙重或多重循環(huán)。
      例3、設(shè)8031使用12MHz晶振,試設(shè)計(jì)延遲100ms的延時(shí)程序。
      解:延時(shí)程序的延遲時(shí)間就是該程序的執(zhí)行時(shí)間,通常采用MOV和DJNZ二指令。
      T = 12 / fosc = 12 / (12×106)= 1us

      內(nèi)循環(huán)延時(shí):
      (1 + 2 × CTR)T = 500us(假設(shè))
      則CTR = 250
      實(shí)際延時(shí):[1 + 2 × 250] × 1us = 501us

      外循環(huán)延時(shí):T +(501 + 2T)× CTS = 100ms = 100 000us
      所以 , CTS = 198.8 取 199
      實(shí)際延時(shí):[1 + (501 + 2)×199] = 1000.98ms

      例4、設(shè)在8031內(nèi)部RAM中存一無符號數(shù)的數(shù)組,其長度為100,起始地址是30H,要求將它們從大到小排序,排序后仍存放在原區(qū)域中,試編者按程。

      這就是所畏的“冒泡法”。
      實(shí)際上大多情況,用不到99次循環(huán),排序就結(jié)束。為了提高排序速度,程序中可設(shè)一交換標(biāo)志位,如10H位,
      每次循環(huán)中:若有交換則 SETB 10H
      若無交換則 CLR 10H
      每次循環(huán)結(jié)束時(shí),測10H位,判斷排序是否結(jié)束。
                ORG 1000H
                MOV R0,#30H
        BUBBLE: MOV B,#64H
                CLR 10H
                DEC B
                MOV A,@R0           ;長度計(jì)數(shù)
          LOOP: MOV 20H,A           ;暫存,為交換作準(zhǔn)備
                INC R0
                MOV 21H,@R0
                CJNE A,21H,BUEU    ;若(20H)≠(21H)轉(zhuǎn)移
                JNC BUNEXT           ;(20H)≥(21H)轉(zhuǎn)移
          BUEU: MOV A,@R0           ;若(20H)< (21H)則交換
                MOV @R0,20H
                DEC R0               ;使R0退格指向小地址
                MOV @R0,A
                INC R0               ;恢復(fù)R0指向大地址
                SETB 10H             ;置交換標(biāo)志
                DJNZ B,LOOP
        BUNEXT: JB 10H,BUBBLE       ;判斷標(biāo)志位為1否?若為1,則繼續(xù)
                END
      Tags:單片機(jī),指令系統(tǒng),指令學(xué)習(xí),電子設(shè)計(jì)  
      責(zé)任編輯:admin
      相關(guān)文章列表
      51單片機(jī)指令系統(tǒng)(2)
      請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個(gè)字
      [ 查看全部 ] 網(wǎng)友評論
      關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 色综合天天做天天爱| 人人狠狠综合久久亚洲88| 色综合天天综合给合国产| 婷婷久久香蕉五月综合加勒比| 伊人久久青草青青综合| 亚洲综合久久综合激情久久| 色综合久久中文字幕网| 国产成人麻豆亚洲综合无码精品 | 亚洲色欲色欲综合网站| 无码国内精品久久综合88| 狠狠色婷婷狠狠狠亚洲综合| 欧洲97色综合成人网| 久久久久久久综合色一本| 五月综合色婷婷影院在线观看 | 久久综合狠狠色综合伊人| 99久久综合国产精品免费| 奇米综合四色77777久久| 国产成人精品综合在线观看| 香蕉尹人综合在线观看| 91精品国产色综合久久不卡蜜| 亚洲乱码中文字幕综合234| 亚洲综合小说另类图片动图| 色狠台湾色综合网站| 98精品国产综合久久| 色综合色综合久久综合频道| 亚洲综合久久1区2区3区| 97色伦图片97综合影院久久| 99久久综合狠狠综合久久一区| 久久无码无码久久综合综合| 伊人久久大香线蕉综合爱婷婷| 伊人不卡久久大香线蕉综合影院| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 久久婷婷五月综合色奶水99啪| 久久婷婷五月综合色国产香蕉| 成人综合伊人五月婷久久| 伊人网综合在线视频| 久久综合九色综合91| 亚洲国产精品成人综合色在线| 色噜噜狠狠狠狠色综合久一| 久久久久久久综合日本| 久久精品亚洲综合|