打印
[开发工具]

51单片机c嵌汇编教程

[复制链接]
1514|36
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
saservice|  楼主 | 2024-6-29 11:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一步;按照建立普通c51程序的方法,建立c51工程文件。
           建立两个*.c文件(c51shi.c和asm.c),加入工程。c51shi.c为主程序,asm.c为汇编函数。

第二步:在 Project 窗口中包含汇编代码的 C 文件上右键,选择“Options for ...”,点击右边的“Generate Assembler SRC File”和“Assemble SRC File”,使检查框由灰色变成黑色(有效)状态;


第三步: 根据选择的编译模式,把相应的库文件加入工程中,该文件必须作为工程的最后文件;
         注:库文件说明
             C51S.LIB - 没有浮点运算的 Small model
             C51C.LIB - 没有浮点运算的 Compact model
             C51L.LIB - 没有浮点运算的 Large model
             C51FPS.LIB - 带浮点运算的 Small model
             C51FPC.LIB - 带浮点运算的 Compact model
             C51FPL.LIB - 带浮点运算的 Large model


第四步: build这个工程后将会产生一个asm.SRC的文件,将这个文件改名为asm.A51,然后在工程里去掉库文件(如C51S.Lib)和asm.c,而将asm.A51添加到工程里。


第五步: 检查c51shi.c的“Generate Assembler SRC File”和“Assemble SRC File”是否有效,若是有效则点击使检查框变成无效状态;再次build这个工程,到此你已经得到汇编函数的主体,修改函数里面的汇编代码就得到你所需的汇编函数了。

c51.c代码如下:
#include <reg52.h>
//*************** 函数定义 ******************
void asm(void);                //汇编函数

//*************** 主程序 ********************
void main(void)
{
  while(1)
  {
asm();
  }
}


asm.c代码如下:
void asm(void)
{

}



经过以上五步后,您将得到一个asm.a51文件,在文件中红色代码后添加您的汇编语句即可。


; ./asm.SRC generated from: asm.c
; COMPILER INVOKED BY:
;        C:/Keil/C51/BIN/C51.EXE asm.c BROWSE DEBUG OBJECTEXTEND SRC(./asm.SRC)

NAME ASM
?PR?asm?ASM          SEGMENT CODE
PUBLIC asm
;
;
;
; void asm(void)
RSEG  ?PR?asm?ASM
asm:
//在此处添加您的汇编代码**************
      ret


      END



-----------------------------------------------------------------------------------------

第一步:在 Project 窗口中包含汇编代码的 C 文件上右键,选择“Options for ...”,点击右边的“Generate Assembler SRC File”和“Assemble SRC File”,使检查框由灰色变成黑色(有效)状态;

第二步:根据选择的编译模式,把相应的库文件(如 Small 模式时,是Keil/C51/Lib/C51S.Lib)加入工程中, 该文件必须作为工程的最后文件;
C51S.LIB - 没有浮点运算的 Small model
C51C.LIB - 没有浮点运算的 Compact model
C51L.LIB - 没有浮点运算的 Large model
C51FPS.LIB - 带浮点运算的 Small model
C51FPC.LIB - 带浮点运算的 Compact model
C51FPL.LIB - 带浮点运算的 Large model

第三步:在需要嵌入汇编的地方以如下方式加入汇编代码;
    #pragma ASM
    ; Assembler Code Here
    #pragma ENDASM

第四步:编译,即可生成目标代码;

使用特权

评论回复
沙发
geraldbetty| | 2024-7-4 19:38 | 只看该作者
有扎实的C语言和汇编语言基础,了解单片机的基本原理和51单片机的硬件结构。

使用特权

评论回复
板凳
mickit| | 2024-7-4 20:33 | 只看该作者
必须遵循C51编译器的语法规则来嵌入汇编代码。通常,汇编代码块需要用特定的预处理指令包围起来,如在Keil C51中,使用#pragma asm和#pragma endasm来标识汇编代码的开始和结束。

使用特权

评论回复
地板
pentruman| | 2024-7-4 22:07 | 只看该作者
在C51中,嵌入汇编的关键字是__asm__(或asm)和__endasm;(或endasm;)。确保在C代码中使用正确的关键字来标记汇编代码的开始和结束。

使用特权

