簡述C51的編譯模式
『壹』 在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編譯器能對C語言源程序進行高效率的編譯,生成高效簡潔的代碼,在絕大多數場合採用C語言編程即可完成預期的目的。但有時為了編程直觀或某些特殊地址的處理,還須採用一定的匯編語言編程。而在另一些場合,出於某種目的,匯編語言也可調用C語言。在這種混合編程中,關鍵是參數的傳遞和函數的返回值。它們必須有完整的約定,否則數據的交換就可能出錯,例 C語言程序與匯編語言程序的調用,其子程序如下:
PUBLIC AD ;入口地址
SEG_AD SEGMENT CODE;程序段
RSEG SEG_AD
USING 0
AD: MOV R6,#00
MOV R7,#00
SETB P1.1
ACALL DELAY
CLR P1.1
ACALL DELAY
MOV R0,#10
RR0: SETB P1.2
NOP
CLR P1.2
DJNZ R0,RR0
ACALL DELAY
MOV 30H,R6 ;A/D轉換的高
;兩位保存在R6中
ACALL CIR
MOV R6,30H
SETB P1.2
NOP
CLR P1.2
MOV 30H,R6
ACALL CIR
MOV R6,30H
MOV R0,#8 ;A/D轉換的低
;8位保存在R7中
RR2: SETB P1.2
NOP
CLR P1.2
MOV 30H,R7
ACALL CIR
MOV R7,30H
DJNZ R0,RR2
RET
CIR: CLR C
MOV C,P1.0
MOV A,30H
RLC A
MOV 30H,A
RET
END
在以上程序中,函數的返回值為一無符號整型數,根據調用規則,返回值的高位必須在R6中,低位在R7中,這樣才可保證數據的傳遞不出錯。另外,在調用過程中,必須注意寄存器的入棧。這樣在以後用到A/D轉換時,在C語言中調用匯編語言子程序AD()即可。
『叄』 c51提供哪3種編譯模式
case 1(0x87): case 2(0x47): case 3(0x27): case 4(0x17): 這樣編譯是沒有問題 但是燒到板子上以後程序是否能達到需要的結果就不是很