【问题标题】:Why does "acall" instruction does not work in Atmel 89C2051 microcontroller?为什么“acall”指令在 Atmel 89C2051 微控制器中不起作用?
【发布时间】:2011-06-03 07:56:15
【问题描述】:

我用 Keil-µVision 和 Asem-51 进行了尝试,但他们仍然认为这是一个语法错误。这是我的代码:

acall subroutine1
.
.
.

subroutine1:
.
.
.
ret

【问题讨论】:

    标签: assembly embedded microcontroller firmware 8051


    【解决方案1】:

    AT89C2051 部分绝对支持 ACALL 指令(所以声称data sheet,我自己也成功使用过)。

    您在每个汇编程序中看到的 exact 错误是什么?您的源代码的其余部分是否可以编译?

    您能否发布给出错误的确切来源(或者如果代码本身是机密的,则可以举一个小例子来说明问题)?

    【讨论】:

      【解决方案2】:

      我刚刚想通了。子程序定义必须在调用前先行:

         org 0
         sjmp start
      
      subroutine1:
         .
         .
         .
         ret
      
      start:
        .
        .
        .
        acall subroutine1
      

      感谢 psmears 确认“acall”指令确实适用于 AT89C2051。

      @All,如果这对您有帮助,您可以投票赞成这个答案。谢谢。

      【讨论】:

      • 您应该可以稍后在源文件中调用子例程。如何做到这一点将取决于您的汇编程序(Keil / Assem-51 / 等),但如果有一个“两遍”汇编选项应该可以解决问题......
      猜你喜欢
      • 2011-06-03
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      相关资源
      最近更新 更多