• 51单片机例程 > 10课:单片机数据传送类指令
  • 10课:单片机数据传送类指令

    免费下载 下载该文档 文档格式:DOC   更新时间:2008-03-02   下载次数:0   点击次数:3
    文档基本属性
    文档语言:Simplified Chinese
    文档格式:doc
    文档作者:Administrators
    关键词:
    主题:
    备注:
    点击这里显示更多文档属性
    POP direct
    第一条指令称之为推入,就是将direct中的内容送入堆栈中,第二条指令称之为弹出,就是将堆栈中的内容送回到direct中.推入指令的执行过程是,首先将SP中的值加1,然后把SP中的值当作地址,将direct中的值送进以SP中的值为地址的RAM单元中.例:
    MOV SP,#5FH
    MOV A,#100
    MOV B,#20
    PUSH ACC
    PUSH B
    则执行第一条PUSH ACC指令是这样的:将SP中的值加1,即变为60H,然后将A中的值送到60H单元中,因此执行完本条指令后, 内存60H单元的值就是100,同样,执行PUSH B时,是将SP+1,即变为61H,然后将B中的值送入到61H单元中,即执行完本条指令后,61H单元中的值变为20.
    POP指令的在单片机中执行是这样的,首先将SP中的值作为地址,并将此地址中的数送到POP指令后面的那个direct中,然后SP减1.
    接上例:
    POP B
    POP ACC
    则执行过程是:将SP中的值(现在是61H)作为地址,取61H单元中的数值(现在是20),送到B中,所以执行完本条指令后B中的值是20,然后将SP减1,因此本条指令执行完后,SP的值变为60H,然后执行POP ACC,将SP中的值(60H)作为地址,从该地址中取数(现在是100),并送到ACC中,所以执行完本条指令后,ACC中的值是100.
    这有什么意义呢 ACC中的值本来就是100,B中的值本来就是20,是的,在本例中,的确没有意义,但在实际工作中,则在PUSH B后一般要执行其他指令,而且这些指令会把A中的值,B中的值改掉,所以在程序的结束,如果我们要把A和B中的值恢复原值,那么这些指令就有意义了.
    还有一个问题,如果我不用堆栈,比如说在PUSH ACC指令处用MOV 60H,A,在PUSH B处用指令MOV 61H,B,然后用MOV A,60H,MOV B,61H来替代两条POP指令,不是也一样吗 是的,从结果上看是一样的,但是从过程看是不一样的,PUSH和POP指令都是单字节,单周期指令,而MOV指令则是双字节,双周期指令.更何况,堆栈的作用不止于此,所以一般的计算机上都设有堆栈,单片机也是一样,而我们在编写子程序,需要保存数据时,常常也不采用后面的办法,而是用堆栈的办法来实现.
    例:写出以下单片机程序的运行结果
    MOV 30H,#12
    MOV 31H,#23
    PUSH 30H
    PUSH 31H
    POP 30H
    POP 31H
    结果是30H中的值变为23,而31H中的值则变为12.也就两者进行了数据交换.从这个例程能看出:使用堆栈时,入栈的书写次序和出栈的书写次序必须相反,才能保证数据被送回原位,不然就要出错了.
    作业:在MCS51下执行上面的例程,注意观察内存窗口和堆栈窗口的变化.
    11课:单片机算术运算指令
    作者: 来源:本站原创 点击数: 2478 更新时间:2007年08月15日

    不带进位位的单片机加法指令
    ADD A,#DATA ;例:ADD A,#10H
    ADD A,direct ;例:ADD A,10H
    ADD A,Rn ;例:ADD A,R7
    ADD A,@Ri ;例:ADD A,@R0
    用途:将A中的值与其后面的值相加,最终结果否是回到A中.
    例:MOV A,#30H
    ADD A,#10H
    则执行完本条指令后,A中的值为40H.
    下面的题目自行练习
    MOV 34H,#10H
    MOV R0,#13H
    MOV A,34H
    ADD A,R0

    上一页下一页

  • 下载地址 (推荐使用迅雷下载地址,速度快,支持断点续传)
  • 免费下载 DOC格式下载
  • 您可能感兴趣的
  • pic单片机定时器例程  单片机例程  pic单片机pwm例程  80c51单片机英文资料  51系列单片机开发宝典  51系列单片机  51单片机应用实例下载  mcs51单片机  51单片机学习