www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > > 基礎(chǔ)知識科普站
[導(dǎo)讀]學(xué)習(xí)過C語言的同學(xué)在對單片機(jī)有了基本了解之后,就可以開始試著寫一兩個基于單片機(jī)的C語言的程序了。

80C51上的C語言編程 C51的特色:

(1)學(xué)習(xí)過C語言的同學(xué)在對單片機(jī)有了基本了解之后,就可以開始試著寫一兩個基于單片機(jī)的C語言的程序了。C51語言繼承了ANSI C 的絕大部分的特性,基本的語法相同,同學(xué)們上手會比較快。但是,由于C51語言是對硬件進(jìn)行控制的編程語言,其本身又在硬件結(jié)構(gòu)上有所擴(kuò)展以增強(qiáng)C語言對硬件的控制,如關(guān)鍵字sbit,data,code等(后面會講他們是做什么的)。

關(guān)于單片機(jī)的C語言編程基礎(chǔ)知識(初學(xué)注意)

(2)因為單片機(jī)不是我們平時用的計算機(jī),他的英文名為MCU(微控制器),特點體現(xiàn)在這個“微”字。因而,它里面的硬件資源是非常少的,所以你在寫程序的時候就要注意對RAM(存儲數(shù)據(jù))和ROM(存儲程序)的使用。說白了,就是也程序的時候要盡量精簡,如各種算法,不要讓系統(tǒng)負(fù)擔(dān)太大。少用浮點運算,能夠使用unsigned的無符號型數(shù)據(jù),就不要使用有符號的(當(dāng)你寫程序時,你會發(fā)現(xiàn)很多位置都用的unsigned,不像我們在ANSI C里面不同,不太注意,C51里面就非常注意資源的控制)。避免乘除,多用移位運算(寫走馬燈程序時,會使用到,很有意思,不是我們想象的用循環(huán)控制)。

基本的特性了解之后,我們來講下,具體的東西:

首先,是C51針對硬件控制增加的一些關(guān)鍵字,數(shù)據(jù)類型。

(1)bit : 和我們平時用的int,char相同,只不過int是兩個字節(jié)(16位,16bit),char是單字節(jié)(8位,8bit),bit就是一位,取值范圍是0和1,類似windows編程里的BOOL。

(2)sbit : sbit是對應(yīng)可位尋址空間的一個位,可位尋址區(qū):20H~2FH。一旦用了sbit xxx = REGE^6這樣的定義(例如,sibt a = P0^0,定義P0口的第0位為變量a,此時對a賦值0或者1時,就是在對P0口的第0位進(jìn)行控制,賦低電平或高電平),這個sbit量就確定地址了。(sbit大部分是用在特殊功能寄存器中的,方便對寄存器的某位進(jìn)行操作的。)

(3)sfr:用于定義特殊功能寄存器(8位的)(在程序中會寫頭文件#include,在Keil中右鍵點擊打開reg51.h,就可以看到很多sfr的定義),如sfr P0 = 0x80,就定義了端口P0。

(4)sfr16:同上用于16位的

其次,C51還提供了對8051所有存儲區(qū)的訪問。

8051芯片的存儲區(qū)從邏輯上分為內(nèi)部數(shù)據(jù)存儲區(qū),外部數(shù)據(jù)存儲區(qū)和程序存儲區(qū)(內(nèi)外統(tǒng)一編址)。

80C51有4KB的內(nèi)部程序存儲區(qū)(片內(nèi)ROM)(0000H~0FFFH),其中前43單元有特殊用處,0000H~0002H無條件跳轉(zhuǎn),0003H~002AH用于存放中斷程序(中斷程序這里不解釋)

256B的內(nèi)部數(shù)據(jù)存儲區(qū)(片內(nèi)RAM),分為低128B和高128B,有不同作用(可見硬件資源有多小了吧,所以我們要節(jié)省使用),低128B又分為為工作寄存器區(qū),又稱通用寄存器(00H~1FH),位尋址區(qū)(20H~2FH,之前的sbit就是對應(yīng)位尋址空間中的一位),數(shù)據(jù)緩沖區(qū)(30H~7FH,這個區(qū)域就是給用戶用得,沒有任何限制,一共80個單位)

高128B為特殊功能寄存器(就是上面說的sfr),具體的內(nèi)容在很多書上面都有。

http://www.mytutorialcafe.com/Microcontroller%20Special%20Function%20Register.htm

給個英文的sfr的解釋的網(wǎng)址,不過沒必要看,看書就行了。

在這里講這么多的原因是因為C51中在對變量進(jìn)行聲明的時候還可以明確的指定存儲空間。關(guān)鍵字有:DATA,IDATA,BDATA(RAM中高128B),CODE等。

(1)DATA指定RAM中低128B,可以在一個機(jī)器周期內(nèi)直接尋址,尋址速度最快,所以應(yīng)該把經(jīng)常使用的變量放在DATA區(qū)

例如:unsigned char data system_status = 0;

(2)BDATA指定的是RAM中的位尋址區(qū),在這個區(qū)域定義的變量可以進(jìn)行位操作,什么意思呢?舉例吧

unsigned char bdata status_byte,這里定義變量status_byte,是一個單字節(jié)(8位)的數(shù)據(jù)變量,我們可以對這個變量中的一位進(jìn)行置0或置1的操作。我們把 status_byte=0x00,即變量里面的8位都置為了0,前面講過一個sbit,用于位尋址區(qū)域中的一位,sbit a = status_byte^2;a = 1,表示把變量 status_byte的第2位置為了1(0,1,2,3,4,5,6,7共八位),于是變量 status_byte就等于了0x02;

(3)CODE 程序存儲區(qū),他里面的內(nèi)容是不變的,我們要使用的一些固定數(shù)據(jù)存于這個里面就不用占用RAM的空間了,比如我們學(xué)習(xí)數(shù)碼管顯示程序時,數(shù)碼管上面的每一個數(shù)字都對應(yīng)一個16進(jìn)制的數(shù)字,我們可以把它存到程序存儲區(qū)中去,例如:

unsigned char code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

關(guān)于特殊功能寄存器sfr的使用,我們以一個簡單的程序為例,在80C51芯片的P0^0上接上一個發(fā)光二極管LED,一個電阻RES和一個電源VCC,三者串聯(lián),電流方向是從電源流向P0^0口。給80C51接上電源,接地,晶振,復(fù)位電路。如果使用proteus仿真,則這些電路不用接。

在Keil軟件中寫程序

#include

sbit a = P0^0;

void main(){

a = 0;

while(1);

}

因為芯片剛剛上電,P0管教為高電位,我們在程序中把它置為0;電流就可以流過LED,于是LED燈就會發(fā)光。并用while(1)讓程序停在這里。

一個最簡單的單片機(jī)C語言程序就寫完了。講了這么多希望同學(xué)們了解,C51對C語言的擴(kuò)展有所了解,知道可以通過C語言對硬件進(jìn)行控制,學(xué)會常用的關(guān)鍵字。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉
關(guān)閉