卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

單片機(jī)為什么要用c語言 單片機(jī)C語言的優(yōu)點(diǎn)有哪些?

單片機(jī)編程是用C語言開發(fā)的,因?yàn)閱纹瑱C(jī)需要非常底層的開發(fā)語言,效率非常高,而C語言可以非常靈活,非常適合控制硬件。C語言最大的優(yōu)點(diǎn)就是可以通過指針控制內(nèi)存中的各種變量,所以非常適合單片機(jī)的開發(fā)。當(dāng)然,

單片機(jī)為什么要用c語言 單片機(jī)C語言的優(yōu)點(diǎn)有哪些?

單片機(jī)編程是用C語言開發(fā)的,因?yàn)閱纹瑱C(jī)需要非常底層的開發(fā)語言,效率非常高,而C語言可以非常靈活,非常適合控制硬件。

C語言最大的優(yōu)點(diǎn)就是可以通過指針控制內(nèi)存中的各種變量,所以非常適合單片機(jī)的開發(fā)。

當(dāng)然,如果是帶操作系統(tǒng)的硬件,也可以用cpp開發(fā)。

常用的有匯編-。asmc語言。c編譯-。十六進(jìn)制(十六進(jìn)制)。Bin(二進(jìn)制)也要看你用的是什么單片機(jī),比如51,avr,430,pic,ARM等。

單片機(jī)C語言的優(yōu)點(diǎn)有哪些?

C語言是單片機(jī)開發(fā)中常用的語言,其優(yōu)點(diǎn)如下:

1)豐富的運(yùn)營商;

2)豐富的數(shù)據(jù)結(jié)構(gòu);

3)簡潔、緊湊、靈活、方便;

4)C是結(jié)構(gòu)化語言;

5)C語言應(yīng)用范圍廣,移植性好;

6)C語言語法限制少,編程自由度高;

7)允許直接訪問物理地址,可以直接在硬件上操作;

8)C語言程序生成高質(zhì)量代碼,程序執(zhí)行效率高。

逐漸將高級(jí)語言引入單片機(jī)的開發(fā)和應(yīng)用。

c語言就是其中之一。對(duì)于習(xí)慣于組裝的人來說,他們總是覺得 可控性 高級(jí)語言的不好,所以不如匯編自由。

但是,只要我們有一定的C語言知識(shí),有些東西還是很容易做出來的。以下是筆者在實(shí)際工作中遇到的一些問題,希望對(duì)C51初學(xué)者有所幫助。

一、C51熱啟動(dòng)代碼的編譯

對(duì)于工業(yè)控制計(jì)算機(jī),通常有一個(gè)看門狗電路。當(dāng)看門狗動(dòng)作時(shí),計(jì)算機(jī)復(fù)位,這是熱啟動(dòng)。

一般情況下,熱態(tài)啟動(dòng)時(shí)不允許從零開始,這會(huì)導(dǎo)致現(xiàn)有的測(cè)量值或計(jì)算值被重置,從而導(dǎo)致系統(tǒng)運(yùn)行異常。

所以當(dāng)一個(gè)程序必須判斷是熱啟動(dòng)還是冷啟動(dòng)時(shí),常見的方法有:確定某個(gè)內(nèi)存單元為標(biāo)志位(如0x7f位和0x7e位),

啟動(dòng)時(shí),首先讀取存儲(chǔ)單元的內(nèi)容,如果它等于特定值(例如,兩個(gè)存儲(chǔ)單元都是0xaa),則認(rèn)為是熱啟動(dòng)。

否則就是冷啟動(dòng),程序執(zhí)行初始化部分,給這兩個(gè)存儲(chǔ)單元賦值0xaa。

按照上面的設(shè)計(jì)思路,在編程的時(shí)候,設(shè)置一個(gè)指針指向某個(gè)特定的存儲(chǔ)單元,比如0x7f,然后在程序中進(jìn)行判斷。該計(jì)劃如下:

void main()

