我是微控制器编程的新手,特别是PIC18F87J11,我正在使用MPLAB C18编译器。我正在阅读各种主题的数据表,例如保存到内存或使用计时器。我注意到这些例子是用汇编语言编写的,但我对它的经验最少。有没有办法在我的项目中一起使用Assembly和C的强大功能?
我不明白汇编是好的,否则我会尝试将代码转换为C,在这种情况下,我只是使用汇编代码,几乎没有变化。
现在有人可以向我展示如何在使用MPLAB C18编译器的C程序中使用汇编函数的示例吗?
汇编函数可以像hello world一样简单。我只需要了解在MPLAB上梳理和使用两种不同语言的过程。我试图创建一个快速测试功能,但我不知道在哪里放置汇编代码。汇编代码是否需要包含在项目中的自己的文件?
我希望有人可以通过一个完整的简单例子来启发我,以便能够看到全局。我提前给予帮助,谢谢!
答案 0 :(得分:5)
有一种方法可以在C语言中使用asm,具体取决于您使用的编译器(在C中使用asm的容量不是标准的一部分)。每个编译器都不使用相同的语法。使用MPLAB C18,它是这样的:
void main()
{
_asm
movlw 0x57
movwf PORTB
_endasm
}
上面的示例来自此link,它将向您解释如何在C中使用带有MPLAB C18的asm。
答案 1 :(得分:2)
无法访问编译器,我无法对此进行测试,但我发现here的 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。如果你想要包含参数和返回值,那么它会变得有点棘手。