<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 第3節(jié):單片機(jī)一個(gè)最重要的特性

          第3節(jié):單片機(jī)一個(gè)最重要的特性

          作者: 時(shí)間:2016-11-22 來源:網(wǎng)絡(luò) 收藏
          從業(yè)十年,教你單片機(jī)入門基礎(chǔ) 第3講:

          “道生一,一生二,二生三,三生萬物。”《道德經(jīng)》認(rèn)為,世間萬物,繽紛多彩,它們都起源自一個(gè)東西,這個(gè)“一”的東西就是“道”。電子世界也存在“一”這個(gè)東西,這個(gè)“一”繁衍出手機(jī),電腦,電視機(jī),機(jī)器人等豐富多彩的電子世界。這個(gè)“一”就是單片機(jī)一個(gè)最重要的特性:程序下載進(jìn)單片機(jī)的內(nèi)存后,可以識(shí)別管腳上的高低電平信號(hào),管腳也可以輸出不同時(shí)間長度的高低電平。下面我把這句話的5個(gè)重要關(guān)健詞提取出來,詳細(xì)解讀它的含義。

          本文引用地址:http://www.ex-cimer.com/article/201611/319813.htm

          程序。有3種,C程序,匯編程序,機(jī)器程序。能下載進(jìn)單片機(jī)的只有機(jī)器程序,C程序和匯編程序都不能直接下載進(jìn)單片機(jī),所以C程序和匯編程序最終要經(jīng)過專用編譯軟件翻譯成機(jī)器程序后,才能下載進(jìn)單片機(jī)執(zhí)行。程序就是語言,語言就是用來交流的,交流就必須存在兩個(gè)對(duì)象,這兩個(gè)對(duì)象分別是程序員和單片機(jī)。程序員用C語言或者匯編語言,單片機(jī)只用機(jī)器語言,他們兩者交流就必需一個(gè)翻譯家,這個(gè)翻譯家就是編譯軟件,俗稱編譯器,它專門把C語言或者匯編語言翻譯成單片機(jī)能識(shí)別的機(jī)器語言。現(xiàn)在單片機(jī)開發(fā)的主流是用C語言,我本人出來工作后就從來沒有用過匯編語言,所以我的觀點(diǎn)是,C語言是必修課,匯編語言是選修課;C語言是白話文簡單易懂,匯編語言是文言文繁瑣難讀。當(dāng)然匯編也有它的優(yōu)點(diǎn)和不可替代的場(chǎng)合,匯編的翻譯效率高,往往是一句匯編語言對(duì)應(yīng)一句機(jī)器語言,而一句C語言有可能對(duì)應(yīng)幾句機(jī)器語言,所以很多嵌入式系統(tǒng)某段要求簡潔高效的源代碼都是用匯編來寫的,也有少數(shù)一些很便宜的單片機(jī)不提供C編譯器,只能用匯編語言開發(fā)。所以要不要學(xué)匯編,我的建議是最好根據(jù)個(gè)人的工作需求來決定。

          內(nèi)存。既然程序可下載進(jìn)單片機(jī),那么單片機(jī)必然有一個(gè)存儲(chǔ)程序的內(nèi)存。單片機(jī)內(nèi)存包括ROM和RAM兩部分。ROM的優(yōu)點(diǎn)是掉電后存儲(chǔ)的內(nèi)容不會(huì)丟失,缺點(diǎn)是除非在燒錄(下載)過程中,否則上電后它存儲(chǔ)的內(nèi)容也不能更改。并且,雖然ROM在燒錄(下載)過程中可以更改內(nèi)容,但是更改的次數(shù)有限制,也就是燒錄(下載)的次數(shù)有限制,一般最大次數(shù)是10萬次,當(dāng)然這里所說ROM是指FLASH的單片機(jī),如果是OTP的單片機(jī),那么最大次數(shù)是1次。而RAM恰好反過來,RAM的優(yōu)點(diǎn)是上電后存儲(chǔ)的內(nèi)容可以被程序指令隨時(shí)更改,而且還沒有更改次數(shù)限制,缺點(diǎn)是掉電后內(nèi)容會(huì)丟失。正因?yàn)镽OM和RAM各有特點(diǎn),所以它們的分工有所不同。程序包括指令和數(shù)據(jù)兩部分。指令是指程序中的判斷,跳轉(zhuǎn),賦值等指令,這些內(nèi)容是程序燒錄進(jìn)單片機(jī)時(shí)就固定下來的,不可更改的,所以存儲(chǔ)在ROM中。數(shù)據(jù)也分兩種,程序指令可更改的數(shù)據(jù)和程序指令不可更改的數(shù)據(jù)。程序指令可更改的數(shù)據(jù)存儲(chǔ)在RAM中,程序指令不可更改的數(shù)據(jù)存儲(chǔ)在ROM中。那么誰在幕后進(jìn)行這些分類存儲(chǔ)?是編譯器軟件和下載器(燒錄器)。編譯器除了把C語言翻譯成機(jī)器語言之外,還幫我們分好了類,分配好了存儲(chǔ)的地址和位置,下載器(燒錄器)再根據(jù)這些信息把程序存儲(chǔ)到內(nèi)存中。

          管腳。它是單片機(jī)與外部電路進(jìn)行能量和信息交互的橋梁。有電源,復(fù)位,晶振和IO口這4種類型管腳。第一種電源管腳。是給單片機(jī)內(nèi)部電路供電的接口。單片機(jī)有兩種常用的供電電壓,一般不是3.3V就是5V,有的單片機(jī)兩種電壓都兼容。第二種復(fù)位管腳。單片機(jī)上電后需要外部電路給它一個(gè)瞬間高電平或者低電平的復(fù)位信號(hào),才能啟動(dòng)工作。這類外部的復(fù)位電路通常是用電容和電阻組成的充電電路來實(shí)現(xiàn),也有一些系統(tǒng)是用專門的復(fù)位芯片來實(shí)現(xiàn)。第三種晶振管腳。任何單片機(jī)想要工作必須要有晶振。單片機(jī)執(zhí)行程序指令是按一個(gè)節(jié)拍一個(gè)節(jié)拍來執(zhí)行的。而晶振產(chǎn)生固定頻率的脈沖就是這個(gè)節(jié)拍的基礎(chǔ)源泉。所以把晶振比喻成單片機(jī)的心臟是非常恰當(dāng)?shù)摹.?dāng)然,現(xiàn)在很多單片機(jī)都把晶振集成到內(nèi)部了,不用再外接晶振。第四種IO口管腳。這是跟我們編寫程序關(guān)聯(lián)最密切的管腳。前面提到的電源,復(fù)位,晶振這3種管腳是為了讓單片機(jī)能工作,俗稱單片機(jī)工作的三要素。而單片機(jī)工作的具體內(nèi)容就是通過IO口管腳來體現(xiàn)的。比如,IO口能識(shí)別按健的輸入,也能驅(qū)動(dòng)繼電器的開關(guān),也能跟外圍器件進(jìn)行通信。

          電平。單片機(jī)IO口管腳檢測(cè)到的電壓低于或等于0.8V時(shí)是低電平,程序里讀取到的是0數(shù)字。檢測(cè)到的電壓高于或等于2.4V時(shí)是高電平,程序里讀取到的是1數(shù)字,當(dāng)然IO口輸入的最大電壓不能超過單片機(jī)的供電電壓。單片機(jī)輸出的低電平是0V,單片機(jī)輸出的高電平等于它的供電電壓值。

          時(shí)間。時(shí)間是單片機(jī)程序必不可少的一個(gè)元素。跟外圍芯片通信的時(shí)序節(jié)拍需要時(shí)間,驅(qū)動(dòng)發(fā)光二極管閃爍需要時(shí)間,工控自動(dòng)化的某些延時(shí)需要時(shí)間。單片機(jī)的時(shí)間來源自兩方面。第一方面源自指令的周期時(shí)間。單片機(jī)是根據(jù)節(jié)拍來執(zhí)行程序指令的,所以每執(zhí)行一條指令都要消耗一點(diǎn)時(shí)間,只要讓程序執(zhí)行一些無實(shí)際意義的指令,并且通過調(diào)整所執(zhí)行指令的條數(shù)就可以得到所需要的時(shí)間長度。第二方面源自單片機(jī)內(nèi)部自帶的定時(shí)器。假如設(shè)置定時(shí)器每20毫秒產(chǎn)生一次中斷,現(xiàn)在要獲取10秒鐘的時(shí)間,只需程序統(tǒng)記500次定時(shí)中斷就可以了,因?yàn)?秒等于1000毫秒。

          下節(jié)預(yù)告,平臺(tái)軟件和編譯器軟件的簡介。



          關(guān)鍵詞: 單片機(jī)特

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();