㈠ 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、如果勾選橢圓圈中的兩項,這樣就可以了。