评论回复
5
timfordlare| | 2024-7-7 13:30 | 只看该作者
虽然C语言提供了高层次的编程抽象,但在某些情况下,你可能需要编写汇编代码来实现特定功能。熟悉8051汇编指令集,能够阅读和编写基本的汇编代码是非常有用的。

使用特权

评论回复
6
cashrwood| | 2024-7-7 16:30 | 只看该作者
必须管理好寄存器的使用,避免在汇编代码段中意外修改C代码使用的寄存器。

使用特权

评论回复
7
saservice|  楼主 | 2024-7-9 21:03 | 只看该作者
需要在编译器中激活相应的选项,以便正确处理汇编代码。在Keil C51中,需要激活“Generate Assembler SRC File”和“Assembler SRC File”两个选项。

使用特权

评论回复
8
loutin| | 2024-7-10 00:07 | 只看该作者
由于汇编代码和C代码都可能使用相同的寄存器和内存地址,因此需要特别注意避免冲突。特别是汇编代码中使用的地址自增(如DPTR自增)在C代码中可能会引发问题,因为C编译器在生成汇编代码时也可能使用这些寄存器。

使用特权

评论回复
9
pmp| | 2024-7-10 03:08 | 只看该作者
调试混合语言程序可能比较复杂。确保你能够使用IDE的调试工具,如Keil uVision,来跟踪和分析C和汇编代码的执行情况。

使用特权

评论回复
10
robincotton| | 2024-7-10 06:09 | 只看该作者
汇编代码中的错误处理比较复杂,需要特别注意异常和错误的检测及处理机制。

使用特权

评论回复
11
wengh2016| | 2024-7-10 21:01 | 只看该作者
熟悉51单片机的寄存器和指令集是编写有效汇编代码的基础。理解哪些指令可以实现特定功能,以及如何正确使用寄存器,可以提高代码的执行效率。

使用特权

评论回复
12
bartonalfred| | 2024-7-11 00:06 | 只看该作者
8051单片机有多个特殊功能寄存器(SFR),用于控制和管理各种硬件资源(如定时器、计数器、中断等)。熟悉这些寄存器的功能和使用方法,能够帮助你更好地控制单片机的行为。

使用特权

评论回复
13
plsbackup| | 2024-7-12 10:48 | 只看该作者
理论知识的学习是必要的,但实践操作同样重要。通过实际项目练习,可以加深对单片机编程的理解,积累实践经验,提升解决问题的能力。

使用特权

评论回复
14
wwppd| | 2024-7-12 14:39 | 只看该作者
在编写代码时,要注意代码的可读性和可维护性。同时,要确保代码的稳定性和可靠性,避免因为编程错误导致系统崩溃。

使用特权

评论回复
15
zerorobert| | 2024-7-12 18:28 | 只看该作者
如何在C语言中声明汇编语言变量和如何在C代码中访问它们。通常,这需要使用特定的声明语句和宏定义。

使用特权

评论回复
16
janewood| | 2024-7-12 22:21 | 只看该作者
虽然C语言提供了高层次的编程抽象,但在某些情况下,你可能需要编写汇编代码来实现特定功能。熟悉8051汇编指令集,能够阅读和编写基本的汇编代码是非常有用的。

使用特权

评论回复
17
jonas222| | 2024-7-13 10:18 | 只看该作者
C语言和汇编语言如何在一个项目中混合使用。通常,C语言负责主要的程序逻辑,而汇编语言用于访问特殊的硬件资源或执行效率要求很高的任务。

使用特权

评论回复
18
alvpeg| | 2024-7-13 13:57 | 只看该作者
嵌入汇编代码可能会影响调试过程,因为不是所有的调试器都能很好地支持混合语言调试。确保选择的开发环境能够支持混合C和汇编语言的调试。

使用特权

评论回复
19
phoenixwhite| | 2024-7-13 17:34 | 只看该作者
在汇编指令中访问内存时,要注意内存地址的计算方式。51单片机的内存访问方式包括直接寻址、间接寻址、基址寻址等。确保在汇编指令中使用正确的寻址方式。

使用特权

评论回复
20
olivem55arlowe| | 2024-7-13 21:05 | 只看该作者
需要定义汇编语言的代码段和数据段,使用.asm标签来指定。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

1303

帖子

2

粉丝