最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

51單片機(jī)編程開(kāi)發(fā)(一)之C語(yǔ)言基礎(chǔ)一

2022-07-22 12:05 作者:落木青云  | 我要投稿

前言

前段時(shí)間給自己放了一個(gè)長(zhǎng)假,和家人出去玩了一圈,最近又一直在處理一些工作,就沒(méi)有多少時(shí)間做視頻,所以就有很長(zhǎng)一段時(shí)間沒(méi)有更新視頻了,后面整理一些內(nèi)容再更新出來(lái)。發(fā)現(xiàn)B站也能寫(xiě)些文章,估計(jì)是太小眾了吧(是我孤陋寡聞了),之前一直沒(méi)用過(guò),今天就試著把公眾號(hào)上的文章搬過(guò)來(lái)看看吧。前期搬過(guò)來(lái)的一些文章可能發(fā)表比較久遠(yuǎn)的了,如果一些話(huà)不合語(yǔ)境,還望諒解,哈哈哈~以后再保持兩個(gè)平臺(tái)同步吧,如果覺(jué)得還有點(diǎn)用希望能點(diǎn)個(gè)贊!如果發(fā)現(xiàn)錯(cuò)誤還請(qǐng)指正!

為什么是C?

從這篇文章開(kāi)始我們將講解單片機(jī)編程開(kāi)發(fā)相關(guān)知識(shí),如果沒(méi)有編程基礎(chǔ)或不太熟練的朋友就跟著一起從基礎(chǔ)學(xué)起吧,但一定要記住看完后自己必須多思考,多查資料,多練習(xí),才能掌握得了,不然后面的內(nèi)容會(huì)完全跟不上,從而失去學(xué)習(xí)興趣,有問(wèn)題可以留言或私信。有基礎(chǔ)的朋友可以略過(guò)這些基礎(chǔ)知識(shí)講解內(nèi)容,當(dāng)然我還是建議如果有空還是值得看一下的,畢竟是我一字一句敲下來(lái)的,給個(gè)面子撒,若發(fā)現(xiàn)錯(cuò)誤順便指出來(lái)就更好了,明天周六那正好這篇文章可以多扯會(huì)淡。

我們使用51單片機(jī)開(kāi)發(fā)項(xiàng)目時(shí)使用的編程語(yǔ)言主要有兩種,即匯編語(yǔ)言和C語(yǔ)言,通常情況下多數(shù)人使用的都是C語(yǔ)言。有些人可能看到匯編就想起了微機(jī)原理了吧,微機(jī)原理難不難,比較難,它的難很大程度是因?yàn)樗枰脜R編語(yǔ)言開(kāi)發(fā)。

為什么我們不用Java,Python等更簡(jiǎn)單的高級(jí)語(yǔ)言呢?因?yàn)槟菚?huì)它們都還沒(méi)出生呀,它娘都還年輕著呢。任何事物產(chǎn)生都得依靠環(huán)境吧,正所謂經(jīng)濟(jì)基礎(chǔ)決定上層建筑,這些高級(jí)語(yǔ)言耗費(fèi)的內(nèi)存空間巨大,對(duì)于8086,8051等早期的控制器來(lái)說(shuō)其內(nèi)部資源非常有限,甚至內(nèi)部ram都沒(méi)有,還得外掛才能用,每一點(diǎn)資源都得摳摳搜搜省著用,現(xiàn)在它們見(jiàn)到Java,Python等語(yǔ)言也只能說(shuō),臣妾辦不到呀!匯編語(yǔ)言的特點(diǎn)就是緊湊,訪(fǎng)問(wèn)底層硬件非常容易,特別容易生成機(jī)器代碼,所以它具有天生的優(yōu)勢(shì),但它的最大缺點(diǎn),也是最致命的就是它的代碼可讀性太差,不好記呀,簡(jiǎn)單說(shuō)就是這家伙親機(jī)器不親人類(lèi)。我們?nèi)祟?lèi)最喜歡偷懶了,就像匯編出來(lái)后,手打的機(jī)器代碼被人拋棄了一樣(有人可能沒(méi)聽(tīng)說(shuō)過(guò)手打機(jī)器代碼這玩意,在一些科技紀(jì)錄片或電影里找找應(yīng)該有,說(shuō)實(shí)話(huà)現(xiàn)實(shí)版的我也沒(méi)見(jiàn)過(guò),科技博物館應(yīng)該有,所以那時(shí)候的計(jì)算機(jī)等專(zhuān)業(yè)絕對(duì)不是熱門(mén)專(zhuān)業(yè),誰(shuí)沒(méi)事想整天對(duì)著一堆紙費(fèi)那么大勁呢,是吧,萬(wàn)一媳婦找不著咋整呀),后來(lái),C語(yǔ)言被開(kāi)發(fā)出來(lái)它保持了匯編優(yōu)良的底層訪(fǎng)問(wèn)效率,而且可讀性大大增強(qiáng)(它訪(fǎng)問(wèn)硬件的效率稍微遜色于匯編,代碼也沒(méi)匯編精簡(jiǎn),但終于可以不用記憶代碼了呀,犧牲一點(diǎn)效率和空間也OK啦),后來(lái)計(jì)算機(jī)資源越來(lái)越來(lái)豐富了,Java,Python等各類(lèi)牛鬼蛇神的高級(jí)語(yǔ)言出來(lái)后,C語(yǔ)言也慢慢地落寞了(對(duì)吧,人啦,就是善變,來(lái)個(gè)富婆(爺)就可以“拋妻(夫)棄子”,長(zhǎng)相(年齡)通通都不重要),但它的境遇比紙帶代碼,和匯編要好很過(guò),至少它可讀性良好,對(duì)底層訪(fǎng)問(wèn)效率夠高,在電子,微控制器領(lǐng)域還是沒(méi)人能取代它的地位。所以以后人類(lèi)社會(huì)只要還使用電子產(chǎn)品就應(yīng)該還會(huì)存在C語(yǔ)言。

