㈠ KEIL C51程序中如何嵌入汇编
模块内接口:
使用如下标志符:
#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();
}
}
㈡ C51是否可以运行汇编程序
一、单片机只支持机器码,不管是C51还是汇编,到了单片机里全变成0和1了。
二、只要你的烧写程序可以把HEX文件写入单片机,就可以写入汇编程序并运行。
三、C51里可以嵌入汇编代码:
//......
//C51代码
//......
#pragma asm
//汇编代码
//......
#pragma ENDASM
//......
//C51代码
//......
谢谢玉砚帮忙。
㈢ 求C51汇编程序 让有源蜂鸣器以不同频率响
有源蜂鸣器都是长鸣固定频率的,只要加5Ⅴ电压就响。要按不同频率发声,应该用无源蜂鸣器,或小功率的扬声器,即小喇叭。利用定时器定时,输出一定频率的方波信号即可。如1KHz方波,信号周期为1ms,定时0.5ms=500us,假设单片机晶振频率是12M,机器周期是1us,用定时器T0,定时的初始值,X=65536-500=65036=FE0CH,TH0=FEH,TL0=0CH。
汇编程序:
START:MOV TMOD , #01H
SETB TR0
LOOP:MOV TH0 , #0FEH
MOV TL0 , #0CH
JNB TF0 , $
CLR TF0
CPL P1.7 ; P1.7输出方波信号
SJMP LOOP
你想要其他频率的信号,可参照上面的计算过程和程序,自己修改一下就成了。
㈣ 单片机,c51汇编语言编写程序
SUBDATA:
CLRC
MOVA,41H
SUBBA,43H
MOVA,40H
SUBBA,42H
JCSUBD1
MOV44H,40H
MOV45H,41H
MOV46H,42H
MOV47H,43H
RET
SUBD1:
MOV44H,42H
MOV45H,43H
MOV46H,40H
MOV47H,41H
RET
㈤ 在C51单片机中如何在C语言中加入汇编程序
在
C
文件中要嵌入汇编代码片以如下方式加入汇编代码:
#pragma
ASM
;
Assembler
Code
Here
#pragma
ENDASM
其他参考
http://hi..com/layueyi/blog/item/e2cadaca1591e944f21fe7f3.html
㈥ c51与汇编语言的特点各有哪些怎样实现两者的优势互补
这里不能长篇大论,简单说下。
汇编语言拥有面向机器的低级语言独特的特点,生成的机器代码简洁、占ROM空间少、执行效率高,适用于一些对时序要求特别精确的场合,如遥控解码、步进电机的控制等等。但汇编语言程序不直观、结构性差、不便于维护和移植,编程效率低。
C51属于间接面向机器的中级语言,同样具有独特的特点,生成的机器代码相对简洁、占ROM空间稍大、执行效率可以接受,适用于一些对时序要求不是特别精确的场合,如各种控制程序、显示程序、通信程序、测量程序等等。C51语言程序直观、结构性好、很容易维护和移植,编程效率非常高。
怎样实现两者的优势互补呢?
其实C51语言设计者已经注意到了上述差别,可以再C51源程序中嵌入汇编代码,达成优势互补,俗称混合编程。这属于编程技巧范畴,不多讨论。
㈦ c51单片机中如何用汇编语言编写流水灯
51单片机用汇编语言编写流水灯程序,就是控制多个LED
,使其在特定时间间隔内,只有一个LED
发光,其他熄灭,用这种方式顺序移动点亮LED的位置,就形成了流水灯的效果。以下是程序:
;假设晶振12MHZ,P1控制8个LED低电平亮
;启动入口========================
ORG
0000H
;复位启动
AJMP
START
;
ORG
001BH
;T1中断
AJMP
T1INT
;
;定义变量========================
YSJS
EQU
30H;延时计数器
LED
EQU
31H;LED控制缓冲器
;主程序==========================
START:
MOV
LED,#0FEH
;初始化数据
MOV
YSJS,#0
;
;
MOV
TMOD,#10H
;定时器1工作于方式1,16位定时器
MOV
TL1,#0B0H
;设置定时初值
MOV
TH1,#3CH
;定时时间=50mS
SETB
ET1
;使能定时器1中断
SETB
TR1
;启动定时器1
SETB
EA
;开总中断
MOV
P1,LED
;初始化流水灯
;
LOOP:
JMP
LOOP
;循环等待中断
;
;
T1INT:
PUSH
PSW
;定时器1中断程序
PUSH
ACC
;保护现场
;
MOV
TH1,#3CH
;定时时间=50mS
MOV
TL1,#0B0H
;
INC
YSJS
;
PUSH
ACC
;保护ACC
MOV
A,YSJI
;
CJNE
A,#2,QT1
;50mS*2=100mS
MOV
P1,LED
;
MOV
A,LED
;
RL
A
;累加器A的值循环左移1位
MOV
LED,A
;
MOV
YSJS,#0
;
;
QT1:
POP
ACC
;恢复现场
POP
PSW
;
RETI
;返回主程序
END
;汇编程序结束
㈧ 在C51语言中如何嵌入汇编语言
keil C 语言中嵌入汇编语言进行混合编程,方法如下:
1、在C 文件中要嵌入汇编代码片以如下方式加入汇编代码
#pragma ASM
; Assembler Code Here
#pragma ENDASM
2、在Project 窗口中包含汇编代码的C 文件上右键,选择“Options for ...”
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;
}
}
}
㈨ c51的汇编程序书写格式
一行只能写一条指令,如果能通过编译就说明你的语法是没问题,功能不能实现的话你就要回头再慢慢看每一条程序了,看什么地方与要实现的效果不对应
㈩ C51写单片机程序如何插入汇编指令.
C51些单片机程序插入汇编指令的方法如下:
1、以#pragma asm开始,以#pragma endasm结束,
用pragma asm和#pragma endasm这两个伪指令将汇编代码包起来。
比如:
3、如果勾选椭圆圈中的两项,这样就可以了。