娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年03月02日(星期日)

2020年03月02日 | AVR C語言開發簡介

發布者:傳郵萬里 來源: eefocus關鍵字:AVR  C語言  開發簡介 手機看文章 掃描二維碼
隨時隨地手機看文章

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


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


本站所有程序都是在icc+avrstudio下進行的,如果你沒有配置好環境


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


非常好用的 icc application builder

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

icc的程序生成器

2.jpg

進入該界面后,我更改設置,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  C語言  開發簡介 引用地址:AVR C語言開發簡介

上一篇:第一頁
下一篇:基于AVR的家庭語音控制器的軟硬件實現

推薦閱讀

  2月26日,世界移動通信大會MWC在巴塞羅那開幕,百度創始人李彥宏于中興展臺現身,引發了業界關注。外界對此紛紛猜想,百度AI或將與中興結緣,共謀發展。下面就隨網絡通信小編一起來了解一下相關內容吧。  事實上,對百度來說,這樣的猜測不無道理。  從去年開始,百度與通信企業接連達成重要合作:小米、百度在小米首屆IOT開發者大會上宣布達成戰...
據外媒報道,神經網絡和深度學習可從數據中學習,并根據學習做出決策,代表了機器學習技術的下一個發展方向。總部位于圣地亞哥(San Diego)的一家初創公司Kelzal宣布推出“超低功耗和超快感知設備”(Ultra-Low Power and Ultra-Fast Perception Appliances)的新產品線規劃。目前,Kelzal正參與研發基于第三代神經網絡和視覺傳感器的技術。Kelzal...
STM8的SPI還是挺好用的,也挺簡單,起碼相比于I2C來說是的。最近因為要調試NRF905,所以就用到了STM8的SPI。因為調試過程中沒有遇到什么大的問題,所以在此只對STM8的SPI作簡單的介紹。博主只使用了STM8作為主設備的雙線單向數據模式,并且沒有使用CRC。在使用STM8的SPI時首先需要確認——1.主從關系,并且確認是否使用STM8上的NSS引腳作為主從判據2.SPI時...
1寫在前面Options for node即節點選項,而node節點位于Project工程的下一級。本文講述的工程節點選項配置,即菜單Project -> Options下Options for node各選項的配置,如下圖:由于節點選項較多,我將其分為工程節點選項配置(一)和工程節點選項配置(二)兩篇文章來講述。為了方便大家平時公交、地鐵、外出辦事也能用手機隨時隨地查看該教程,本文...

史海拾趣

問答坊 | AI 解惑

變頻器的選擇

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 編輯 變頻器不是在任何情況下都能正常使用,因此用戶有必要對負載、環境要求和變頻器有更多了解 1.負載類型和變頻器的選擇: 電動機所帶動的負載不一樣,對變頻器的要求也不一樣。 A ...…

查看全部問答∨

我們這些人——電子工程師

電子工程師,一群充滿智慧與理性的男人,他們采用邏輯的思維方式,然而他們過的生活卻毫無邏輯:起得比雞早,睡得比小姐還晚,吃飯幾乎毫無規律老犯胃病,大腦高度地運轉,眼睛老盯著屏幕大受傷害,還經常面對老板和客戶上來的壓力……    ...…

查看全部問答∨

系統NK下載到NANDFLASH中是否需要解壓縮???

請問各位大仙: 我把40M的NK下載到NANDFLASH中,在NANDFLASH存儲NK的空間是不是也是40M,還是需要比40M更大的空間? 也就是想說40M的NK在NANDFLASH中是不是需要解壓縮,需要占到多少空間?…

查看全部問答∨

關于uC/OS-II下外部中斷運行不正確的問題

大家好,我最近在寫一個ZLG7290、12864和ARM7 LPC2138實現鍵盤輸入和顯示的功能,這個模塊使整個系統的基礎,但是現在有一個問題把我卡住了,就是在ZLG7290的INT引腳與LPC2138的外部中斷0(P0.16)口連接以實現鍵盤中斷時,出線中斷無法正確實現,現 ...…

查看全部問答∨

關于datagrid顯示的問題

各位高手請看下面程序: 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       簡單要求:      ...…

查看全部問答∨

PPC里那個“便簽”,就是notes.exe,WinCE 5里有沒有???

需要在CE5上實現PPC的“便簽”功能 或者是相同功能的源碼也行…

查看全部問答∨

LED失效分析方法,6種LED失效分析方法淺談

replyreload += \',\' + 701810;Timson,如果您要查看本帖隱藏內容請回復重復的試驗,再做半破壞性、不可重復的試驗,最后進行破壞性試驗的原則。采用合適的分析方法,最大限度地防止把被分析器件(DUA)的真正失效因素、跡象丟失或引入新的失效因素 ...…

查看全部問答∨

有個wm程序請幫忙編譯

大家好,我使用一個叫OffScreen的關屏軟件,在wm手機上使用,默認是按鍵超過1秒鐘后打開屏幕,想請論壇里哪位高人幫忙編譯下這個軟件,可以將時間設定為比較短時間,也就是快速按一下按鍵就可以打開。多謝!!…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 仙桃市| 利川市| 哈密市| 黔南| 繁峙县| 永州市| 沙河市| 鄂尔多斯市| 扬州市| 平武县| 鸡泽县| 儋州市| 改则县| 彭州市| 桦甸市| 安多县| 望江县| 吴忠市| 凭祥市| 平陆县| 松潘县| 荣成市| 阳高县| 云梦县| 安康市| 通河县| 莒南县| 礼泉县| 洮南市| 明光市| 宁阳县| 荥阳市| 永福县| 元江| 阳城县| 泽州县| 抚宁县| 上犹县| 江北区| 沅江市| 南溪县|