Avr單片機和其他單片機一樣,有自己的指令和寄存器,特定的IO口操作方法,有定時器,AD轉換,串行口,PWM輸出,EEPROM等。為了縮短大家學習的時間,快速的了解avr編程思路,擬定avr程序設計系列教程。我使用avr也不是很長時間,技術有限,錯誤再所難免,還請指出,以期改正。
【說明】:本頁是針對從來沒有碰過單片機或者用過單片機而沒有用c語言的朋友,如果你已經用過其他單片機,此頁說明可能對你沒有很大幫助,且顯得有些幼稚,請你跳過。
本站所有程序都是在icc+avrstudio下進行的,如果你沒有配置好環境
采用icc的原因之一是它自帶一個非常好用的application builder,生成的代碼結構清晰,層次清楚,特別適合新手,如下圖。
非常好用的 icc application builder
下面通過一個簡單的程序,分析avr程序要素,使用icc的程序生成器,Application Builder 界面如下:
icc的程序生成器
進入該界面后,我更改設置,Target CPU,及目標芯片設置位mega16這個非常常用的芯片,Xtal speed 及晶振頻率,我選了我用的7.3728MHz。
下面我們來看看我們得到的代碼。【說明】:“#”只是為了方便解釋代碼,并非為程序內容。
#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,生成時間,CPU類型,晶振大小,在本例中晶振大小沒有用途,但在實際操作中,晶振大小將影響定時器的設置,PWM波形的輸出,串口波特率的設定,總線時序等多方面的問題。
#4——#5,包含特定頭文件,學過c語言的人都知道,c語言里幾乎每個程序都要包含特定的頭文件,在這里,iom16v.h和macros.h都在icc程序安裝文件夾下一個include的目錄中,iom16v.h和你選擇的芯片相對應,如果你選擇的是atmega32,那個這個文件就是iom32v.h,等等,在這樣的文件中定義了對應的芯片的各個硬件地址。macros.h文件中定義了一些宏命令和一些老的語言寫法。通常每一個程序都要包含這個頭文件。
#6 void port_init(void),定義函數port_init,函數的用途是初始化串口,前面一個void表示函數沒有輸出,括號里的void表示這個函數沒有輸入變量。
#7,#10 C語言中所有函數體都要寫在{}內,一個開始,一個結束。
#8,定義PA口為0x00,及PA口上的所有管腳輸出為低電平,同樣道理,如果些微PORTA=0xFF,則都輸入高電平,0xFF及二進制的11111111,如果想讓某一位輸出高,其他為低,如00000001,則是PA0輸出為高電平,PA1——PA7輸出為低電平。說明:每個口線與單片機實際引腳的對應關系請參看技術手冊。
#9,定義引腳的輸出輸入模式,1為輸出,0為輸入。當使用輸出模式及設置為1時,PORTA的值將影響內部上拉電阻的使用,如果PORTA對應管腳的值為1,則使用內部上拉電阻,否則不采用。 除了這里說的“=”之外,管腳的控制還有其他算符,|= ,&=! ,^=,==,請參考學習筆記:avr端口操作的例子理解,將在本頁后面部分說明。
同理,下面部分為BCD口的操作。
#11,注釋,說明你可以使用下面的程序來實現初始化。
#13,程序的開始和結束。
#15,內部定義的宏,關閉所有中斷。
#16,調用端口初始化的程序。
#17,MCUCR = 0x00;電源管理及睡眠模式寄存器設置,這里設為0x00,為空閑模式,更多內容,請參看atmega16技術手冊。
#18,GICR = 0x00;通用中斷控制寄存器設置,0x00,代表禁用任何中斷,更多內容請參考技術手冊。
#19,TIMSK = 0x00;定時器設置,0x00代表不使用定時器。
#20,與#15對應,內部定義的宏,開中斷。
#21,注釋,所有功能初始化完成。
到此,一個簡單的程序就看完了,本程序并不能真正運行,因為沒有main主函數。進一步的學習請看
【icc + AVRStudio】下的第一個程序【一】AVR端口操作說明
一些端口操作的運算符總結,我初學時總結出來的東西,端口操作是單片機操作的基本要素。 以下給出不是完整的程序,只是對端口操作的一些理解。
#include
void main(void)
{
PORTA=0xff; //在定義DDRA之前定義PORTA將影響上拉電阻的使用。 1為使用上拉電阻,0為不使用。
DDRA=0xff; //輸出 模式 ,IO口上,1為輸出,0為輸入。
PORTA=0xf0; //等
PORTA&=~0xf0; //清零
PORTA|=0x77; //置一
PORTA^=0x70; //翻轉
(P & 0x80)==0x80; //按位與 判斷p的第七位是否是一,是則成立
}
ADIF就是4 跟手冊的為定義是一樣的
(1<
ADCSR=(1<
ADCSR|=(1<
ADCSR&=~(1<
while(ADCSR&(1<
while(1)
{
while(ADCSR&(1<
{
程序......
}
}
上一篇:第一頁
下一篇:基于AVR的家庭語音控制器的軟硬件實現
推薦閱讀
史海拾趣
Gulf Semiconductor在電子行業中的五個發展故事
故事一:進入中國市場與本地化生產
Gulf Semiconductor(海灣電子)自1987年起便踏入中國市場,成為較早一批在中國設立生產基地的國際化整流二極管制造商。公司迅速適應了中國市場的需求,并建立了完善的管理體系,通過了ISO14001:2004、ISO9001:2000、ISO/TS 16949:2002等質量及環境管理體系認證。這一舉措不僅提升了產品質量,還增強了客戶信心,使Gulf Semiconductor在照明、電源、消費類電子等領域迅速占據一席之地。通過本地化生產,公司有效降低了成本,提高了競爭力,并成功吸引了如Samsung、LG、Philips等國際知名企業的合作。
故事二:技術創新與產品升級
Gulf Semiconductor始終將技術創新視為企業發展的核心動力。公司不斷投入研發,掌握了先進的光阻玻璃燒結、特制的SIPOS工藝等多種工藝技術,這些技術使得公司產品在高壓、高溫等極端環境下依然能夠保持高可靠性。特別是公司主推的GP類產品(玻融鈍化整流器),憑借其出色的性能,獲得了眾多國際客戶的全面認證和使用。此外,公司還積極開發世界著名整流器制造商的替用產品,產品性能可達到原廠的同等水平,進一步提升了市場競爭力。
故事三:客戶服務與售后支持
Gulf Semiconductor深知客戶滿意是企業發展的關鍵。公司建立了完善的客戶服務體系,為客戶提供從產品設計、試產到批量投產的全程支持。在產品應用過程中,一旦出現個別產品缺陷或失效,公司能夠迅速響應,分析問題原因,并采取糾正及預防措施,確保客戶利益最大化。這種以客戶為中心的服務理念,贏得了廣大客戶的信任和好評。
故事四:市場拓展與國際合作
隨著全球電子行業的快速發展,Gulf Semiconductor不斷拓寬市場領域,積極與國際知名企業建立合作關系。公司通過參加國際展會、舉辦技術交流會等方式,向世界展示其先進的技術和產品。同時,公司還加強與國際同行的交流與合作,共同推動電子行業的發展。這些努力不僅提升了Gulf Semiconductor在國際市場的知名度,還為其帶來了更多的商業機會。
故事五:可持續發展與環保理念
作為一家負責任的企業,Gulf Semiconductor始終將可持續發展和環保理念貫穿于生產經營的全過程。公司積極采用節能減排技術,減少碳排放,并致力于綠色生產。此外,公司還積極參與社會公益活動,為環保事業貢獻自己的力量。這些舉措不僅提升了公司的社會形象,還為其贏得了更多消費者的青睞。在未來,Gulf Semiconductor將繼續堅持可持續發展和環保理念,為推動電子行業的綠色發展貢獻更多力量。
重慶平洋電子有限公司,自其1998年3月創立之初,便扎根于重慶這片熱土,開始了其在電子行業的探索之旅。當時,電子行業正處于快速發展的階段,市場競爭激烈。然而,公司憑借對市場的敏銳洞察和對技術的執著追求,成功研發出多款電子元器件,逐漸在市場中站穩腳跟。
近年來,Fairchild公司在全球范圍內與眾多知名企業建立了合作關系。其中,與華為的合作尤為引人注目。華為作為全球領先的通信設備制造商,對供應商的要求極為嚴格。然而,Fairchild公司憑借其出色的產品質量、客戶支持和公司間的成功合作,從眾多供應商中脫穎而出,成為華為的核心合作伙伴之一。華為對Fairchild公司的認可不僅體現在訂單量的增加上,還體現在對其產品和服務的高度評價上。
在快速發展的同時,CLC也關注環保和可持續發展。他們采用環保材料和生產工藝,減少對環境的影響。同時,他們還積極推動循環利用和廢物減量化措施,努力實現綠色生產。這些努力不僅提升了品牌形象,也為公司的長期發展奠定了基礎。
CLC起源于一個對高質量手工皮革制品有著無限熱情的小型工坊。創始人是一位經驗豐富的皮革工匠,他看到了電子工程師和戶外工作者對耐用、實用的工具包的需求。于是,他開始了自己的創業之路,以“定制皮革工藝”為核心理念,承諾每一件產品都經過精心制作和嚴格質檢。憑借這份承諾和精湛的技藝,CLC逐漸在市場中贏得了口碑。
電子工程師,一群充滿智慧與理性的男人,他們采用邏輯的思維方式,然而他們過的生活卻毫無邏輯:起得比雞早,睡得比小姐還晚,吃飯幾乎毫無規律老犯胃病,大腦高度地運轉,眼睛老盯著屏幕大受傷害,還經常面對老板和客戶上來的壓力……   ...… 查看全部問答∨ |
|
請問各位大仙: 我把40M的NK下載到NANDFLASH中,在NANDFLASH存儲NK的空間是不是也是40M,還是需要比40M更大的空間? 也就是想說40M的NK在NANDFLASH中是不是需要解壓縮,需要占到多少空間?… 查看全部問答∨ |
大家好,我最近在寫一個ZLG7290、12864和ARM7 LPC2138實現鍵盤輸入和顯示的功能,這個模塊使整個系統的基礎,但是現在有一個問題把我卡住了,就是在ZLG7290的INT引腳與LPC2138的外部中斷0(P0.16)口連接以實現鍵盤中斷時,出線中斷無法正確實現,現 ...… 查看全部問答∨ |
各位高手請看下面程序: Dim ds As New DataSet Dim Ada As SqlCeDataAdapter Dim connString As String = "Data Source =\\存儲卡\\rggl\\data\\biaozhun.sdf ...… 查看全部問答∨ |
低價轉讓:自用99成新嵌入式板卡\液晶屏\觸摸屏,嵌入式學習必備 以前作WINCE研發時用的,研華的PCM-3350,PCM-3643,PCM-3312板各一塊,附件齊全; 三星LT121S4-105液晶屏一塊,OneTouch觸摸屏一塊,微型前換紙熱敏打印機一個 手中閑置,拿來轉讓,是學習與研究嵌入式Windows CE或Linux開發的最佳實踐工具,也可以用于工 ...… 查看全部問答∨ |
因公司海外市場發展,現高薪誠聘稱重技術研發人員4名.如有意或你身邊有這樣的朋友,請發簡歷至LianXiang@139.com或我的QQ郵箱:395847456@qq.com.也歡迎隨時打我的電話:13632940145謝先生 MSN:2008longxin@live.cn 簡單要求: ...… 查看全部問答∨ |
|
replyreload += \',\' + 701810;Timson,如果您要查看本帖隱藏內容請回復重復的試驗,再做半破壞性、不可重復的試驗,最后進行破壞性試驗的原則。采用合適的分析方法,最大限度地防止把被分析器件(DUA)的真正失效因素、跡象丟失或引入新的失效因素 ...… 查看全部問答∨ |
大家好,我使用一個叫OffScreen的關屏軟件,在wm手機上使用,默認是按鍵超過1秒鐘后打開屏幕,想請論壇里哪位高人幫忙編譯下這個軟件,可以將時間設定為比較短時間,也就是快速按一下按鍵就可以打開。多謝!!… 查看全部問答∨ |