c51語言自定義函數(shù),c51語言有幾種基本語句

如何改變編譯器Keil的程序入口函數(shù)main(),用其他自定義函數(shù)代替?

目前找不到C51(我用的是STC8051)的程序入口函數(shù)編輯方法。

創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司是一家服務(wù)多年做網(wǎng)站建設(shè)策劃設(shè)計(jì)制作的公司,為廣大用戶提供了成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,成都網(wǎng)站設(shè)計(jì),1元廣告,成都做網(wǎng)站選創(chuàng)新互聯(lián),貼合企業(yè)需求,高性價(jià)比,滿足客戶不同層次的需求一站式服務(wù)歡迎致電。

STM32的程序入口函數(shù)編輯方法

STM32的編輯方法就比較簡單,首先新建一個(gè)工程,不導(dǎo)入任何運(yùn)行時(shí)環(huán)境(Run-time Environment),然后導(dǎo)入Startup_stm32xxxx_xx.s(ASM起動(dòng)文件),調(diào)試工程選項(xiàng)中C/C++選項(xiàng)卡里包含需要導(dǎo)入的庫文件。

隨后找到151行 IMPORT? __main

把main改為自己想要設(shè)置的入口函數(shù)就行了。

其實(shí)很多人就由于自己不會(huì)自定義C語言工程的問題,而又想先自己動(dòng)手寫代碼實(shí)現(xiàn)“到手即用”,所以簡單聽老師對(duì)于程序的針對(duì)性講解,默認(rèn)按照main寫入口函數(shù),其實(shí)main這個(gè)名字就是商業(yè)化的結(jié)果,一些知名廠商是給你留下一個(gè)編輯空間改入口函數(shù)的,可惜大家都不知道,而且Keil5出了那么多年都不搞官方漢化,唉,虧死了很多英語詞匯不足的業(yè)余程序愛好者。

然后很多人第一印象以為譚浩強(qiáng)是C語言之父,草,不就是早期寫《C程序設(shè)計(jì)》然后被各個(gè)大學(xué)紛紛膜拜然后按圖索驥的作者嘛,最忌諱應(yīng)試教育搞出了填鴨式教育法讓大家失去自主探索的機(jī)會(huì)。

單片機(jī) C語言,如何調(diào)用外部自定義函數(shù)。

函數(shù)定義好以后,要被其它函數(shù)調(diào)用了才能被執(zhí)行。C

語言的函數(shù)是能相互調(diào)用的,

但在調(diào)用函數(shù)前,必須對(duì)函數(shù)的類型進(jìn)行說明,就算是標(biāo)準(zhǔn)庫函數(shù)也不例外。標(biāo)準(zhǔn)庫函數(shù)的

說明會(huì)被按功能分別寫在不一樣的頭文件中,使用時(shí)只要在文件最前面用#include

預(yù)處理語

句引入相應(yīng)的頭文件。如前面一直有使用的

printf

函數(shù)說明就是放在文件名為

stdio.h

頭文件中。調(diào)用就是指一個(gè)函數(shù)體中引用另一個(gè)已定義的函數(shù)來實(shí)現(xiàn)所需要的功能,這個(gè)時(shí)候函

數(shù)體稱為主調(diào)用函數(shù),函數(shù)體中所引用的函數(shù)稱為被調(diào)用函數(shù)。一個(gè)函數(shù)體中能調(diào)用數(shù)個(gè)

其它的函數(shù),這些被調(diào)用的函數(shù)同樣也能調(diào)用其它函數(shù),也能嵌套調(diào)用。筆者本人認(rèn)為

主函數(shù)只是相對(duì)于被調(diào)用函數(shù)而言。在

c51

語言中有一個(gè)函數(shù)是不能被其它函數(shù)所調(diào)用的,

它就是

main

主函數(shù)。調(diào)用函數(shù)的一般形式如下:

函數(shù)名

(實(shí)際參數(shù)表)

