www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 單片機(jī)AVR的編程工具很多,有C,ASM,PASCAL,BASIC等等。除ASM由ATMEL公司免費提供外,其它大多數(shù)的工具都是需要收費的。而C編譯器更是其中收費最高的編譯器。但也有例外,那就是GCC——它不但免費而且

單片機(jī)AVR的編程工具很多,有C,ASM,PASCAL,BASIC等等。除ASM由ATMEL公司免費提供外,其它大多數(shù)的工具都是需要收費的。而C編譯器更是其中收費最高的編譯器。但也有例外,那就是GCC——它不但免費而且功能也幾乎是“最強(qiáng)”的。所以我作為入門者,就開始學(xué)習(xí)它了!

一、 單片機(jī) 編程

1、 單片機(jī) 與電腦的編程有些許不同,它除一些必要地算法外,更重要的是對端口的操作。如開關(guān)量

采集、開關(guān)量控制輸出、模擬量的輸入、通訊的操作、顯示器與鍵的控制等等都需要操作端口。
2、 電腦存儲永久數(shù)據(jù)一般都在硬盤等介質(zhì)中。而 單片機(jī) 則存放在EPROM、EEPROM、FLASH等存儲器中。
3、 通訊接口的編程對 單片機(jī) 來說是至關(guān)重要的,特別在工控、網(wǎng)絡(luò)等的應(yīng)用中猶為重要。
4、 單片機(jī) 的編程與電腦編程相比有諸多限制。這就要求編程者對單片機(jī)硬件有一定的了解。


二、 AVR 單片機(jī) 編程

1、 AVR單片的硬件:我們以ATMega 16為例為說明一下AVR 單片機(jī) 吧!

這是ATMEGA 16的引腳及其功能圖(來自其DataSheet)

A、 從圖中我們可以看出有4個8位端口共32個引腳,大多有雙重功能。它們分別命名為PORTA、PORTB、PORTC、PORTD。

B、 PORTA具備普通IO口功能外還有AD轉(zhuǎn)換功能,其精度可以達(dá)到10位,即采集到的ADC的值最大不超過1023(0-1023),對應(yīng)外面實際電壓值的精度需要一定的簡單換算(主要看其參考電壓)。如參考電壓為2.5V,則有2.5V為1023,則其精度為2.5V/1023就是0.00244V。如參考電壓為5V,則有5V/1023也就是0.0049V。

C、 PORTB口除了基本的IO功能外,特別要提的是PB4、5、6、7的功能,它是SPI(同步串行接口),更重要的是,它可以用來下載程序。


D、 其它的暫且不說,必竟不是AVR 單片機(jī) 的介紹文章嘛。

2、 AVR 單片機(jī) 的軟件:

軟件當(dāng)然是用來控控制這些接口的運作及其代表的含義的。這也是個非常大的問題,如果你一點都不懂軟件,請也找本計算機(jī)編程的書看看吧。

三、 開始AVRGCC編程吧

好了,下面我們來看一個簡單的程序吧。

在WinAVR的Programmer NotePad 2中的圖:

圖2

執(zhí)行Make All后,生成HEX文件(本例中的文件名2.HEX)。以下是它的全過程。


> "make.exe" all

-------- begin --------
avr-gcc (GCC) 3.4.1 //告知avr-gcc的版本號
Copyright (C)2004 FreeSOFtware Foundation,Inc. //編譯器所屬于公司及其版權(quán)信息
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

//這是ELF文件的一些信息,ELF文件用于調(diào)試。
Size before: //轉(zhuǎn)換前的ELF文件信息
2.elf :
section size addr
.text 208 0
.data 0 8388704
.bss 0 8388704
.noinit 0 8388704
.eeprom 0 8454144
.stab 780 0
.stabstr 1469 0
Total 2457

Converting to AVR Extended COFF: 2.cof//將ELF文件轉(zhuǎn)換成AVR Studio能夠接受的格式
avr-objcopy --debugging --change-section-address .data-0x800000 --change-section-address .bss-0x800000 --change-section-address .noinit-0x800000 --change-section-address .eeprom-0x810000 -O coff-ext-avr 2.elf 2.cof
DiscardingLOCal symbol outside any compilation unit: .do_copy_data_start
Discarding local symbol outside any compilation unit: .do_copy_data_loop
Discarding local symbol outside any compilation unit: .do_clear_bss_start
Discarding local symbol outside any compilation unit: .do_clear_bss_loop

