新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AVR單片機(jī)的C語言開發(fā)簡介

        AVR單片機(jī)的C語言開發(fā)簡介

        作者: 時(shí)間:2013-01-14 來源:網(wǎng)絡(luò) 收藏

        下面我們來看看我們得到的代碼。【說明】:“#”只是為了方便解釋代碼,并非為程序內(nèi)容。

        #1 //ICC-AVR application builder : 2006-11-3 14:42:54

        #2 // Target : M16

        #3 // Crystal: 7.3728Mhz

        #4 #include

        #5 #include

        #6 void port_init(void)

        #7 {

        #8 PORTA = 0x00;

        #9 DDRA = 0x00;

        PORTB = 0x00;

        DDRB = 0x00;

        PORTC = 0x00; //m103 output only

        DDRC = 0x00;

        PORTD = 0x00;

        DDRD = 0x00;

        #10 }

        #11 //call this routine to initialize all peripherals

        #12 void init_devices(void)

        #13 {

        #14 //stop errant interrupts until set up

        #15 CLI(); //disable all interrupts

        #16 port_init();

        #17 MCUCR = 0x00;

        #18 GICR = 0x00;

        #19 TIMSK = 0x00; //timer interrupt sources

        #20 SEI(); //re-enable interrupts

        #21 //all peripherals are now initialized

        #13 }

        #1——#3,注釋行,分別說明了程序生成者是ICC-AVR application builder,生成時(shí)間,CPU類型,晶振大小,在本例中晶振大小沒有用途,但在實(shí)際操作中,晶振大小將影響定時(shí)器的設(shè)置,PWM波形的輸出,串口波特率的設(shè)定,總線時(shí)序等多方面的問題。

        #4——#5,包含特定頭文件,學(xué)過c語言的人都知道,c語言里幾乎每個(gè)程序都要包含特定的頭文件,在這里,iom16v.h和macros.h都在程序安裝文件夾下一個(gè)include的目錄中,iom16v.h和你選擇的芯片相對應(yīng),如果你選擇的是atmega32,那個(gè)這個(gè)文件就是iom32v.h,等等,在這樣的文件中定義了對應(yīng)的芯片的各個(gè)硬件地址。macros.h文件中定義了一些宏命令和一些老的語言寫法。通常每一個(gè)程序都要包含這個(gè)頭文件。

        #6 void port_init(void),定義函數(shù)port_init,函數(shù)的用途是初始化串口,前面一個(gè)void表示函數(shù)沒有輸出,括號里的void表示這個(gè)函數(shù)沒有輸入變量。

        #7,#10 C語言中所有函數(shù)體都要寫在{}內(nèi),一個(gè)開始,一個(gè)結(jié)束。

        #8,定義PA口為0x00,及PA口上的所有管腳輸出為低電平,同樣道理,如果些微PORTA=0xFF,則都輸入高電平,0xFF及二進(jìn)制的11111111,如果想讓某一位輸出高,其他為低,如00000001,則是PA0輸出為高電平,PA1——PA7輸出為低電平。說明:每個(gè)口線與單片機(jī)實(shí)際引腳的對應(yīng)關(guān)系請參看技術(shù)手冊。

        #9,定義引腳的輸出輸入模式,1為輸出,0為輸入。當(dāng)使用輸出模式及設(shè)置為1時(shí),PORTA的值將影響內(nèi)部上拉電阻的使用,如果PORTA對應(yīng)管腳的值為1,則使用內(nèi)部上拉電阻,否則不采用。 除了這里說的“=”之外,管腳的控制還有其他算符,|= ,=! ,^=,==,請參考學(xué)習(xí)筆記:avr端口操作的例子理解,將在本頁后面部分說明。

        同理,下面部分為BCD口的操作。

        #11,注釋,說明你可以使用下面的程序來實(shí)現(xiàn)初始化。

        #13,程序的開始和結(jié)束。

        #15,內(nèi)部定義的宏,關(guān)閉所有中斷。

        #16,調(diào)用端口初始化的程序。

        #17,MCUCR = 0x00;電源管理及睡眠模式寄存器設(shè)置,這里設(shè)為0x00,為空閑模式,更多內(nèi)容,請參看atmega16技術(shù)手冊。

        #18,GICR = 0x00;通用中斷控制寄存器設(shè)置,0x00,代表禁用任何中斷,更多內(nèi)容請參考技術(shù)手冊。



        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 葫芦岛市| 昌宁县| 衡东县| 丰镇市| 宁南县| 永嘉县| 紫金县| 蒲城县| 信宜市| 中阳县| 肥城市| 富顺县| 宜州市| 和硕县| 贡嘎县| 永康市| 永春县| 南安市| 洪洞县| 红桥区| 松桃| 临沧市| 汕尾市| 金湖县| 尼勒克县| 淮南市| 保德县| 若尔盖县| 胶南市| 九龙城区| 仲巴县| 饶河县| 会泽县| 赤城县| 南宁市| 纳雍县| 顺平县| 化德县| 泰州市| 濮阳市| 神木县|