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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)C語(yǔ)言知識(shí)點(diǎn)全攻略

          單片機(jī)C語(yǔ)言知識(shí)點(diǎn)全攻略

          作者: 時(shí)間:2012-08-17 來(lái)源:網(wǎng)絡(luò) 收藏

            為 test1.c,保存在項(xiàng)目所在的目錄中,這個(gè)時(shí)候您會(huì)發(fā)現(xiàn)程序單詞有了不一樣的顏色,說(shuō)明 KEIL的語(yǔ)法檢查生效了。如圖 1-6 鼠標(biāo)在屏幕左邊的 Source Group1 文件夾圖標(biāo)上右擊彈出 菜單,在這里能做在項(xiàng)目中增加減少文件等操作。選“Add File to Group ‘Source Group 1’” 彈出文件窗口,選擇剛剛保存的文件,按 ADD 按鈕,關(guān)閉文件窗,程序文件已加到項(xiàng)目中了。這個(gè)時(shí)候在 Source Group1 文件夾圖標(biāo)左邊出現(xiàn)了一個(gè)小+號(hào)說(shuō)明,文件組中有了文件,點(diǎn)擊它能展開(kāi)查看。

            點(diǎn)擊瀏覽下一頁(yè)

            圖 1-6 把文件加入到項(xiàng)目文件組中

           ?。?)C程序文件已被加到了項(xiàng)目中了,下面就剩下編譯運(yùn)行了。這個(gè)項(xiàng)目只是用做學(xué) 習(xí)新建程序項(xiàng)目和編譯運(yùn)行仿真的基本方法,所以使用軟件默認(rèn)的編譯設(shè)置,它不會(huì)生成用 于芯片燒寫的 HEX 文件。先來(lái)看圖 1-7 吧,圖中 1、2、3 都是編譯按鈕,不一樣是 1 是用 于編譯單個(gè)文件。2 是編譯鏈接當(dāng)前項(xiàng)目,如果先前編譯過(guò)一次之后文件沒(méi)有做動(dòng)編輯改動(dòng), 這個(gè)時(shí)候再點(diǎn)擊是不會(huì)再次重新編譯的。3 是重新編譯,每點(diǎn)擊一次均會(huì)再次編譯鏈接一次,不 管程序是否有改動(dòng)。在 3 右邊的是停止編譯按鈕,只有點(diǎn)擊了前三個(gè)中的任一個(gè),停止按鈕 才會(huì)生效。5 是菜單中的它們。在 4 中能看到編譯的錯(cuò)誤信息和使用的系統(tǒng)資源情況等, 以后我們要查錯(cuò)就靠它了。6 是有一個(gè)小放大鏡的按鈕,這就是開(kāi)啟關(guān)閉調(diào)試模式的按鈕, 它也存在于菜單 Debug-StartStop Debug Session,快捷鍵為 Ctrl+F5。

            點(diǎn)擊瀏覽下一頁(yè)

            圖 1-7 編譯程序

           ?。?)進(jìn)入調(diào)試模式,軟件窗口樣式大致如圖 1-8 所示。圖中 1 為運(yùn)行,當(dāng)程序處于停止 狀態(tài)時(shí)才有效,2 為停止,程序處于運(yùn)行狀態(tài)時(shí)才有效。3 是復(fù)位,模擬芯片的復(fù)位,程序 回到最開(kāi)頭處執(zhí)行。按 4 能打開(kāi) 5 中的串行調(diào)試窗口,這個(gè)窗口能看到從 51 芯片的串 行口輸入輸出的字符,這里的第一個(gè)項(xiàng)目也正是在這里看運(yùn)行結(jié)果。這些在菜單中也有。首 先按 4 打開(kāi)串行調(diào)試窗口,再按運(yùn)行鍵,這個(gè)時(shí)候就能看到串行調(diào)試窗口中不斷的打印“Hello World!”。最后要停止程序運(yùn)行回到文件編輯模式中,就要先按停止按鈕再按開(kāi)啟關(guān)閉調(diào)試 模式按鈕。然后就能進(jìn)行關(guān)閉 KEIL 等相關(guān)操作了。

            點(diǎn)擊瀏覽下一頁(yè)

            圖 1-8 調(diào)試運(yùn)行程序

          第二課、C51HEX文件的生成和最小系統(tǒng)

            上一篇建立了第一個(gè)項(xiàng)目,但為了讓編譯好的程序能通過(guò)編程器寫入51芯 片中,要先用編譯器生成HEX文件,下面來(lái)看看如何用KEIL uVISION2來(lái)編譯生成用于燒寫 芯片的HEX文件。HEX文件格式是Intel公司提出的按地址排列的數(shù)據(jù)信息,數(shù)據(jù)寬度為字 節(jié),所有數(shù)據(jù)使用16進(jìn)制數(shù)字表示, 常用來(lái)保存或其他處理器的目標(biāo)程序代碼。它保 存物理程序存儲(chǔ)區(qū)中的目標(biāo)代碼映象。一般的編程器都支持這種格式。我們先來(lái)打開(kāi)第一個(gè) 項(xiàng)目,打開(kāi)它的所在目錄,找到test.Uv2的文件就能打開(kāi)先前的項(xiàng)目了。然后右擊圖2-1 中的1項(xiàng)目文件夾,彈出項(xiàng)目功能菜單,選Options for Target’Target1’,彈出項(xiàng)目選項(xiàng)設(shè)置窗口, 同樣先選中項(xiàng)目文件夾圖標(biāo),這個(gè)時(shí)候在Project菜單中也有一樣的菜單可選。打開(kāi)項(xiàng)目選項(xiàng)窗口, 轉(zhuǎn)到Output選項(xiàng)頁(yè)圖2-2所示,圖中1是選擇編譯輸出的路徑,2是設(shè)置編譯輸出生成的文件 名,3則是決定是否要?jiǎng)?chuàng)建HEX文件,選中它就能輸出HEX文件到指定的路徑中。選好了? 好,我們?cè)賹⑺匦戮幾g一次,很快在編譯信息窗口中就顯示HEX文件創(chuàng)建到指定的路徑 中了,如圖2-3。這樣我們就可用自己的編程器所附帶的軟件去讀取并燒到芯片了,再用實(shí) 驗(yàn)板看結(jié)果,至于編程器或仿真器品種繁多具體方法就看它的說(shuō)明書了,這里也不做討論。

           ?。记桑阂?、在圖2-1中的1里的項(xiàng)目文件樹(shù)形目錄中,先選中對(duì)象,再單擊它就可對(duì)它進(jìn) 行重命名操作,雙擊文件圖標(biāo)便可打開(kāi)文件。二、在Project下拉菜單的最下方有最近編輯過(guò)

            的項(xiàng)目路徑保存,這里能快速打開(kāi)最近在編輯的項(xiàng)目。)

            圖2-1項(xiàng)目功能菜單

            點(diǎn)擊瀏覽下一頁(yè)

            圖2-2 項(xiàng)目選項(xiàng)窗口

            點(diǎn)擊瀏覽下一頁(yè)

            圖 2-3 編譯信息窗口

            或許您已把編譯好的文件燒到了芯片上,如果您購(gòu)買或自制了帶串行口輸出元件的學(xué)習(xí)實(shí) 驗(yàn)板,那您就能把串行口和 PC 機(jī)串行口相聯(lián)用串行口調(diào)試軟件或 Windows 的超級(jí)終端,將其波特 率設(shè)為 1200,就能看到不停輸出的“Hello World!”字樣。如果您還沒(méi)有實(shí)驗(yàn)板,那這 里先說(shuō)說(shuō) AT89c51 的最小化系統(tǒng),再以一實(shí)例程序驗(yàn)證最小化系統(tǒng)是否在運(yùn)行,這個(gè)最小化 系統(tǒng)也易于自制用于實(shí)驗(yàn)。圖 2-4 便是 AT89c51 的最小化系統(tǒng),不過(guò)為了讓我們能看出它 是在運(yùn)行的,加了一個(gè)電阻和一個(gè) LED,用以顯示它的狀態(tài),晶體震蕩器能根據(jù)自己的情況使用, 一般實(shí)驗(yàn)板上是用 11.0592MHz 或 12MHz,使用前者的好外是能產(chǎn)生標(biāo)準(zhǔn)的串行口波特率,后 者則一個(gè)機(jī)器周期為 1 微秒,便于做精確定時(shí)。在自己做實(shí)驗(yàn)里,注意的是 VCC 是+5V 的, 不能高于此值,不然將損壞單片機(jī),太低則不能正常工作。在 31 腳要接高電平,這樣我們 才能執(zhí)行片內(nèi)的程序,如接低電平則使用片外的程序存儲(chǔ)器。下面建一個(gè)新的項(xiàng)目名為 OneLED 來(lái)驗(yàn)證最小化系統(tǒng)是否能工作(所有的例程都可在筆者的主頁(yè)下面下載到,網(wǎng)址: http://www.51hei.com 。程序如下:

            #include 《 AT89X51.h》 //預(yù)處理命令

            void main(void) //主函數(shù)名

            {

            //這是第一種注釋方式

            unsigned int a; //定義變量 a 為 int 類型

            /* 這是第二種注釋方式

            */

            do{ //do while 組成循環(huán)

            for (a=0; a《50000; a++); //這是一個(gè)循環(huán) P1_0 = 0; //設(shè) P1.0 口為低電平,點(diǎn)亮 LED for (a=0; a《50000; a++); //這是一個(gè)循環(huán) P1_0 = 1; //設(shè) P1.0 口為高電平,熄滅 LED

            }

            while(1);

            }

            點(diǎn)擊瀏覽下一頁(yè)

            圖 2-4 AT89c51 最小化系統(tǒng)

            這里先講講 KEIL C 編譯器所支持的注釋語(yǔ)句。一種是以“//”符號(hào)開(kāi)始的語(yǔ)句,符號(hào)之后 的語(yǔ)句都被視為注釋,直到有回車換行。另一種是在“/*”和“*/”符號(hào)之內(nèi)的為注釋。注 釋不會(huì)被 C 編譯器所編譯。一個(gè) C 應(yīng)用程序中應(yīng)有一個(gè) main 主函數(shù),main 函數(shù)能調(diào)用別

            的功能函數(shù),但其它功能函數(shù)不允許調(diào)用 main 函數(shù)。不論 main 函數(shù)放在程序中的那個(gè)位置, 總是先被執(zhí)行。用上面學(xué)到的知識(shí)編譯寫好的 OneLED 程序,并把它燒到剛做好的最小化系 統(tǒng)中。上電,剛開(kāi)始時(shí) LED 是不亮的(因?yàn)樯想姀?fù)位后所有的 IO 口都置 1 引腳為高電平), 然后延時(shí)一段時(shí)間(for (a=0; a《50000; a++)這句在運(yùn)行),LED 亮,再延時(shí),LED 熄滅, 然后交替亮、滅。第一個(gè)真正的小實(shí)驗(yàn)就做完,如果沒(méi)有這樣的效果那么您就要認(rèn)真檢查一下電路或編譯燒寫的步驟了。

          第三課、C51數(shù)據(jù)類型

            每寫一個(gè)程序,總離不開(kāi)數(shù)據(jù)的應(yīng)用,在學(xué)習(xí) c51 語(yǔ)言的過(guò)程中掌握理解數(shù)據(jù)類型也是 很關(guān)鍵的。先看表 3-1,表中列出了 KEIL uVision2 單片機(jī)c語(yǔ)言編譯器所支持的數(shù)據(jù)類型。在標(biāo)準(zhǔn)中基本的數(shù)據(jù)類型為 char,int,short,long,float 和 double,而在c51編譯器中int 和 short 相同,float 和 double 相同,這里就不列出說(shuō)明了。下面來(lái)看看它們的具體定 義:

          單片機(jī)C語(yǔ)言知識(shí)點(diǎn)全攻略

            表 3-1 KEIL uVision2 單片機(jī)c語(yǔ)言編譯器所支持的數(shù)據(jù)類型

            1. char 字符類型

            char 類型的長(zhǎng)度是一個(gè)字節(jié),通常用于定義處理字符數(shù)據(jù)的變量或常量。分無(wú)符號(hào)字 符類型 unsigned char 和有符號(hào)字符類型 signed char,默認(rèn)值為 signed char 類型。 unsigned char 類型用字節(jié)中所有的位來(lái)表示數(shù)值,所能表達(dá)的數(shù)值范圍是 0~255。 signed char 類型用字節(jié)中最高位字節(jié)表示數(shù)據(jù)的符號(hào),“0”表示正數(shù),“1”表示負(fù)數(shù), 負(fù)數(shù)用補(bǔ)碼表示。所能表示的數(shù)值范圍是-128~+127。unsigned char 常用于處理 ASCII 字符或用于處理小于或等于 255 的整型數(shù)。

           ?。龜?shù)的補(bǔ)碼與原碼相同,負(fù)二進(jìn)制數(shù)的補(bǔ)碼等于它的絕對(duì)值按位取反后加 1。

            2. int 整型

            int 整型長(zhǎng)度為兩個(gè)字節(jié),用于存放一個(gè)雙字節(jié)數(shù)據(jù)。分有符號(hào) int 整型數(shù) signed int 和無(wú)符號(hào)整型數(shù) unsigned int,默認(rèn)值為 signed int 類型。signed int 表示的數(shù)值范 圍是-32768~+32767,字節(jié)中最高位表示數(shù)據(jù)的符號(hào),“0”表示正數(shù),“1”表示負(fù)數(shù)。 unsigned int 表示的數(shù)值范圍是 0~65535。

            先停一下來(lái)寫個(gè)小程序看看 unsigned char 和 unsigned int 用于延時(shí)的不一樣效果,說(shuō) 明它們的長(zhǎng)度是不一樣的,學(xué)習(xí)它們的使用方法。依舊用上一篇的最小化系統(tǒng)做實(shí)驗(yàn),不過(guò)要加多 一個(gè)電阻和 LED,如圖 3-1。實(shí)驗(yàn)中用 D1 的點(diǎn)亮表明正在用 unsigned int 數(shù)值延時(shí),用D2 點(diǎn)亮表明正在用 unsigned char 數(shù)值延時(shí)。

            圖 3-1 第 3 課實(shí)驗(yàn)用電路 把這個(gè)項(xiàng)目稱為 TwoLED,實(shí)驗(yàn)程序如下:



          評(píng)論


          相關(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); })();