當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]Avr單片機(jī)和其他單片機(jī)一樣,有自己的指令和寄存器,特定的IO口操作方法,有定時(shí)器,AD轉(zhuǎn)換,串行口,PWM輸出,EEPROM等。為了縮短大家學(xué)習(xí)的時(shí)間,快速的了解avr編程思路,擬定avr程序設(shè)計(jì)系列教程。我使用avr也不是

Avr單片機(jī)和其他單片機(jī)一樣,有自己的指令和寄存器,特定的IO口操作方法,有定時(shí)器,AD轉(zhuǎn)換,串行口,PWM輸出,EEPROM等。為了縮短大家學(xué)習(xí)的時(shí)間,快速的了解avr編程思路,擬定avr程序設(shè)計(jì)系列教程。我使用avr也不是很長時(shí)間,技術(shù)有限,錯(cuò)誤再所難免,還請指出,以期改正。

【說明】:本頁是針對從來沒有碰過單片機(jī)或者用過單片機(jī)而沒有用c語言的朋友,如果你已經(jīng)用過其他單片機(jī),此頁說明可能對你沒有很大幫助,且顯得有些幼稚,請你跳過。

本站所有程序都是在icc+avrstudio下進(jìn)行的,如果你沒有配置好環(huán)境

采用icc的原因之一是它自帶一個(gè)非常好用的application builder,生成的代碼結(jié)構(gòu)清晰,層次清楚,特別適合新手,如下圖。

非常好用的 icc application builder

下面通過一個(gè)簡單的程序,分析avr程序要素,使用icc的程序生成器,Application Builder 界面如下:

icc的程序生成器

進(jìn)入該界面后,我更改設(shè)置,Target CPU,及目標(biāo)芯片設(shè)置位mega16這個(gè)非常常用的芯片,Xtal speed 及晶振頻率,我選了我用的7.3728MHz。

下面我們來看看我們得到的代碼?!菊f明】:“#”只是為了方便解釋代碼,并非為程序內(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都在icc程序安裝文件夾下一個(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ù)手冊。

#19,TIMSK = 0x00;定時(shí)器設(shè)置,0x00代表不使用定時(shí)器。

#20,與#15對應(yīng),內(nèi)部定義的宏,開中斷。

#21,注釋,所有功能初始化完成。

到此,一個(gè)簡單的程序就看完了,本程序并不能真正運(yùn)行,因?yàn)闆]有main主函數(shù)。進(jìn)一步的學(xué)習(xí)請看

【icc + AVRStudio】下的第一個(gè)程序【一】AVR端口操作說明

一些端口操作的運(yùn)算符總結(jié),我初學(xué)時(shí)總結(jié)出來的東西,端口操作是單片機(jī)操作的基本要素。 以下給出不是完整的程序,只是對端口操作的一些理解。

#include

void main(void)

{

PORTA=0xff; //在定義DDRA之前定義PORTA將影響上拉電阻的使用。 1為使用上拉電阻,0為不使用。

DDRA=0xff; //輸出 模式 ,IO口上,1為輸出,0為輸入。

PORTA=0xf0; //等

PORTA&=~0xf0; //清零

PORTA|=0x77; //置一

PORTA^=0x70; //翻轉(zhuǎn)

(P & 0x80)==0x80; //按位與 判斷p的第七位是否是一,是則成立

}

ADIF就是4 跟手冊的為定義是一樣的

(1<

ADCSR=(1<

ADCSR|=(1<

ADCSR&=~(1<

while(ADCSR&(1<

while(1)

{

while(ADCSR&(1<

{

程序......

}

}

【更多資源】

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