1

我对微控制器编程特别是PIC18F87J11非常陌生,我正在使用 MPLAB C18 编译器。我正在阅读各种主题的数据表,例如保存到内存或使用计时器。我注意到这些示例是用汇编语言编写的,但我对它的经验很少。有没有办法在我的项目中同时使用 Assembly 和 C 的强大功能?

我不太了解汇编,否则我会尝试将代码转换为 C,在这种情况下,我宁愿只使用汇编代码并进行少量更改。

现在有人可以向我展示如何在带有 MPLAB C18 编译器的 C 程序中使用汇编函数的示例吗?

汇编函数可以像hello world一样简单。我只需要了解在 MPLAB 上组合和使用两种不同语言的过程。我试图创建一个用于测试的快速函数,但我不知道将汇编代码放在哪里。汇编代码是否需要在项目中包含自己的文件?

我希望有人可以通过一个完整的简单示例来启发我,以便能够看到全局。我提前适当的帮助,谢谢!

4

2 回答 2

5

有一种在 C 语言中使用 asm 的方法,具体取决于您使用的编译器(在 C 中使用 asm 的能力不是标准的一部分)。每个编译器不使用相同的语法。对于 MPLAB C18,它是这样的:

void main()
{
     _asm
                movlw 0x57
                movwf PORTB
    _endasm
}

上面的例子来自这个链接,它将解释如何在 MPLAB C18 中使用 C 语言中的 asm。

于 2013-07-25T07:23:21.690 回答
2

如果无法访问编译器,我无法对此进行测试,但我在此处找到的MPLAB C18 C 编译器用户指南和发行说明指出:

2.8.2 内联汇编

MPLAB C18 使用类似于 MPASM 汇编器的语法提供了一个内部汇编器。汇编代码块必须以 开头_asm和结尾_endasm。块内的语法是:

[label:] [<instruction> [arg1[, arg2[, arg3]]]]

...

因此,在我看来,一种解决方案可能是将类似的内容嵌入到您的 .C 文件中

void myAsmFunction()
{
  _asm
  // The asm code you've been looking at
  _endasm
}

然后在适当的地方调用 myAsmFunction。如果您想包含参数和返回值,那么它会变得有点棘手。

于 2013-07-25T07:23:56.240 回答