以上扯了這么多就是為了說(shuō)清單片機(jī)開(kāi)發(fā)選擇C語(yǔ)言的原因,同時(shí)也說(shuō)明一點(diǎn),如果你掌握好了C語(yǔ)言就不愁找不到工作,雖然它可能不能像游戲開(kāi)發(fā),移動(dòng)應(yīng)用開(kāi)發(fā),網(wǎng)頁(yè)開(kāi)發(fā)等互聯(lián)網(wǎng)行業(yè)一樣動(dòng)不動(dòng)就年薪百萬(wàn),但再不濟(jì)在電子行業(yè)總有一家公司容得下你。并且當(dāng)你你有C語(yǔ)言的基礎(chǔ)后,你再學(xué)習(xí)其他語(yǔ)言會(huì)更輕松,到時(shí)同樣可以獲得互聯(lián)網(wǎng)行業(yè)的工作。

有很多初學(xué)者可能意志不堅(jiān),看到其他語(yǔ)言簡(jiǎn)單或哪個(gè)朋友啥東西好就又去學(xué)其他的去了,這都是很正常的事,我覺(jué)得選擇沒(méi)有對(duì)錯(cuò)之分,你也不會(huì)因?yàn)橐粋€(gè)選擇就錯(cuò)過(guò)了人生,更何況這世界何為成???這是一個(gè)很主觀(guān)的詞,即使到蓋棺定論也沒(méi)有人可論你成敗(后人評(píng)論的就不關(guān)自己啥事了吧)。所以特別是在校大學(xué)生,在沒(méi)畢業(yè)之前多去探索一些自己喜歡的事物吧,這總比做玩游戲的死肥宅強(qiáng)。這不昨天剛高考完嘛,如果是今年剛參加高考的朋友看到這篇文章,又有志于做程序員的,那也送上一句,少年,不管考試結(jié)果如何,趁年輕,盡管去折騰吧!

前段時(shí)間有一個(gè)小弟弟,初中畢業(yè)后修車(chē)修了差不多五年了,他看了我的視頻后跟我說(shuō)想學(xué)電子,以后更專(zhuān)業(yè)的修車(chē),拿更高的工資,我對(duì)他這股學(xué)習(xí)的勁是非常贊同的,并且他目標(biāo)已經(jīng)很明確了,我覺(jué)得這小朋友有戲。他自己也買(mǎi)了材料,書(shū)籍,儀器來(lái)學(xué)習(xí),并且也認(rèn)識(shí)到自己差一個(gè)人帶,我就跟他說(shuō)遇到問(wèn)題告訴我。這段時(shí)間他碰到問(wèn)題就會(huì)跟我說(shuō),雖然最開(kāi)始他問(wèn)的很基礎(chǔ),有些甚至讓我哭笑不得(也有些是代溝問(wèn)題吧,畢竟00后腦回路跟我還是不一樣),但我盡量以他了解的基礎(chǔ)給予回復(fù),現(xiàn)在他提的一些問(wèn)題就慢慢的專(zhuān)業(yè)一些了,這是一件很趣的事情。一個(gè)對(duì)比的例子,就是我的外甥,高中文化,幾年前他說(shuō)想跟我學(xué),我當(dāng)面跟他說(shuō)需要準(zhǔn)備什么,學(xué)習(xí)什么,怎么做,把前期學(xué)習(xí)需要準(zhǔn)備的資料也給到他,讓他遇到問(wèn)題就及時(shí)告訴我,前兩天還能問(wèn)些問(wèn)題,一個(gè)星期左右就變成我問(wèn)他學(xué)習(xí)進(jìn)度了,到后面我問(wèn)他也得不到回復(fù)了,現(xiàn)在幾年過(guò)去了它干著我看不懂的工作,不知是好事還是壞事,也不知道是不是自己對(duì)他期望太高。我的結(jié)論就是不管學(xué)什么知識(shí),只有你自己真正有了一個(gè)明確的目標(biāo)之后,監(jiān)督自己,認(rèn)清現(xiàn)狀,調(diào)整狀態(tài),找到適合自己的解決方案,一步一步實(shí)現(xiàn)小目標(biāo),你才能取得成效。

