用keil软件如何将汇编与C语言结合起来一起编写单片机的程序

2024-12-03 21:36:44
推荐回答(2个)
回答(1):

在混合编程中,最常用也是最实用的方法是在C语言中加入部分汇编语言的代码,分为两种方法。
方法1)在Keil C51的函数中直接插入汇编语句
方法2)按照Keil C51接口规则,编写汇编模块
方法1是利用编译控制命令#pragma asm(用来标识所插入的汇编语句的起始位置) 和 #pragma endasm (用来标识所插入的汇编语句的结束位置) ,这两条命令必须成对出现,并可以多次出现。在Keil C51中不对插入的汇编代码做任何的处理。
方法2编写汇编模块,需对KEIL编译器的编译过程做些了解。Keil编译器的编译过程是首先将项目中的一个个源文件编译为目标代码(obj文件),然在再通过连接器产生为最终可执行的hex文件。
目标代码将其中的代码、数据、常量放在不同的“段”中,保存程序的段称为“代码段”,保存数据的段称为“数据段”,最终目标代码经过Keil的连接器按照“段”的要求转换为程序和数据地址固定的可执行文件。
在Keil软件中,“段”按定位属性分为:“可重定位段”和“绝对段”。
“可重定位段”:程序和数据在其分别所对应的存储单元(FLASH和RAM)中的存储地址是浮动的、可重定义的、相对可变的。
“绝对段”:其地址在连接前就已确定不变,连接器据此为它分配地址。
经Keil编译器生成的“段”具有如下属性:
1)段的存储属性(program code data pdata xdata bdata bit等);
2)段的起始地址;3)段的长度;
4)段的定位要求:绝对段地址固定,可重定位段定位的要求如要求代码段在2K范围内,数据段定位在可位寻址区等;
5)段名:包括程序和数据(变量和常量)的段的存储属性及段所属的程序模块(文件)。代码段: ?PR? funcname?Filename
数据段如:?DT? funcname?Filename; ?BI? funcname?Filename
标准段名前缀列表
段前缀 存储类型 含义
?PR? Program 程序存储区的代码
?CO? code 程序存储区的常量
?BI? Bit 内部数据存储区的可位寻址的位变量
?BA? Bdata 内部数据存储区的可位寻址的字节变量
?DT? Data 内部数据存储区的变量
?ID? Idata 内部数据存储区可间接寻址的变量
?PD? Pdata 外部数据存储区的页变量
?XD? Xdata 外部数据存储区的变量

回答(2):

你是用的USB编程,还是RS232啊,确定驱动程序安装了吗?驱动安成功后,电脑,设备管理器中能看到串口号!你发的那个提示框,我看不到,也不清楚你说的!有什么问题可以问我! 哦,如果是那样的话,也算是正常情况,一般拔下连接线在重新链接可以了,这种问题当你烧写次数多了的时候,有时候端口会显示被占用,要求重新链接,或者有时候你不小心碰了下数据线也会出现那种情况!
另外,虚机团上产品团购,超级便宜