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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 單片機(jī)學(xué)習(xí)深入必要的幾個(gè)步驟

          單片機(jī)學(xué)習(xí)深入必要的幾個(gè)步驟

          作者: 時(shí)間:2016-08-31 來源:網(wǎng)絡(luò) 收藏

            成為一名嵌入式工程師,簡單的基礎(chǔ)學(xué)習(xí)與應(yīng)用是不可缺少的。學(xué)習(xí)就是學(xué)習(xí)的硬件結(jié)構(gòu),內(nèi)部資源與外設(shè)的應(yīng)用。在C語言中(極少量的匯編)掌握各種功能的初始化,啟動(dòng)與停止,實(shí)現(xiàn)各種功能函數(shù)的編寫與調(diào)試。

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

            第一步:數(shù)字I/O的應(yīng)用

            在大多數(shù)的單片機(jī)實(shí)驗(yàn)中,跑馬燈實(shí)驗(yàn)正是數(shù)字I/O的典型應(yīng)用,也是跑馬燈的實(shí)驗(yàn)被安排第一個(gè)的原因。通過將單片機(jī)的I/O引腳位進(jìn)行置位或清零來點(diǎn)亮或關(guān)閉LED燈,雖然簡單,但是這就是數(shù)字電路中的邏輯功能。數(shù)學(xué)I/O應(yīng)用的實(shí)驗(yàn)還有按鍵實(shí)驗(yàn),當(dāng)按下某鍵時(shí),某LED燈被點(diǎn)亮。數(shù)字I/O實(shí)驗(yàn)教會我們單片機(jī)的編程思想,必須首先對單片機(jī)的相應(yīng)寄存器進(jìn)行配置,以初始化I/O引腳,這樣才能使該引腳具備數(shù)字輸入與輸出功能。 單片機(jī)的一個(gè)內(nèi)置或外置功能的使用,就是對該功能相關(guān)的寄存器進(jìn)行設(shè)置,初始化,而這便是單片機(jī)編程的特點(diǎn)。少則4、5個(gè)函數(shù)搞定,多則十幾行程序,要有耐心,別怕麻煩,所有的單片機(jī)都是這樣。

            第二步:RS232串口通訊

            單片機(jī)都有UART接口,這個(gè)簡單、古老的通訊方式可以與我們PC機(jī)的RS232接口直接連接通訊,當(dāng)然,因?yàn)樗鼈儍烧唠娖竭壿嫴煌仨氁褂靡粋€(gè)RS232電平轉(zhuǎn)換芯片才能與PC機(jī)連接,例如Max232芯片。

            UART接口的使用是非常重要的,通過這個(gè)接口,我們可以使單片機(jī)與PC機(jī)之間交換信息,“接口”概念的學(xué)習(xí)也便由此引入。使用UART接口也會學(xué)習(xí)到目前最為簡單與常用的通信協(xié)議等知識。我們也可以通過PC機(jī)的串口調(diào)試軟件來監(jiān)視到單片機(jī)實(shí)驗(yàn)板的數(shù)據(jù),想一想,這會是一個(gè)多么神奇的事情啊~~

            第三步:定時(shí)器的使用

            學(xué)會定時(shí)器的使用,就可以利用單片機(jī)來實(shí)現(xiàn)典型的時(shí)序邏輯電路。時(shí)序邏輯電路的應(yīng)用是最強(qiáng)大、最廣泛的。例如,在工業(yè)的控制中,我們讓某個(gè)開關(guān)每隔1秒鐘打開與關(guān)閉一次。這個(gè)方案可以通過普通的數(shù)字集成電路實(shí)現(xiàn),也可以通過PLC來實(shí)現(xiàn),也可以通過CPLD或FPGA來實(shí)現(xiàn),但是只有單片機(jī)的實(shí)現(xiàn)是最簡單,成本也是最經(jīng)濟(jì)的。定時(shí)器是單片機(jī)內(nèi)部資源里最為重要的一個(gè),更是邏輯與時(shí)間控制實(shí)現(xiàn)的基礎(chǔ)。

            第四步:

            在單片機(jī)軟件設(shè)計(jì)架構(gòu)中,一段程序循環(huán)執(zhí)行是其一個(gè)特點(diǎn),也是一個(gè)弊端。每個(gè)操作指令的執(zhí)行都需要一定的執(zhí)行時(shí)間,如果程序沒有執(zhí)行到該指令,則該指令的動(dòng)作就不會觸發(fā),這樣就會忽略許多快速發(fā)生的事件,例如方波頻率檢測的上升沿。針對在單片機(jī)程序正常運(yùn)行時(shí)能夠?qū)ν獠渴录⒓醋龀鲰憫?yīng)而設(shè)計(jì)了功能。當(dāng)功能執(zhí)行時(shí),單片機(jī)優(yōu)先處理中斷程序,當(dāng)中斷處理完成后,再回到單片機(jī)的正常程序執(zhí)行中。中斷的機(jī)理是比較容易理解的,但是什么時(shí)候打開中斷,什么時(shí)候關(guān)閉、屏蔽中斷,需要如何配置才能使能中斷的某些功能,中斷里要執(zhí)行哪些程序,這些程序的要滿足哪些要求就需要花些時(shí)間去理解與實(shí)踐了。中斷學(xué)會后,就可以編寫復(fù)雜結(jié)構(gòu)功能的程序,可以一邊閃著小LED燈,一邊掃描著按鍵,一邊發(fā)送著數(shù)據(jù),也可以干著多個(gè)事情……打個(gè)比喻,中斷功能可以使單片機(jī)吃著碗里的,看著鍋里的。根據(jù)傳說中的8020定律,如果您掌握了上面提到的這四步,那么,您已經(jīng)學(xué)會了80%的內(nèi)容了。

            第五步:I2C、SPI通訊接口

            單片機(jī)系統(tǒng)畢竟資源有限,而利用I2C、SPI通訊接口進(jìn)行擴(kuò)展外設(shè)是最常用的方法,也是非常重要的方法。這兩個(gè)通訊接口都是串行通訊接口,典型的基礎(chǔ)實(shí)驗(yàn)就是I2C的EEPROM實(shí)驗(yàn)與SPI的SD卡讀寫實(shí)驗(yàn)。

            第六步:比較,捕捉,PWM功能

            比較,捕捉與PWM功能可以使單片機(jī)更加適合電機(jī)控制,信號檢測,實(shí)現(xiàn)電機(jī)速度與步長的調(diào)節(jié)。PWM波現(xiàn)在又是LED調(diào)光的主要手段。這里已經(jīng)初步接觸了數(shù)字電路里的模擬電路部分。

            第七步:A/D模數(shù)采集

            單片機(jī)目前基本都自帶多通道A/D模數(shù)轉(zhuǎn)換器,通過這些A/D轉(zhuǎn)換器可以單片機(jī)獲取模擬量,用于檢測電壓、電流等信號。學(xué)習(xí)時(shí)要分清模擬地與數(shù)字地,參考電壓,采樣時(shí)間,轉(zhuǎn)換速率,轉(zhuǎn)換誤差等重要概念。這一步學(xué)會了數(shù)字電路控制模擬電路部分,而最簡單的A/D模數(shù)轉(zhuǎn)換器就是電壓表實(shí)驗(yàn)。

            第八步:學(xué)習(xí)USB接口、TCP/IP協(xié)議、工業(yè)總線

            目前主流的通訊協(xié)議為USB協(xié)——下位機(jī)與上位機(jī)高速通訊接口;TCP/IP——萬能的互聯(lián)網(wǎng)使用的通訊協(xié)議;工業(yè)總線——諸如Modbus,CANOpen等工業(yè)控制各個(gè)模塊之間通訊的協(xié)議。這些都會應(yīng)用在未來的項(xiàng)目里,集成入單片機(jī)里的固件,并且也是當(dāng)前產(chǎn)品開發(fā)的一個(gè)發(fā)展方向。



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

          評論


          相關(guān)推薦

          技術(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); })();