先不扯遠(yuǎn)了吧,接下來(lái)進(jìn)入正題。

C語(yǔ)言簡(jiǎn)介

C語(yǔ)言是1972 年在美國(guó)AT&T公司的貝爾實(shí)驗(yàn)室的丹尼斯·里奇為了移植與開(kāi)發(fā) UNIX 操作系統(tǒng),而設(shè)計(jì)開(kāi)發(fā)的語(yǔ)言,其代碼的可讀性和移植性遠(yuǎn)遠(yuǎn)超過(guò)匯編語(yǔ)言。C語(yǔ)言也是一種高級(jí)語(yǔ)言,我們知道高級(jí)語(yǔ)言在效率和代碼空間上都不敵匯編,但一方面C語(yǔ)言具有指針,該功能使其能對(duì)硬件地址進(jìn)行直接操作,另外C語(yǔ)言通過(guò)編譯器的優(yōu)化,很大程度提高了執(zhí)行效率,降低了程序空間,在對(duì)實(shí)時(shí)性要求較高的場(chǎng)合,還可通過(guò)對(duì)C語(yǔ)言可嵌入?yún)R編代碼來(lái)實(shí)現(xiàn)功能。而對(duì)于較大的程序,無(wú)論從開(kāi)發(fā)的速度、結(jié)構(gòu)的清晰等方面來(lái)比較,C語(yǔ)言比匯編具有更多的優(yōu)勢(shì)。

C 語(yǔ)言標(biāo)準(zhǔn)是于 1988 年由美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI,全稱(chēng) American National Standard Institute)制定的。

至 1973 年起,UNIX 操作系統(tǒng)完全使用 C 語(yǔ)言編寫(xiě)。

目前,C 語(yǔ)言是最廣泛使用的系統(tǒng)程序設(shè)計(jì)語(yǔ)言之一。

大多數(shù)先進(jìn)的軟件都是使用 C 語(yǔ)言實(shí)現(xiàn)的。

當(dāng)今最流行的 Linux 操作系統(tǒng)和 RDBMS(Relational Database Management System:關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)) MySQL 等都是使用 C 語(yǔ)言編寫(xiě)的。

C語(yǔ)言能運(yùn)用于大多數(shù)軟件開(kāi)發(fā)場(chǎng)景。

甚至后續(xù)很多其他高級(jí)語(yǔ)言都是使用C語(yǔ)言開(kāi)發(fā)的。

以上都是C語(yǔ)言的一些常規(guī)優(yōu)勢(shì),下面我們?cè)賮?lái)看看使用C語(yǔ)言進(jìn)行單片機(jī)編程的一些優(yōu)勢(shì):

●作為高級(jí)語(yǔ)言,可讀性強(qiáng),不依賴(lài)于機(jī)器,移植性好。

●可直接訪(fǎng)問(wèn)物理地址,程序執(zhí)行效率高。

●可進(jìn)行位操作,可提升寄存器訪(fǎng)問(wèn)效率。

●擁有復(fù)雜的數(shù)據(jù)類(lèi)型可增強(qiáng)對(duì)程序處理的能力。

●即使不懂得單片機(jī)指令集,也能編寫(xiě)單片機(jī)程序。

●具有常用的標(biāo)準(zhǔn)函數(shù)庫(kù)。