“函數(shù)名”就是指被調(diào)用的函數(shù)。實(shí)際參數(shù)表能為零或多個(gè)參數(shù),多個(gè)參數(shù)時(shí)要用逗

號(hào)隔開,每個(gè)參數(shù)的類型、位置應(yīng)與函數(shù)定義時(shí)所的形式參數(shù)一一對(duì)應(yīng),它的作用就是把參

數(shù)傳到被調(diào)用函數(shù)中的形式參數(shù),如果類型不對(duì)應(yīng)就會(huì)產(chǎn)生一些錯(cuò)誤。調(diào)用的函數(shù)是無參函

數(shù)時(shí)不寫參數(shù),但不能省后面的括號(hào)。

在以前的一些例子我們也能看不一樣的調(diào)用方式:

1.函數(shù)語句

printf

("Hello

World!n");

這是在

我們的第一個(gè)程序中出現(xiàn)的,它以

"Hello

World!n"為參數(shù)調(diào)用

printf

這個(gè)庫函數(shù)。在這里函數(shù)調(diào)用被看作了一條語句。

2.函數(shù)參數(shù)

“函數(shù)參數(shù)”這種方式是指被調(diào)用函數(shù)的返回值當(dāng)作另一個(gè)被調(diào)用函數(shù)的實(shí)際參

數(shù),如

temp=StrToInt(CharB(16));CharB

的返回值作為

StrToInt

函數(shù)的實(shí)際參數(shù)傳遞。

3.函數(shù)表達(dá)式

而在上一篇的例子中有

temp

=

Count();這樣一句,這個(gè)時(shí)候函數(shù)的調(diào)用作為一個(gè)運(yùn)算

對(duì)象出現(xiàn)在表達(dá)式中,能稱為函數(shù)表達(dá)式。例子中

Count()返回一個(gè)

int

類型的返回

值直接賦值給

temp。注意的是這種調(diào)用方式要求被調(diào)用的函數(shù)能返回一個(gè)同類型的值,

不然會(huì)出現(xiàn)不可預(yù)料的錯(cuò)誤。

前面說到調(diào)用函數(shù)前要對(duì)被調(diào)用的函數(shù)進(jìn)行說明。標(biāo)準(zhǔn)庫函數(shù)只要用#include

引入已

寫好說明的頭文件,在程序就能直接調(diào)用函數(shù)了。如調(diào)用的是自定義的函數(shù)則要用如下形

式編寫函數(shù)類型說明

類型標(biāo)識(shí)符

函數(shù)的名稱(形式參數(shù)表);

這樣的說明方式是用在被調(diào)函數(shù)定義和主調(diào)函數(shù)是在同一文件中。你也能把這些寫到

文件名.h

的文件中用#include

"文件名.h"引入。如果被調(diào)函數(shù)的定義和主調(diào)函數(shù)不是在同

一文件中的,則要用如下的方式進(jìn)行說明,說明被調(diào)函數(shù)的定義在同一項(xiàng)目的不一樣文件之上,

其實(shí)庫函數(shù)的頭文件也是如此說明庫函數(shù)的,如果說明的函數(shù)也能稱為外部函數(shù)。

extern

類型標(biāo)識(shí)符

函數(shù)的名稱(形式參數(shù)表);

函數(shù)的定義和說明是完全不一樣的,在編譯的角度上看函數(shù)的定義是把函數(shù)編譯存放在

ROM

的某一段地址上,而函數(shù)說明是告訴編譯器要在程序中使用那些函數(shù)并確定函數(shù)的地

址。如果在同一文件中被調(diào)函數(shù)的定義在主調(diào)函數(shù)之前,這個(gè)時(shí)候能不用說明函數(shù)類型。也就

是說在

main

函數(shù)之前定義的函數(shù),在程序中就能不用寫函數(shù)類型說明了。能在一個(gè)函

數(shù)體調(diào)用另一個(gè)函數(shù)(嵌套調(diào)用),但不允許在一個(gè)函數(shù)定義中定義另一個(gè)函數(shù)。還要注意

的是函數(shù)定義和說明中的“類型、形參表、名稱”等都要相一致。

關(guān)于C語言自定義帶函數(shù)指針類型參數(shù)的函數(shù)指針數(shù)據(jù)類型問題,詳情請(qǐng)看源代碼。捉急啊!

有bit這個(gè)類型嗎?

typedef?int?BOOL;

typedef?unsigned?int???type_s;

typedef?void(*funty)();?

typedef?type_s?*type_s_point;

typedef?BOOL(*bit_fun)(funty,type_s_point,type_s);

funty?a;

type_s_point?b;

bit_fun?t_t;

BOOL?pp(funty?e,type_s_point?f,type_s?g)

{

e=0;

f=0;

g=0;?

return?0;

}

void?main()

{

t_t=pp;

(*t_t)(a,b,10);

}

C51中自定義函數(shù)默認(rèn)存儲(chǔ)在哪個(gè)寄存器?還是存儲(chǔ)在堆棧區(qū)?謝謝各位大佬解答

delay函數(shù)是帶參數(shù)的,編譯時(shí)是利用寄存器傳遞參數(shù)的,中斷程序中調(diào)用delay函數(shù)時(shí),不定義寄存器區(qū)時(shí),系統(tǒng)就會(huì)用同一個(gè)區(qū)的寄存器傳遞參數(shù),所以不會(huì)錯(cuò)。而你人為定義了寄存器區(qū),使得中斷程序和delay使用了兩個(gè)寄存器區(qū),那就出錯(cuò)了。如果delay函數(shù)不帶參數(shù)就不會(huì)出錯(cuò)了,所以,子函數(shù)還是不要改變寄存器區(qū),由系統(tǒng)自動(dòng)分配就好了。

KEIL C51 提示錯(cuò)誤unresolved external symbol

先將TFT.c刈除,然后在添加進(jìn)項(xiàng)目.

需要看TFT.c中的寫法,如果沒有實(shí)體就會(huì)link不到.

江湖告急:請(qǐng)問如何用C51編寫定時(shí)兩分鐘的程序,急用!謝謝

用定時(shí)器功能,設(shè)置定時(shí)器0的工作方式為方式1,然后定時(shí)50ms,再設(shè)置控制變量,設(shè)置變量要為整型,定時(shí)器初值設(shè)為TH0(65536-50000)/256、TL0=(65536-50000)%256,這種賦初值的晶振要求為12MHz,每次定時(shí)器溢出時(shí)控制變量加一,當(dāng)控制變量加到2400時(shí),定時(shí)已經(jīng)達(dá)到兩分鐘這時(shí)你需要將控制變量清零然后運(yùn)行你需要運(yùn)行的代碼即可,我有時(shí)間會(huì)給你上代碼的

代碼如下:

#include reg52.h

unsigned count;

void init();

void program();

void main()

{

init();

while(1)

{

if (count==2400)

{

count=0;

program();

}

}

}

//初始化函數(shù)設(shè)置定時(shí)器0的工作方式

void init()

{

TMOD=0x01; //設(shè)置定時(shí)器工作在方式0

TH0=(65536-50000)/256; //設(shè)置初值使其50ms產(chǎn)生一次中斷

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

void program()

{

//自定義函數(shù)

}

void timer0() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256; //產(chǎn)生一次中斷重新賦一次初值

count++; //記錄中斷的次數(shù),每2400次中斷為2分鐘

}

名稱欄目:c51語言自定義函數(shù),c51語言有幾種基本語句
鏈接分享:http://muchs.cn/article14/phiode.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、企業(yè)網(wǎng)站制作、網(wǎng)站設(shè)計(jì)公司、品牌網(wǎng)站制作網(wǎng)站內(nèi)鏈、品牌網(wǎng)站建設(shè)

廣告

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

成都網(wǎng)頁設(shè)計(jì)公司