Size after: //轉(zhuǎn)換后的文件信息。
2.elf :
section size addr
.text 208 0
.data 0 8388704
.bss 0 8388704
.noinit 0 8388704
.eeprom 0 8454144
.stab 780 0
.stabstr 1469 0
Total 2457

Errors: none //編譯過程中產(chǎn)生的錯誤數(shù)
-------- end -------- //編譯結(jié)束

> Process Exit Code: 0 //avr-gcc結(jié)束信息,0表示正常結(jié)束

接下來用AVRISP程序?qū)?.hex文件下載后AVR 單片機(jī) 中,觀看效果。(可以考慮買個雙龍的試驗器SL_AVRAD)。

下面我們來看看avr-gcc的IDE吧。

主窗口(圖3)

這是非常標(biāo)準(zhǔn)的WindowsStyle窗口。當(dāng)然它由于不是專為avr-gcc設(shè)計,所以對它進(jìn)行設(shè)置是必不可少的!下面我就來設(shè)置它,以使它成為我們好用的工具吧。(呵呵!可千萬別小看它哦)

在設(shè)置它之前讓我們來看看,我們希望是一個怎樣的工具吧。參照其它軟件的IDE。

首先,我們得有個工程(項目)管理器,這點PN已有,不需我們?nèi)ピO(shè)它。

其次,得方便我們編輯源代碼,最好是有關(guān)鍵字(代碼)高度顯示,以方便我們識別它們。如果能再給我們實時的一些提示就更好了!這方便PN做得非常很好(有人說SI很好,不過我覺得每個人有每個人的習(xí)慣,不必強(qiáng)求)。

再次,我們得在不離開IDE的情況下,編輯C語言的makefile文件。生成我“目標(biāo)代碼”(計算機(jī)中術(shù)語的話叫可執(zhí)行文件),并且,下載到我們 單片機(jī) 中。

好了!來看看我們對它的設(shè)置吧!

1、代碼高亮設(shè)置將它設(shè)置成你習(xí)慣的模式。步驟如下:打開PN菜單Tools->Options,在Options對話框中選擇Style->Schemes,你說看到了如圖4、5、6所示的內(nèi)容了。現(xiàn)在開始你的設(shè)置吧。

代碼高亮設(shè)置1-預(yù)編譯(圖4)

代碼高亮設(shè)置2-操作符(如+-*/括號等)(圖5)

代碼高亮設(shè)置3-數(shù)字(圖6)

別小看這點小功能啊,它能幫你找到不少編程錯誤哦(圖7)

想將代碼打印出來嗎,有幫助的?。▓D8)

其它高亮設(shè)置同上請大家自已動手吧!一定要按自己的習(xí)慣哦。

3、 設(shè)置PN中的菜單“新建”和工具欄圖標(biāo) ,點擊它新建文件時的文件缺省類型。我們當(dāng)然希望是C類型文件啦,如下圖:

定義新建缺省的文件類型(圖9)

4、 下面開始設(shè)置的我們的avr-gcc工具菜單吧!

C語文的Make工具設(shè)定(圖10): 精心的設(shè)置可以讓你的PN,不必其它工具差哦。

5、 C語言Makefile對于初學(xué)者來說太難了,根本不知道它是干嘛的,怎么工作(說的有點夸張)及怎么編寫。幸好WinAVR提供給了我們一個非常好用的工具mfile。下面就將它集成到我們的PN中來吧!

Makefile工具在PN中的設(shè)定(圖11)(注意本工具設(shè)置為特殊設(shè)置)

Makefile的設(shè)置是將C:WinAVRbin下的wish84.exe、tcl84.dll、tk84.dll三個文件復(fù)制到C:WinAVRmfile目錄下。并用PN打開C:WinAVRmfilemfile.tcl。修改成下圖所示

修改mfile.tcl為圖中選中的部分并保存(圖12)

6、 設(shè)置ISP Programmer工具

ISP串行下載器的設(shè)置(圖13)

按下F4后運行的結(jié)果(圖14)

7、 到現(xiàn)在,我想你對PN有了一些了解了吧??纯聪旅鎺讉€圖吧!

幾個快捷鍵及其對應(yīng)工具的設(shè)置(圖15)它們用著實在是方便啊

Makefile執(zhí)行后的圖(圖16)

