專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

廣告流水燈匯編程序

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2010年09月13日   【字體:
_____________________________________________________
功能:

        廣告流水燈程序
時間:

        2010—9—13

注釋:

        指令MOV P2,#80H是一條廢指令,不起作用,可刪除
_____________________________________________________ 

ORG 00H
MOV P2,#80H
START:MOV A,#0FFH    ;賦初值
      CLR C
      MOV R2,#8
LOOP:RRC A           ; 帶進位右移
     MOV P1,A
     CALL DELAY
     DJNZ R2,LOOP
     MOV R2,#7
LOOP1:RLC A          ;  帶進位左移
      MOV P1,A
      CALL DELAY
      DJNZ R2,LOOP1
      JMP START
DELAY:MOV R3,#20     ;   延時0.2秒
D1:   MOV R4,#20
D2:   MOV R5,#248
      DJNZ R5,$
      DJNZ R4,D2
      DJNZ R3,D1
      RET
      END

     ORG是Origin的縮寫:起始地址源。在匯編語言源程序的開始通常都用一條ORG偽指令來實現(xiàn)規(guī)定程序的起始地址。如果不用ORG規(guī)定則匯編得到的目標(biāo)程序?qū)?000H開始。例如:


ORG 2000H
START:MOV A,#00H


        其實:ORG 00H這條指令的作用是定位初始地址,這里只是一個規(guī)定,沒有其它含義。如上邊的兩條代碼,規(guī)定了起始地址,那么得到的目標(biāo)程序?qū)⒉粫䦶哪J(rèn)的00H開始,而是從定義的2000H處執(zhí)行。至于第二條指令,MOV P2,#80H這條指令完全沒有用,可以刪去。

 

   CLR C是CF置零,相當(dāng)于STAB CF的反操作,目的是將進位位置零.


 

        DJNZ指令有兩種格式:DJNZ Rn,rel和DJNZ direct,rel,其實它的功能不止這些,本程序中使用到的只是一個標(biāo)號,也就是工作寄存器組Rn非零則轉(zhuǎn)移到標(biāo)號標(biāo)示的位置執(zhí)行程序,為零則順序進行下一條指令的執(zhí)行。

 


DJNZ Rn,rel 寄存器減1,非零轉(zhuǎn)移
DJNZ direct,rel 直接地址單元減1,非零轉(zhuǎn)移

RLC A   ;累加器帶進位位循環(huán)左移
RRC A   ;累加器帶進位位循環(huán)右移


        上邊的兩條移位指令是帶進位的移位指令,注意和匯編語言程序設(shè)計中的SHR、SHL、SAR、SAL進行比對,它相當(dāng)于是SAR和SAL,也就是算術(shù)移位指令,因為標(biāo)志寄存器CF始終參與移位。其實,匯編語言程序中存在一個循環(huán)移位指令,用到這里效率會更高。

 

JMP $  ;原地不動,即一直保持,無條件轉(zhuǎn)移
END    ;匯編程序結(jié)束, 這里不用也沒有關(guān)系


        另外對于DJNZ Rn,$來說,也不難理解。Rn內(nèi)容遞減,而$不變,即所謂原地跳轉(zhuǎn),但這是有條件轉(zhuǎn)移指令,對于無條件轉(zhuǎn)移指令JMP $來說,就是原地不動,一直保持。
 

 

關(guān)閉窗口

相關(guān)文章