{ char data *HotPoint=(char *)0x7f

if((*熱點(diǎn)==0xaa)ampamp(*( -熱點(diǎn))==0xaa))

{/*熱啟動(dòng)的處理*/

}

其他

{HotPoint=0x7e /*冷啟動(dòng)位置進(jìn)入

*熱點(diǎn)=0xaa

*(熱點(diǎn))=0xaa

}

/*正常工作代碼*/

}

但在實(shí)際調(diào)試中發(fā)現(xiàn),無論是熱啟動(dòng)還是冷啟動(dòng),啟動(dòng)后所有存儲(chǔ)單元的值都被重置為0,當(dāng)然也無法實(shí)現(xiàn)熱啟動(dòng)的要求。這是為什么呢?原來用C語言編程時(shí),啟動(dòng)時(shí)執(zhí)行的代碼并不是從main()函數(shù)的第一句開始,而a 開始代碼 應(yīng)該在main()函數(shù)的第一句執(zhí)行之前執(zhí)行。正是這個(gè)代碼執(zhí)行清除工作。c編譯器提供了這個(gè)初始代碼的源程序,命名為CSTARTUP。A51打開這個(gè)文件,可以看到下面的代碼:

。

IDATA

如果IDATALEN ltgt 0

MOV R0,#伊達(dá)倫- 1

CLR A

·MOV

DJNZ R0,IDATALOOP

ENDIF

。

可以看出,初始代碼在執(zhí)行代碼判斷是否熱啟動(dòng)之前,已經(jīng)清空了所有的存儲(chǔ)單元。如何解決這個(gè)問題?幸運(yùn)的是,可以通過修改startup.a51的源文件,然后用編譯器附帶的a51.exe程序編譯startup.a51得到startup.obj文件,再用這段代碼替換原來的啟動(dòng)代碼,來改變啟動(dòng)代碼。具體步驟是(設(shè)C源程序命名為HOTSTART。c):

修改startup.a51源文件(該文件位于C51LIB目錄中)。

執(zhí)行以下命令:

A51 startup.a51獲取startup.obj文件。將該文件復(fù)制到HOTSTART的目錄中。C

用C51.EXE編譯編譯好的C源程序,得到目標(biāo)文件HOTS。

酸酸的。OBJ .

使用命令L51 HOTSTART,STARTUP進(jìn)行連接。OBJ獲得絕對(duì)目標(biāo)文件熱啟動(dòng)。

獲得快速啟動(dòng)。帶OHS51熱啟動(dòng)的十六進(jìn)制文件。

startup.a51的修改要根據(jù)自己的需求進(jìn)行。例如,如果。

LCALL 0DEOOH

用C語言編程如何實(shí)現(xiàn)這個(gè)功能?C語言中有一個(gè)函數(shù)指針的概念,可以用函數(shù)指針來調(diào)用函數(shù)。函數(shù)指針變量的定義格式為:

類型標(biāo)識(shí)符(*指針變量名) ()

定義指針后,可以給指針變量賦值以指向函數(shù)的起始地址,然后使用

(*指針變量名) ()可以調(diào)用這個(gè)函數(shù)。例如:

無效總管(無效)

{

Void (*DispBuffer)() /*定義指向函數(shù)的指針*/

DispBuffer=0xde00 /*賦值*/

用于()

{密鑰()

調(diào)度緩沖區(qū)()

}

}

3、將浮點(diǎn)數(shù)轉(zhuǎn)換成字符數(shù)組

作者在編寫應(yīng)用程序時(shí)有這樣一個(gè)要求:運(yùn)算結(jié)果(浮點(diǎn)數(shù))存儲(chǔ)在EEPROM中。我們知道,浮點(diǎn)數(shù)在C語言中是以IEEE格式存儲(chǔ)的,一個(gè)浮點(diǎn)數(shù)占用四個(gè)字節(jié)。例如,浮點(diǎn)數(shù)34.526存儲(chǔ)為四個(gè)數(shù)字(160,26,10,66)。在EEPROM中存儲(chǔ)一個(gè)浮點(diǎn)數(shù),實(shí)際上就是存儲(chǔ)這四個(gè)數(shù)。那么如何在程序中得到一個(gè)浮點(diǎn)數(shù)的組成呢?

存儲(chǔ)浮點(diǎn)數(shù)時(shí),它們存儲(chǔ)在連續(xù)的字節(jié)中。只要你試著找到存放地點(diǎn),就能得到這些數(shù)字。可以定義一個(gè)void的指針,將指針指向要存儲(chǔ)的浮點(diǎn)數(shù),然后將指針強(qiáng)制轉(zhuǎn)換為char類型,這樣就可以使用指針獲得構(gòu)成浮點(diǎn)數(shù)的每個(gè)字節(jié)的值。具體程序如下:

# define uchar unsigned char # define uint unsigned int void FtoC(void)

浮動(dòng)a

uchar i,*px

Uchar x[4] /*定義了一個(gè)字符數(shù)組,準(zhǔn)備存儲(chǔ)4個(gè)字節(jié)的浮點(diǎn)數(shù)*,

void *pf

px = x/* px指針指向數(shù)組x*/

Pf=ampa /*void指針指向浮點(diǎn)數(shù)的第一個(gè)地址*/

a=34.526

for(i=0ilt4i)

{ *(PXI)= *(char *)pf I)/*強(qiáng)制將void指針改為char,因?yàn)?/

} /*void指針不能操作*/

}

如果號(hào)碼已經(jīng)存在EEPROM中,就要取出來合并,方法相同。請(qǐng)參考以下程序。

#define uchar無符號(hào)char#define uint無符號(hào)int

void CtoF(無效)

浮動(dòng)a

uchar i,*px

uchar x[4]={56,180,150,73}

void *pf

px=x

pf=ampa

for(i=0ilt4i)

{ *((char *)pf i)=*(px i)

}

}

上面使用的C語言是富蘭克林C51 VER 3.2。