AVR單片機(jī)系列之-Atmega8A編程入門(mén)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
前言:
最近由于開(kāi)始設(shè)計(jì)無(wú)刷直流電機(jī)電子調(diào)速器,參考網(wǎng)上的一些資料,選用了Atmega8A-AU單片機(jī)作為主控芯片。
該芯片采用8位結(jié)構(gòu),最高主頻16MHz(內(nèi)部振蕩器則8MHz),可實(shí)現(xiàn)2.7V-5.5V供電,單個(gè)IO口最大可支持40mA的拉/灌電流,更難能可貴的是,價(jià)格十分便宜,我在淘寶上面購(gòu)買(mǎi)才3塊多一片。
之前從未使用過(guò)AVR系列的單片機(jī),于是一開(kāi)始編程也遇到了一些障礙,直至最終編寫(xiě)好第一個(gè)程序,整個(gè)過(guò)程在此記錄下來(lái),供以后參考。
一、下載器
首先我在百度上和阿莫論壇里面查詢(xún)了一下AVR單片機(jī)的下載器,然后又在淘寶上面搜索對(duì)應(yīng)的型號(hào),發(fā)現(xiàn)目前國(guó)內(nèi)主流的是ISP串口下載器,也就是和51單片機(jī)的下載器原理一樣。于是乎在淘寶上面花了不到10塊錢(qián)購(gòu)買(mǎi)了一個(gè),鏈接如下:
http://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-5310596272.60.cLIhnZ&id=9726069282
準(zhǔn)確的說(shuō)這只是一個(gè)燒錄器,不具備在線調(diào)試功能,只能把寫(xiě)好的程序燒錄進(jìn)單片機(jī)。
二、代碼開(kāi)發(fā)環(huán)境
一開(kāi)始我在網(wǎng)上搜索的時(shí)候,發(fā)現(xiàn)AVR單片機(jī)的開(kāi)發(fā)環(huán)境琳瑯滿(mǎn)目,比如ICC-AVR,AVR GCC,IAR For AVR,AVR Studio,Atmel Studio......
按照以往的經(jīng)驗(yàn),IAR支持的型號(hào)比較多,用的也比較多,于是我先在網(wǎng)上下載了一個(gè)IAR For AVR,后來(lái)在網(wǎng)上查詢(xún)相關(guān)源代碼,發(fā)現(xiàn)很少有基于IAR的,另外IAR還需要激活,搞了半天也沒(méi)搞好,于是乎又卸載了。
后來(lái)再查詢(xún)的時(shí)候,發(fā)現(xiàn)Atmel公司官方的開(kāi)發(fā)環(huán)境Atmel Studio是免費(fèi)的,而且同時(shí)用的人也不少,于是乎我又下載了一個(gè)Atmel Studio。安裝好后,發(fā)現(xiàn)界面非常友好現(xiàn)代,不像IAR那樣古老,后來(lái)又了解到這個(gè)開(kāi)發(fā)環(huán)境是基于VisualStudio開(kāi)發(fā)的,因此界面與VisualStudio非常相似,于是好感度一下就上升了。
Atmel Studio開(kāi)發(fā)界面?
進(jìn)入軟件界面后的第一個(gè)問(wèn)題是,如何創(chuàng)建第一個(gè)工程:
這個(gè)難不倒我,一般就是File->New->New Project,但是問(wèn)題來(lái)了,一開(kāi)始我建立工程,選擇工程類(lèi)型的時(shí)候,發(fā)現(xiàn)可供選擇的對(duì)象和網(wǎng)上的不一樣,少了好多,于是乎我又重新在官網(wǎng)上面下載了最新的版本,終于出現(xiàn)了網(wǎng)上所述的選項(xiàng):
如上圖所示,選擇GCC C Executable Project即可,然后是選擇器件,選擇我們的Atmega8A即可。
點(diǎn)擊OK后,熟悉的main函數(shù)驟然出現(xiàn)在屏幕上,AtmelStudio已經(jīng)幫你把前期的繁瑣工作都做好了,包括頭文件的引用,頭文件只有一個(gè)#include ,所有AVR單片機(jī)都引用同一個(gè)頭文件,其余開(kāi)發(fā)環(huán)境會(huì)自動(dòng)處理。
下一步是如何編寫(xiě)中斷程序,這個(gè)是參考百度文庫(kù)的《AtmelStudio-6.0簡(jiǎn)易入門(mén)教程(精煉實(shí)用)》:
在AS6中,需加載頭文件#include ,并且函數(shù)名為ISR,不可自定義函數(shù)名,格式如下:
ISR( TIMER0_OVF_vect ) {?} TIMER0_OVF_vect 含義同iv_TIMER0_OVF,是T0溢出中斷號(hào)。不同型號(hào)mcu的中斷向量號(hào)的名稱(chēng)不同,A6的中斷向量號(hào)請(qǐng)從avr/iomXXX.h中查找。
有幾個(gè)事情需要備注一下:1、中斷函數(shù)不需要清除中斷標(biāo)志位,這個(gè)過(guò)程是由硬件實(shí)現(xiàn)的。2、中斷使能有兩個(gè),一個(gè)是全局的asm("sei");//開(kāi)啟全局中斷,一個(gè)是每個(gè)中斷各自的寄存器使能位。
三、程序的下載
程序下載不是在AtmelStudio里面實(shí)現(xiàn)的,因?yàn)槲覀兪褂玫牟皇茿tmel官方的調(diào)試器,因此AtmelStudio在開(kāi)發(fā)過(guò)程中起到的作用是將C語(yǔ)言或匯編源代碼編譯鏈接成bin二進(jìn)制文件,然后使用第三方下載軟件通過(guò)網(wǎng)上購(gòu)買(mǎi)的ISP下載器將二進(jìn)制文件下載進(jìn)去。在這里,我使用淘寶上購(gòu)買(mǎi)的下載器店家推薦的下載軟件-progisp1.72 ,這是由智峰工作室開(kāi)發(fā)的。使用了一段時(shí)間,發(fā)現(xiàn)挺好用的,沒(méi)發(fā)現(xiàn)什么BUG。
這里有一個(gè)東西需要備注一下,就是熔絲位的問(wèn)題,之前用的單片機(jī)從未有過(guò)熔絲位的概念,在網(wǎng)上搜索了一番,發(fā)現(xiàn)所謂熔絲位其實(shí)就相當(dāng)于系統(tǒng)寄存器的功能,熔絲位中存儲(chǔ)著系統(tǒng)最關(guān)鍵的設(shè)置,比如時(shí)鐘來(lái)源選擇,時(shí)鐘頻率選擇等等,只不過(guò)熔絲位是與程序分開(kāi)的,不受程序影響,只能由下載器直接對(duì)單片機(jī)進(jìn)行讀寫(xiě),還好,progisp1.72可以完美的實(shí)現(xiàn)這一功能,并且還有向?qū)J?,免去了查?xún)寄存器手冊(cè)的麻煩。
好像差不多了吧,就這些,有什么想到再補(bǔ)充。