●具有專(zhuān)門(mén)針對(duì)MCS-51單片機(jī)的code、data、idata、pdata、xdata等存儲(chǔ)類(lèi)型,滿(mǎn)足不同需求,并能自動(dòng)為變量合理分配地址。

●具有small、compact、large等編譯模式,可適應(yīng)不同大小的片上存儲(chǔ)器。

總之一句,可讀行強(qiáng),功能先進(jìn),效率高,可移植性好。

看明白看吧,這里還是在說(shuō)為何選擇C語(yǔ)言開(kāi)發(fā),上一節(jié)太長(zhǎng)不想看直接看這一節(jié)內(nèi)容就行,欲練此功……

C51編譯器

51單片機(jī)開(kāi)發(fā)編譯有很多,現(xiàn)在比較有名的是IAR for 8051編譯器和KEIL for C51編譯器,但這兩個(gè)軟件都不是免費(fèi)的,官網(wǎng)提高的免費(fèi)版是有使用限制的。另外還有一些編譯器是免費(fèi)的,但需要一定基礎(chǔ),初學(xué)者就不推薦使用了,等你翅膀硬了之后在自己配置編譯環(huán)境吧。

簡(jiǎn)單介紹兩個(gè)免費(fèi)編譯器:可跨平臺(tái)使用的開(kāi)源編譯器sdcc,有空可以自己查資料搭建一下,后期如果有時(shí)間我再做個(gè)教程吧。另外微軟公司提供的Visual Studio Code這個(gè)免費(fèi)又強(qiáng)大的代碼編輯器配合一些三方插件工具也可以實(shí)現(xiàn)各種單片機(jī)編譯功能,效果也不錯(cuò),這個(gè)也以后再另說(shuō)吧。IAR for 8051編譯器和KEIL for C51編譯器在官網(wǎng)都可以免費(fèi)下載,可自行下載安裝,我這里后續(xù)的內(nèi)容以KEIL for C51編譯器為例。關(guān)于KEIL for C51編譯器的安裝前面的視頻里有提到過(guò)了,不知道的可以點(diǎn)擊查看:keil MDK與C51共存也算個(gè)問(wèn)題?

C語(yǔ)言變量類(lèi)型和數(shù)據(jù)范圍

有C語(yǔ)言基礎(chǔ)的朋友可以不看或簡(jiǎn)單看一下。

什么是變量?變量自然和常量是相對(duì)的。常量就是1、2、3、4.5、10.6…等已經(jīng)確定的數(shù)據(jù)或字符(串),而變量則跟中小學(xué)階段方程式中的a,b,c……x,y,z是一樣,它可以是1,也可以讓它是2,或者任何其他數(shù)字。

以前數(shù)學(xué)里邊有的正數(shù)、負(fù)數(shù)、整數(shù)和小數(shù)可以是無(wú)窮的。但在計(jì)算機(jī)系統(tǒng)中由于內(nèi)部空間的限制,在C語(yǔ)言里,除名字和數(shù)學(xué)里學(xué)的不一樣外,還對(duì)數(shù)據(jù)范圍也進(jìn)行了一定限制。在C語(yǔ)言中數(shù)據(jù)基本類(lèi)型分為字符型、整型、長(zhǎng)整型以及浮點(diǎn)型,它們的數(shù)值范圍不一。并且C51中的數(shù)據(jù)范圍和常規(guī)計(jì)算機(jī)平臺(tái)的略有不同,以后可能在其他單片機(jī)中又會(huì)有些不一樣,這都是單片機(jī)硬件屬性決定的,這點(diǎn)大家不用死記,做個(gè)了解,以后編程時(shí)多注意一下就行,具體問(wèn)題具體分析。在我們平時(shí)編程的時(shí)候也要考慮合理使用數(shù)據(jù)類(lèi)型,為變量合理分配數(shù)據(jù)類(lèi)型一個(gè)可以避免數(shù)據(jù)超限,另外也可以節(jié)約內(nèi)存空間。優(yōu)化程序的時(shí)候也應(yīng)考慮數(shù)據(jù)類(lèi)型的合理合規(guī)。

C51數(shù)據(jù)類(lèi)型和范圍查看下圖:

C51數(shù)據(jù)類(lèi)型和范圍

C語(yǔ)言基本運(yùn)算符簡(jiǎn)介