這是PN對大項目、大工程管理的超強(qiáng)部分了(圖17)

到此,Programmer NotePad 設(shè)置完成。

四、 Avr-gcc簡易入門

1、 對端口的操作:

A、 如果我想將PORTB端口設(shè)置為輸出口(8位),則在gcc中用如下方式

DDRB=0xFF; 注意:0xFF=0B1111 1111表示全為1,代表了輸出。如果你改上式為:
DDRB=0x01; //即0B0000 0001,則表示,你將PORTB的第0位(PB0)設(shè)置為輸出,其它PB1-7為輸入。
DDRB為AVR的端口設(shè)置寄存器。

B、 從端口PORTB中讀入狀態(tài),用如下方式:

Unsigned Char a=PINB; //讀入端口PORTB的狀態(tài)。若端口PORTB的狀態(tài)如下:

PB0為高電平1
PB1為低電平 0
PB2為高電平 1
PB3為高電平 1
PB4為高電平 1
PB5為低電平 0
PB6為低電平 0
PB7為高電平 1

則有a = 0b1001 1101 = 0x9D

C、 向端口PORTB寫狀態(tài)(設(shè)置狀態(tài)):若要裝PORTB第0位和第2位置1(高電平)。

DDRB=0;//PORTB全部為輸出。
PORTB=0x03; //0b0000 0101

D、 而更多的情況,我們是要將端口的某一位改變狀態(tài),而不是對整個端口操作?;蛑幌胫蓝丝诘哪骋晃坏臓顟B(tài)如何的?那么如何來做呢?

例如:
將PB4置1,PORTB=PORTB | 0x10; //0x10=0b0001 0000
將PB4置0,PORTB=PORTB & 0xEF; //0xEF=0b1110 1111
將PB4置翻轉(zhuǎn),PORTB=PORTB^0x10; //0x10=0001 0000
檢驗PB4的狀態(tài),char a=PINB & 0x10; //如果PB4為1,是a>0,否則a=0
當(dāng)然,上面寫法對C語言來說,簡直就是垃圾代碼了。C語言有它自己的方式,
例如:
PORTB |= 0x10;
PORTB &= 0xEF;
PORTB ^=0x10;
If (PINB & 0x10){ 你的語句; }
是否感覺到比較簡潔???!

E、 當(dāng)然avr-gcc也提供了兩個函數(shù)對操作位,如:sbi (PORTB,4); cbi (PORTB,4);分別將PB4置1和清零。

2、 變量的類型

char
unsigned char
short
unsigned short
int
unsigned int
long
unsigned long
long long
unsigned long long
float
double
void

等等等等,這就請讀者自己看資料了。

3、 程序控制語句,C語言提供了非常豐富的程序流程控制語句。

i. 循環(huán)語句

A、 For(;;)語句,如:

for(i=0;i<8;i++){
循環(huán)體;
} //本例循環(huán)8次。
注意!for語句是先比較后加減的。

B、 While(exp)語句,如:

i=0; While(i<8){
循環(huán)體;
i++;
} //本例循環(huán)8次。也是先比較后執(zhí)行循環(huán)體的。

C、 Do while語句,如:

i=0;
do{
i++;
循環(huán)體;
}while(x<8);
//本例循環(huán)7次,因為它是先執(zhí)行后比較的語句。因為i++在第一次比較時i已經(jīng)是1了。

ii. 分支語句。

A、 if語句,大名鼎鼎語句了,幾乎所有編程軟件都有它的身影。沒什么好說的。

B、 switch語句。等

好了,這些就不說下去了,因為如果你連這些都不清楚。你該做的是找本C教程吧。

4、 中斷服務(wù)控制(SIGNAL)

voidUART_Init(void){ //中斷初始化函數(shù)//
UART_Ready = 1;
UART_ReceivedChar = 0;
pUART_Buffer = 0;
outp(BV(RXCIE)|BV(RXEN),UCR); // 允許串行接收中斷 //
outp( (u08)UART_BAUD_SELECT, UBRR); // 設(shè)置UART波特率 //
sei(); // 打開全局中斷 //
}

SIGNAL(SIG_UART_RECV){ //串口接收完

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

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(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ā)耗時1.5...

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

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

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

8月30日消息,據(jù)媒體報道,騰訊和網(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)星通信

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

關(guān)鍵字: 通信 BSP 電信運營商 數(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)閉