用keil软体如何将汇编与C语言结合起来一起编写微控制器的程式

用keil软体如何将汇编与C语言结合起来一起编写微控制器的程式,第1张

用keil软体如何将汇编与C语言结合起来一起编写微控制器的程式

在混合程式设计中,最常用也是最实用的方法是在C语言中加入部分组合语言的程式码,分为两种方法。

方法1)在Keil C51的函式中直接插入汇编语句

方法2)按照Keil C51介面规则,编写汇编模组

方法1是利用编译控制命令#pragma a *** (用来标识所插入的汇编语句的起始位置) 和 #pragma enda *** (用来标识所插入的汇编语句的结束位置) ,这两条命令必须成对出现,并可以多次出现。在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? funame?Filename

资料段如:?DT? funame?Filename?BI? funame?Filename

标准段名字首列表

段字首 储存型别 含义

?PR? Program 程式储存区的程式码

?CO? code 程式储存区的常量

?BI? Bit 内部资料储存区的可位定址的位变数

?BA? Bdata 内部资料储存区的可位定址的位元组变数

?DT? Data 内部资料储存区的变数

?ID? Idata 内部资料储存区可间接定址的变数

?PD? Pdata 外部资料储存区的页变数

?XD? Xdata 外部资料储存区的变数

如何将微控制器的组合语言转成微控制器的c语言

只有自己重新编写

写stc微控制器的程式,用汇编语言用什么软体来程式设计呢

51微控制器系列一般都用KEIL程式设计 汇编 C语言都可以

在keil-c51中如何将汇编程式载入微控制器

我来回答,首先生成(.害克思)档案,然后各家微控制器载入方法都不一样,初学者以stc微控制器载入最简单,慢慢学,在以后就明白了为什么它载入简单,可买尽量支援微控制器型号多得烧写器,美名曰程式设计器,stc基本不用,为什么不用,可能是stc耍了个小聪明,在里面加了点小程式,就可以串列埠下载拉,制作stc下载线很简单,网上一搜就知道,经济紧张用stc,方便又快捷

如何用c语言编写微控制器程式。

使用微控制器专用的编译器,比如AVR微控制器要用ICC for AVR、AVR Studio 等。然后在选项中选择微控制器型号,比如ATmega16、ATmega128。最后要查询微控制器所对应的库,也就是标头档案。包含对应的标头档案,标头档案中有定义好的微控制器的变数名和函式,写程式要用到,比如引脚可能定义为PORTA,这些要记住,不可以写其他的变数名。具体写程式,和普通的C程式没有什么区别。

基本与普通C语言差不多,只不过微控制器标头档案肯定是与各自微控制器相关了,不是一般C所多用的STDIO.H,像51,一般是

#include<reg51.h>

51微控制器的程式设计软体(Keil)用汇编语言程式设计,如何将它汇入到isis 中?

你是想模拟吗????只要生成hex档案,在proteus拖入的晶片点右键选择edit(一般第二个选项) 然后将hex得路径汇入,就可以模拟。。。生成hex档案的方法是在keil选项卡中的output中设定,hexcreate打勾。。。。。

如何用keil软体编写微控制器程式

Keil系列教程:

:blog.csdn./column/details/13472.

使用汇编语言编写微控制器程式

^_^,这个可以用两个红外对管来实现,进去的时候1,2依次得到低电平,暂存器加1;有人出来的时候2,1依次得到低电平,暂存器减1

当暂存器等于0的时候,灯灭,不等于0的时候灯亮

^_^

程式很简单

就是怕学生会故意捣鬼,要是有一个人背著另一个走出去,灯就不会灭了

^_^

微控制器如何用C语言以及组合语言写滤波程式?

滤波,关键问题是演算法,有了演算法剩下的就是coding了

说白了,汇编与C,程式结构是一样的,也就是C一句话汇编要几句语句而已

模块内接口:

使用如下标志符:

#pragma

asm

汇编语句

#pragma

endasm

注意:如果在c51程序中使用了汇编语言,注意在Keil编译器中需要激活Properties中的

“Generate

Assembler

SRC

File”

和“Assembler

SRC

File

”两个选项

1、把"xx.c"加入工程中,右击"xx.c"选择“options

for

file"xx.c"

选择

“Generate

Assembler

SRC

File”和“Assemble

SRC

File”打上黑勾有效;

2、根据选择的编译模式,把相应的库文件象加"xx.c"一

样加入工程中并放在"xx.c"下面,如smail模式下选"keil\c51\lib\c51s.lib"

加入工程中,如果要进行浮点运算把"keil\c51\lib\c51fpl.lib"也加入工程中。

即:

Keil

安装目录下的

\C51\LIB\

目录的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

3、在"xx.c"头文件中加入优化:比如#pragma

OT(4,speed)

4、在"xx.c"中加入汇编代码

#pragma

ASM

Assembler

Code

Here

#pragma

ENDASM

5、编译生成xx.hex

例:

#include

void

delay(void)

{

#pragma

asm

MOV

R5,#5

DEL:

MOV

R6,#2

DEL1:

MOV

R7,#255

DJNZ

R7,$

DJNZ

R6,DEL1

DJNZ

R5,DEL

MOV

A,P1

CPL

A

MOV

P1,A

#pragma

endasm

}

void

delay1(unsigned

int

cnt)

{

while(cnt--)

}

void

main()

{

while(1)

{

delay1(1000)

P1=0x55

delay()

}

}

keil C 语言中嵌入汇编语言进行混合编程,方法如下:

1、在C 文件中要嵌入汇编代码片以如下方式加入汇编代码

#pragma ASM

Assembler Code Here

#pragma ENDASM

2、在Project 窗口中包含汇编代码的C 文件上右键,选择“Options for ...”

在d出的对话框中,点击右边的

“Generate Assembler SRC File”

和“Assemble SRC File”

使检查框由灰色变成黑色(有效)状态

3 、根据选择的编译模式, 把相应的库文件( 如Small 模式时, 是

Keil\C51\Lib\C51S.Lib)加入工程中, 该文件必须作为工程的最后文件,在默认

安装盘KEIL/C51/LIB/C51S.Lib

4、编译,即可生成目标代码

实例:

#include<reg52.h>

#define uchar unsigned char

sbit LED1=P1^0

//C 嵌入汇编例程

void delay_ms(void)

{

#pragma asm

MOV R0,#0FFH

MOV R1,#0FFH

D_LOOP1:

DJNZ R0,D_LOOP1

MOV R0,#0FFH

DJNZ R1,D_LOOP1

#pragma endasm

}

void main(void)

{

uchar i

P1 = 0xFF

while(1)

{

i++

delay_ms()

if(i>=7)

{

LED1 =~LED1

i=0

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11947127.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存