和小學(xué)學(xué)習(xí)數(shù)學(xué)時(shí)的加、減、乘、除等運(yùn)算符號(hào)一樣,在C語(yǔ)言中也包含這些運(yùn)算,但是有些表達(dá)方法不一樣,并且還有其他額外的一些運(yùn)算符號(hào)。在C語(yǔ)言編程中,加、減、乘、除和取余數(shù)的符號(hào)分別是:+、-、*、/、%。此外,C語(yǔ)言中還有額外的兩個(gè)運(yùn)算符++和--,它們的用法是一樣的,一個(gè)是自加1,一個(gè)是自減1,以上的運(yùn)算符稱(chēng)為算術(shù)運(yùn)算符,它的具體功能如下:

C語(yǔ)言算術(shù)運(yùn)算符

與數(shù)學(xué)中的關(guān)系運(yùn)算符一樣,C語(yǔ)言中也有關(guān)系運(yùn)算符只是他們的寫(xiě)法你不一定認(rèn)識(shí),比如>,<,<=,>=,==,!=,它們的具體使用說(shuō)明如下:

C語(yǔ)言關(guān)系運(yùn)算符

C語(yǔ)言中還有邏輯運(yùn)算符比如&&,||,!,

C語(yǔ)言邏輯運(yùn)算符

因?yàn)橛?jì)算機(jī)是使用二進(jìn)制,所以C語(yǔ)言中還有位運(yùn)算符,使用說(shuō)明如下:

C語(yǔ)言位運(yùn)算符

以上很多運(yùn)算符你之前可能都只見(jiàn)過(guò)符號(hào)不認(rèn)識(shí)含義,在C語(yǔ)言中未來(lái)編程方便還有許多賦值運(yùn)算符。你可能想到=,但還有+=,-=,*=,/=等等,更多你沒(méi)講過(guò)的,一起來(lái)看看:

C語(yǔ)言賦值運(yùn)算符

還有一些用的多的,又是初學(xué)者很容易搞混的運(yùn)算符,如下:

需要注意的運(yùn)算符

因?yàn)閮?nèi)容比較多,我們?cè)谶@一節(jié)就先簡(jiǎn)單了解,后面編程具體使用時(shí)再詳細(xì)介紹。

和數(shù)學(xué)中的運(yùn)算符具有優(yōu)先順序一樣C語(yǔ)言中的運(yùn)算符也有優(yōu)先順序,他和數(shù)學(xué)中的運(yùn)算符優(yōu)先級(jí)差不多,但因?yàn)槎嗔撕芏?,我們平時(shí)編程時(shí)需要記住它們的優(yōu)先順序,否則結(jié)果可能不如你意,當(dāng)然我們?cè)诓磺宄那闆r下使用括號(hào)來(lái)限定運(yùn)算范圍是很好的習(xí)慣,現(xiàn)在我們看一下C語(yǔ)言中的運(yùn)算符優(yōu)先級(jí):

C語(yǔ)言運(yùn)算符優(yōu)先級(jí)

小結(jié)

以上內(nèi)容都比較容易接受吧,和小學(xué)數(shù)學(xué)差不多,不過(guò)有些符號(hào)沒(méi)見(jiàn)過(guò)可能有些人是懵了,那就需要多花些時(shí)間理解熟練,所以這一節(jié)先介紹這么多。但是如果對(duì)什么的運(yùn)算符不太理解也沒(méi)關(guān)系,畢竟是初學(xué),不表達(dá)不出的邏輯思想轉(zhuǎn)化為自己熟悉的邏輯也是可以的,以后熟練了自然而然就會(huì)了。下一篇文章我們?cè)俳又咽O碌囊恍┗A(chǔ)內(nèi)容講完,再接下來(lái)我們就要進(jìn)行編程開(kāi)發(fā)了,有趣的才剛開(kāi)始,更多有趣內(nèi)容還在后頭呢,所以還沒(méi)理解的一定要抓緊時(shí)間把基礎(chǔ)問(wèn)題消化好。

若發(fā)現(xiàn)錯(cuò)誤歡迎指正!

51單片機(jī)編程開(kāi)發(fā)(一)之C語(yǔ)言基礎(chǔ)一的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
凤城市| 灌云县| 高雄市| 大洼县| 宁蒗| 平昌县| 资兴市| 河西区| 沙雅县| 万山特区| 任丘市| 琼结县| 娱乐| 双柏县| 松原市| 美姑县| 漳浦县| 招远市| 桑日县| 仪陇县| 洪泽县| 阿勒泰市| 确山县| 会理县| 白山市| 嵊州市| 西乌珠穆沁旗| 常宁市| 宜昌市| 青岛市| 新闻| 呼伦贝尔市| 大宁县| 庆安县| 建湖县| 海城市| 鹤壁市| 周宁县| 四子王旗| 渭源县| 桂东县|