c51匯編語言聲明函數(shù) 匯編語言聲明變量

單片機C語言編程,要使用C語言自帶的庫函數(shù),使用哪個宏包含命令?

使用#include調(diào)用庫函數(shù)。

目前成都創(chuàng)新互聯(lián)已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計、三水網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

C51語言的編譯器中包含有豐富的庫函數(shù),使用庫函數(shù)可以大大簡化用戶程序設(shè)計的工作量,提高編程效率。每個庫函數(shù)都在相應(yīng)的頭文件中給出了函數(shù)原型聲明,在使用時,必須在源程序的開始處使用預(yù)處理命令#include將有關(guān)的頭文件包含進(jìn)來。

C51庫函數(shù)中類型的選擇考慮到了8051單片機的結(jié)構(gòu)特性,用戶在自己的應(yīng)用程序中應(yīng)盡可能地使用最小的數(shù)據(jù)類型,以最大限度地發(fā)揮8051單片機的性能,同時可減少應(yīng)用程序的代碼長度。

單片機c語言編程是基于C語言的單片機編程。單片機的C語言采用C51編譯器(簡稱C51)。由C51產(chǎn)生的目標(biāo)代碼短,運行速度高,存儲空間小,符合C語言的ANSI標(biāo)準(zhǔn),生成的代碼遵循Intel目標(biāo)文件格式,而且可與A51匯編語言PL/M51語言目標(biāo)代碼混合使用。51單片機支持三種高級語言,即PL/M,C和BASIC。C語言是一種通用的程序設(shè)計語言,其代碼率高,數(shù)據(jù)類型及運算符豐富,并具有良好的程序結(jié)構(gòu),適用于各種應(yīng)用的程序設(shè)計,是使用較廣的單片機編程語言。

51單片機的編程問題?

1:C51編譯器如何區(qū)分位地址和字節(jié)地址

是靠預(yù)定義實現(xiàn)的,比如:sfr P0 = 0x80; sbit P0_0 = 0x80;前者聲明了P0端口地址位于0x80,后者說明了P0端口的bit0,即P0.0位于位地址空間0x80處。這2個0x80具有完全不同的含義,靠關(guān)鍵字sfr和sbit來區(qū)別。這樣當(dāng)程序被編譯時,編譯器會依此編譯成相應(yīng)的匯編語言。例如:

C51語句: P0 = 1;

P0聲明為sfr,因此編譯成:mov 80h,01h,將把0x01數(shù)據(jù)送入0x80單元,由于0x80單元物理上對應(yīng)P0端口,因此,P0.0腳將輸出高電平(其實是呈現(xiàn)高阻態(tài),P0口獨有的),其他.1-.7腳輸出低電平。

C51語句: P0_0 = 1;

P0_0聲明為sbit,因此編譯成:setb 80h,這將把位地址空間的0x80地址的bit的值置1。這個位正是P0口的bit0,執(zhí)行后,P0.0將輸出高阻態(tài)。而P0.1-.7不會變化。

2:C51為什么要嵌套匯編

51單片機一個顯著優(yōu)點就是指令執(zhí)行時間固定,因此可以適應(yīng)時序要求嚴(yán)格的場合。例如符合ISO7816協(xié)議的cpu卡的讀寫,對時序要求比較嚴(yán)格。其實就是用io腳做出來的同步半雙工串口。支持cpu卡的程序一般比較龐大,需要用c51來組織,但是由于c編譯的不確定性,必須把底層程序封裝成匯編語言模塊嵌入到工程中。這就帶來幾個問題:如何聲明函數(shù)、參數(shù)如何傳遞等。限于篇幅,不能說得很細(xì)。下面舉例:

匯編程序單獨保存一個文件,加入到工程中,函數(shù)如下:

_proc_a:

mov a, r7

inc a

mov r7, a

ret

用c語言在.h文件中聲明: extern unsigned char proc_a(unsigned char val);

調(diào)用時形如: retvalue = proc_a(0x11);

說明:

a:匯編程序如果帶參數(shù),則需要在匯編程序前多加一個下劃線。而聲明它的地方不用加(偉福編譯器這么要求的)。

b:函數(shù)的形參中第一參數(shù)用R7傳遞,函數(shù)返回值用R7返回,這是C51的通用規(guī)范。其他參數(shù)都有相應(yīng)規(guī)定。函數(shù)可以返回一個位,用psw的c位返回。c:上面的語句,執(zhí)行順序是把0x11給R7,然后跳轉(zhuǎn)子程序,子程序?qū)⑺?后送回。

d:函數(shù)跳轉(zhuǎn)到匯編程序時,本區(qū)的R0-R7,A,B,PSW,DPTR等寄存器可以供子程序使用,不必考慮調(diào)用后是否要恢復(fù)這些常規(guī)資源。上例中,A的值被函數(shù)使用了,編程者不必恢復(fù)調(diào)用前的值。

怎樣在單片機C代碼中加入?yún)R編延時子程序?

(1)、C51語言中調(diào)用匯編語言程序;

C51語言調(diào)用匯編語言程序要注意以下幾點:

1:在文件欄選中File Group和C51程序原文件,在配置文件選項中激活“產(chǎn)生匯編(SRC)文件,“編譯(SRC)文件”和“創(chuàng)建工程(目標(biāo))時包含”三個選項。

2:根據(jù)選擇的編譯模式,把相應(yīng)的庫文件(如SMALL模式,庫文件為KEIL\C51\LIB\C51S.LIB)加入工程中。

3:在C51語言中必須聲明需要調(diào)用的函數(shù)為外部函數(shù)。extern void DELAY(void);

4:在匯編語言程序中必須聲明被調(diào)用子程序為公共子程序,在被調(diào)用的文件中還需要聲明此文件是可從新定位的。

PUBLIC DELAY,DEL

DELAYY SEGMENT CODE

RSEG DELAYY

實例如下:

C51語言文件:

#include "reg51.h"

extern void DELAY(void);

extern void DEL(void);

void main(void)

{

P1=0x00;

DELAY();

DEL();

P1=0xff;

}

匯編語言文件:

PUBLIC DELAY,DEL

DELAYY SEGMENT CODE

RSEG DELAYY

DELAY: MOV R2,#3H

DJNZ R2,$

RET

DEL: MOV R3,#03H

DJNZ R3,$

RET

END

(2)、C51語言中嵌入?yún)R編程序;

在C51語言中嵌套使用匯編語言編寫程序要注意以下的幾個問題:

1:在文件欄選中File Group和C51程序原文件,在配置文件選項中激活“產(chǎn)生匯編(SRC)文件,“編譯(SRC)文件”和“創(chuàng)建工程(目標(biāo))時包含”三個選項。

2:根據(jù)選擇的編譯模式,把相應(yīng)的庫文件(如SMALL模式,庫文件為KEIL\C51\LIB\C51S.LIB)加入工程中。

3:用#pragma asm,和#pragma endasm語句包含嵌入的匯編語言程序。

實例如下:

#include "reg51.h"

void delay(void);

void main(void)

{

void delay(void);

P1=0x00;

#pragma asm

MOV R3,#08H

DJNZ R3,$

#pragma endasm

P1=0xff;

}

void delay(void)

{

#pragma asm

MOV R4,#08H

DJNZ R4,$

#pragma endasm

}

當(dāng)前標(biāo)題:c51匯編語言聲明函數(shù) 匯編語言聲明變量
鏈接URL:http://muchs.cn/article16/doedddg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT網(wǎng)站制作、網(wǎng)頁設(shè)計公司、App開發(fā)、移動網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管