专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

广告流水灯汇编程序

作者:佚名   来源:本站原创   点击数:  更新时间: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伪指令来实现规定程序的起始地址。如果不用ORG规定则汇编得到的目标程序将从0000H开始。例如:


ORG 2000H
START:MOV A,#00H


        其实:ORG 00H这条指令的作用是定位初始地址,这里只是一个规定,没有其它含义。如上边的两条代码,规定了起始地址,那么得到的目标程序将不会从默认的00H开始,而是从定义的2000H处执行。至于第二条指令,MOV P2,#80H这条指令完全没有用,可以删去。

 

   CLR C是CF置零,相当于STAB CF的反操作,目的是将进位位置零.


 

        DJNZ指令有两种格式:DJNZ Rn,rel和DJNZ direct,rel,其实它的功能不止这些,本程序中使用到的只是一个标号,也就是工作寄存器组Rn非零则转移到标号标示的位置执行程序,为零则顺序进行下一条指令的执行。

 


DJNZ Rn,rel 寄存器减1,非零转移
DJNZ direct,rel 直接地址单元减1,非零转移

RLC A   ;累加器带进位位循环左移
RRC A   ;累加器带进位位循环右移


        上边的两条移位指令是带进位的移位指令,注意和汇编语言程序设计中的SHR、SHL、SAR、SAL进行比对,它相当于是SAR和SAL,也就是算术移位指令,因为标志寄存器CF始终参与移位。其实,汇编语言程序中存在一个循环移位指令,用到这里效率会更高。

 

JMP $  ;原地不动,即一直保持,无条件转移
END    ;汇编程序结束, 这里不用也没有关系


        另外对于DJNZ Rn,$来说,也不难理解。Rn内容递减,而$不变,即所谓原地跳转,但这是有条件转移指令,对于无条件转移指令JMP $来说,就是原地不动,一直保持。
 

 

关闭窗口

相关文章