單片機(jī)片上開發(fā)方法(ATmega16為例)_第1頁
單片機(jī)片上開發(fā)方法(ATmega16為例)_第2頁
單片機(jī)片上開發(fā)方法(ATmega16為例)_第3頁
單片機(jī)片上開發(fā)方法(ATmega16為例)_第4頁
單片機(jī)片上開發(fā)方法(ATmega16為例)_第5頁
已閱讀5頁,還剩92頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、2022/7/201單片機(jī)片上開發(fā)方法(ATmega16為例)王 浩98ID: wootE-mail: wanghaoSOC共九十七頁2022/7/202共九十七頁2022/7/203你現(xiàn)在有這些(zhxi)麻煩嗎?我根本不知道怎么把單片機(jī)用在機(jī)器人上我在自學(xué),而且找了書在看,但越看越亂我看了一些方案的實(shí)例,對機(jī)械部分和電路部分有感覺了,但就是不知道他們是怎樣工作的我只會用仿真器,到現(xiàn)在還不知道如何把寫好的程序“燒”進(jìn)一片真實(shí)的單片機(jī)中只要和單片機(jī)有一點(diǎn)關(guān)系的電路我們就不敢設(shè)計(jì),這讓我們在寫方案的過程中阻力很大。我學(xué)過C,但是不會用它寫單片機(jī)的程序我到底(do d)是用匯編還是用C共九十七頁2

2、022/7/204要解決麻煩(m fan),首先假設(shè)你會使用電腦(比如安裝WindowsXP的PC)已經(jīng)學(xué)過或?qū)語言有一定的了解能看得懂一些簡單的電路和元器件符號(fho)充滿激情和渴望,而且有毅力和敢于動手共九十七頁2022/7/205我去電子市場買來一片(y pin)單片機(jī)!我能且只能(zh nn)這樣看著它 數(shù)數(shù)它的腿,瞅瞅它上面的印字!40引腳DIP封裝ATmega16L-8ATmega16-16或共九十七頁2022/7/206從DATASHEET中了解(lioji)更多ATMEL公司為他的所有單片機(jī)產(chǎn)品都提供了一份超級詳細(xì)的datasheet說明書,而且對常用的系列進(jìn)行(jnxng

3、)了中文翻譯,這將是我們接下來進(jìn)行(jnxng)各種實(shí)驗(yàn)環(huán)節(jié)的第一手資料!共九十七頁2022/7/207從DATASHEET中了解(lioji)更多現(xiàn)在(xinzi)很多單片機(jī)內(nèi)部有三種存儲器:FlashEEPROMSRAM/RAM存放程序和靜態(tài)數(shù)據(jù),單片機(jī)在工作過程中一般不能修改一般不會使用,使用時通過特殊的命令讀寫,其特點(diǎn)是掉電不丟失存放變量,特點(diǎn)是掉電丟失共九十七頁2022/7/208其實(shí)(qsh)你還需要很多最起碼(如果想完成這里的最少一個實(shí)驗(yàn)的話),你還需要準(zhǔn)備:一支電烙鐵、電烙鐵架子、一小卷含鉛的0.8mm焊錫和一塊足夠大的萬用焊接電路板一些單芯帶絕緣皮的鍍錫銅導(dǎo)線(doxin)一

4、個40DIP插座和幾根杜邦排針8只1K的電阻和8只LED燈一根AVR的下載線(比如USBASP線)最好還有一個萬用表共九十七頁2022/7/209USBASP下載(xi zi)線CC98上有人(yu rn)在做:8/dispbbs.asp?boardID=251&ID=2351497共九十七頁2022/7/2010下載一個開發(fā)資料(zlio)包(woot整理)AVR_DEV.rar解壓后請關(guān)注論壇(lntn),即時會掛在臨時ftp上并給出連接共九十七頁2022/7/2011做好心理準(zhǔn)備 接下來我們將為mega16單片機(jī)搭建(d jin)一個最基本的電路,可以稱它為一個“最小系統(tǒng)”,這個系統(tǒng)只能

5、向單片機(jī)中下載程序并讓其開始工作,然后我們會按照實(shí)驗(yàn)的順序逐漸增加并完善這個系統(tǒng),并讓它最終成為SLOWLY機(jī)器人的一個標(biāo)準(zhǔn)系統(tǒng)。 在這個過程中,我們會邊講、邊試,不知不覺中學(xué)會使用datasheet,學(xué)會在Windows上開發(fā)平臺的搭建、單片機(jī)C語言編程基礎(chǔ)、程序的下載、延時程序、LED點(diǎn)燈程序、I/O操作、PWM功能、定時器功能、A/D功能等片上功能的使用共九十七頁2022/7/2012ATmega16單片機(jī)的管腳排列(pili)PB0PB1PB2PB3PB4PB5PB6PB7RESETVCCGNDXTAL2XTAL1PD0PD1PD2PD3PD4PD5PD6PA0PA1PA2PA3PA4

6、PA5PA6PA7AREFGNDAVCCPC7PC6PC5PC4PC3PC2PC1PC0PD7ATmega1601020304050607080910111213141516171819204039383736353433323130292827262524232221共九十七頁2022/7/2013從datasheet上快速(kui s)知道管腳定義AVR_DEVdatasheetcn_mega16-16L.pdf的第2頁(P2)共九十七頁2022/7/2014搭建(d jin)ATmega16的“最小系統(tǒng)”(MOSI)PB5(MISO)PB6(SCK)PB7RESETVCCGNDGNDAV

7、CCATmega1601020304050607080910111213141516171819204039383736353433323130292827262524232221USBASP下載頭插座(板子正面)VCCGNDMOSIMISOSCKRESET+5V+5V共九十七頁2022/7/2015建議(jiny)的“最小系統(tǒng)”(MOSI)PB5(MISO)PB6(SCK)PB7RESETVCCGNDXTAL2XTAL1AREFGNDAVCCATmega1601020304050607080910111213141516171819204039383736353433323130292827

8、262524232221USBASP下載(xi zi)頭插座(板子正面)VCCGNDMOSIMISOSCKRESET+5V+5V10422pF22pF8MHz4K7+10uF+5VRESETXTAL2XTAL1100共九十七頁2022/7/2016增加(zngji)8個LED燈用來指示(MOSI)PB5(MISO)PB6(SCK)PB7RESETVCCGNDXTAL2XTAL1AREFGNDAVCCPC7PC6PC5PC4PC3PC2PC1PC0ATmega160102030405060708091011121314151617181920403938373635343332313029282

9、7262524232221USBASP下載(xi zi)頭插座(板子正面)VCCGNDMOSIMISOSCKRESET+5V+5V10422pF22pF8MHz4K7+10uF+5VRESETXTAL2XTAL1LED1K100共九十七頁2022/7/2017實(shí)驗(yàn)(shyn)1:讓8個LED燈閃爍安裝(nzhung)ICC編譯器編寫讓8個LED燈閃爍的程序安裝USBASP下載線驅(qū)動使用USBASP給mega16下載寫好的程序更改mega16的熔絲位共九十七頁2022/7/2018安裝(nzhung)ICC編譯器雙擊AVR_DEVICCAVR7.13CSetup.exe之后的圖片使用ICC6.3

10、1A安裝時的界面,ICC7.13的界面與其(yq)相似共九十七頁2022/7/2019共九十七頁2022/7/2020共九十七頁2022/7/2021共九十七頁2022/7/2022C:iccv7avr共九十七頁2022/7/2023共九十七頁2022/7/2024共九十七頁2022/7/2025共九十七頁2022/7/2026共九十七頁2022/7/2027共九十七頁2022/7/2028安裝(nzhung)ICC編譯器將AVR_DEVICCAVR7.13CICC.exe文件復(fù)制到C:iccv7avrbin目錄(ml)下面。這里是默認(rèn)的目錄,根據(jù)你的安裝情況使用安裝時設(shè)置的目錄。以后,我們可

11、以通過雙擊這個文件運(yùn)行ICC,可不受其30天試用期限制,但僅限于自己學(xué)習(xí),不能用于其它用途!共九十七頁2022/7/2029運(yùn)行(ynxng)ICC使用剛才(gngci)的ICC.exe運(yùn)行ICC7.13共九十七頁2022/7/2030ICC的界面(jimin)共九十七頁2022/7/2031新建一個(y )工程Project New共九十七頁2022/7/2032新建一個(y )工程建議(jiny)先建立一個文件夾,如LED_test共九十七頁2022/7/2033新建一個(y )工程在建立的LED_test文件夾內(nèi)建立LED_文件,如圖點(diǎn)擊(din j)“保存(S)”共九十七頁2022/7

12、/2034共九十七頁2022/7/2035在工程中建立一個(y )LED.c文件File New共九十七頁2022/7/2036共九十七頁2022/7/2037在工程中建立(jinl)一個LED.c文件File Save As共九十七頁2022/7/2038在工程中建立(jinl)一個LED.c文件在剛建立(jinl)的LED_test文件夾內(nèi)保存成LED.c共九十七頁2022/7/2039將LED.c添加(tin ji)到工程中File (右擊)Add File(s)共九十七頁2022/7/2040將LED.c添加(tin ji)到工程中選中剛才建立的LED.c文件(wnjin),打開(O)

13、共九十七頁2022/7/2041將LED.c添加(tin ji)到工程中LED.c就成功(chnggng)添加到LED_project中了共九十七頁2022/7/2042我們將會在這個區(qū)域里用C語言寫一個(y )LED閃爍的程序共九十七頁2022/7/2043在開始(kish)之前設(shè)置ICC,使其配置成為(chngwi)可以開發(fā)ATmega16的編譯器環(huán)境共九十七頁2022/7/2044設(shè)置(shzh)你的ICCProject Options共九十七頁2022/7/2045設(shè)置(shzh)你的ICC如圖在Target標(biāo)簽(bioqin)中的Device Configuration里選擇ATme

14、ga16單片機(jī),點(diǎn)擊OK即可共九十七頁2022/7/2046書寫(shxi)程序程序?qū)粚懙竭@里(zhl),如果你是第一次使用,不妨先把下一頁P(yáng)PT提供的寫好的程序復(fù)制到這里,熟悉一下流程先共九十七頁2022/7/2047寫好的程序(chngx)#include #include#include void InitPorts(void) DDRC = 0 xFF; PORTC = 0 xFF;void delay_us(unsigned int time)do time-; while (time1);void delay_ms(unsigned int time)while(time!=0

15、) delay_us(1000); time-;void main(void) InitPorts(); delay_ms(50); while(1) PORTC = 0 x00; delay_ms(500); PORTC = 0 xFF; delay_ms(500); 共九十七頁2022/7/2048LED燈閃爍程序(chngx)解釋#include /此頭文件包含了ATmega16的口位定義等#include/此頭文件包含了AVR系列通用(tngyng)口位定義等#include /*此頭文件是C語言的標(biāo)準(zhǔn)頭文件,在這里不寫是沒關(guān)系的*/共九十七頁2022/7/2049LED燈閃爍(shn

16、 shu)程序解釋/端口初始化函數(shù)(hnsh)void InitPorts()/*7654 3210*/ DDRC = 0 xFF; /PC口定義為輸出 PORTC = 0 xFF; /PC口置1(也叫“拉高”)/ 1111 1111共九十七頁2022/7/2050LED燈閃爍程序(chngx)解釋/*8MHz晶振下*/微秒級延時函數(shù)(hnsh)void delay_us(unsigned int time)do time-; while (time1);/毫秒級延時函數(shù)void delay_ms(unsigned int time)while(time!=0) delay_us(1000);

17、 time-;共九十七頁2022/7/2051LED燈閃爍(shn shu)程序解釋void main(void)/主程序 InitPorts();/端口初始化 delay_ms(50);/延時一下,保證外部電路穩(wěn)定(wndng) while(1)/進(jìn)入一個死循環(huán) PORTC = 0 x00;/C口的LED燈點(diǎn)亮 delay_ms(500);/延時500ms PORTC = 0 xFF;/C口的LED燈熄滅 delay_ms(500);/延時100ms 共九十七頁2022/7/2052編譯(biny)Build Project共九十七頁2022/7/2053編譯(biny)成功(chnggng

18、)共九十七頁2022/7/2054編譯(biny)后的文件共九十七頁2022/7/2055把程序(chngx)寫入mega16單片機(jī)安裝USBASP下載(xi zi)線驅(qū)動使用USBASP給mega16下載寫好的程序共九十七頁2022/7/2056安裝(nzhung)USBASP下載線驅(qū)動設(shè)置USBASP下載線的跳線跳線說明:+5V: 連接(linji)時將通過USB接口為目標(biāo)板供電。updata: 連接時可以給USBasp進(jìn)行固件升級(一般不使用)。這里我們連接+5,斷開updata+5Vupdata共九十七頁2022/7/2057安裝USBASP下載(xi zi)線驅(qū)動給USBASP插上下

19、載排線黑色插頭有突起的一側(cè)對著板子(bn zi)上有白色方框的這一側(cè)插入共九十七頁2022/7/2058安裝USBASP下載(xi zi)線驅(qū)動先下載USBasp驅(qū)動:可以(ky)在CC98代理處下載8/uploadfile/2008/9/26/2064585665.rar也可以在AVR_DEVprogisp167USB-Drive下找到驅(qū)動不能直接雙擊安裝,先把USBASP下載線插入電腦的USB口共九十七頁2022/7/2059安裝(nzhung)USBASP下載線驅(qū)動電腦顯示屏自動彈出下列提示框,用鼠標(biāo)點(diǎn)擊選擇(xunz)“是,僅這一次(Y)”,然后點(diǎn)擊“下一步(N)” 共九十七頁2022

20、/7/2060安裝(nzhung)USBASP下載線驅(qū)動當(dāng)計(jì)算機(jī)屏幕顯示下列提示框后,點(diǎn)擊選擇(xunz)“從列表或指定位置安裝(高級)(S)”,再點(diǎn)擊“下一步(N)”共九十七頁2022/7/2061安裝USBASP下載(xi zi)線驅(qū)動屏幕出現(xiàn)下列提示框,點(diǎn)擊“瀏覽(R)”選擇USBASP驅(qū)動文件所在(suzi)的文件夾(USBasp-Drive),然后點(diǎn)擊“下一步(N)”共九十七頁2022/7/2062安裝USBASP下載(xi zi)線驅(qū)動共九十七頁2022/7/2063安裝(nzhung)USBASP下載線驅(qū)動共九十七頁2022/7/2064安裝USBASP下載(xi zi)線驅(qū)動共

21、九十七頁2022/7/2065使用(shyng)progisp167下載軟件progisp167 是一個(y )免費(fèi)綠色軟件,就在AVR_DEVprogisp167目錄下雙擊progisp.exe就能運(yùn)行軟件共九十七頁2022/7/2066使用progisp167下載(xi zi)軟件(1)(2)(3)依次選擇(xunz)好如圖設(shè)置ATmega16USBASPusb共九十七頁2022/7/2067注意(zh y)下載線另一頭與單片機(jī)的連接(MOSI)PB5(MISO)PB6(SCK)PB7RESETVCCGNDXTAL2XTAL1AREFGNDAVCCPC7PC6PC5PC4PC3PC2PC1

22、PC0ATmega1601020304050607080910111213141516171819204039383736353433323130292827262524232221USBASP下載(xi zi)頭插座(板子正面)GNDVCCMOSIMISOSCKRESET+5V+5V10422pF22pF8MHz4K7+10uF+5VRESETXTAL2XTAL1LED1K100共九十七頁2022/7/2068使用progisp167下載(xi zi)軟件點(diǎn)擊(din j)“調(diào)入Flash”(4)點(diǎn)擊“打開”共九十七頁2022/7/2069使用progisp167下載(xi zi)軟件設(shè)置好

23、編程方式,然后點(diǎn)擊(din j)“自動”(5)共九十七頁2022/7/2070使用progisp167下載(xi zi)軟件說明程序已經(jīng)(y jing)下載成功了!共九十七頁2022/7/2071為什么會這樣(zhyng)?LED燈閃爍得很慢,好像根本不是(b shi)1秒一次!中間的4個LED燈根本就沒有被點(diǎn)亮過!共九十七頁2022/7/2072設(shè)置(shzh)ATmega16的熔絲位原因(yunyn)很有可能出在“熔絲位”上!共九十七頁2022/7/2073設(shè)置(shzh)ATmega16的熔絲位新手(xnshu)可能根本就看不懂,下面點(diǎn)“向?qū)Х绞健惫簿攀唔?022/7/2074設(shè)置(s

24、hzh)ATmega16的熔絲位鉤選不選不選共九十七頁2022/7/2075設(shè)置(shzh)ATmega16的熔絲位設(shè)置好熔絲位,然后(rnhu)點(diǎn)擊“寫入”如果成功,這里會提示共九十七頁2022/7/2076所有的LED燈都按照1s的節(jié)拍(jipi)閃爍起來!共九十七頁2022/7/2077端口初始化命令(mng lng)DDRA = 0 xF0;對端口A初始化,高4位作為(zuwi)輸出(1),低4位作為輸入(0)注:金黃色字體部分表示可以根據(jù)情況更改共九十七頁2022/7/2078寫端口命令(mng lng)PORTA = 0 x0F;將端口A的8個I/O口寫為0000 1111,0表示

25、(biosh)I/O口拉低,1表示I/O口拉高。注:只有在A口相應(yīng)的I/O口位被定義為輸出時才有實(shí)際作用共九十七頁2022/7/2079寫端口命令(mng lng)P = PINA ;讀出端口A的8個I/O口上的高低電平狀態(tài),1表示(biosh)高電平,0表示低電平,將其賦給P,P是無符號字節(jié)型變量(unsigned char P;)注:只有在A口相應(yīng)的I/O口位被定義為輸入時才有實(shí)際作用共九十七頁2022/7/2080I/O操作應(yīng)用(yngyng)舉例LED指示燈unsigned char P;P = PINB;/B口值給PPORTC = P;/*C口按照(nzho)P的值輸出。*/PB0P

26、B1PB3PB5PB7PB2PB4PB6DDRB = 0 x00;/B口輸入DDRC = 0 xFF;/C口輸出PC7PC6PC5PC4PC3PC2PC1PC0AVR ICC程序共九十七頁2022/7/2081I/O口的一種位操作實(shí)現(xiàn)(shxin)方法/輸出(shch)端口位操作(1為拉高,0為拉低)#define set_bit(x,y)(x|=(1y) /將x端口的第y位設(shè)置成1/*例:*/ set_bit(PORTB,0)#define clr_bit(x,y)(x&=(1y)/將x端口的第y位設(shè)置成0/*例:*/ clr_bit(PORTB,0)共九十七頁2022/7/2082I/O口

27、的一種位操作實(shí)現(xiàn)(shxin)方法/輸入端口位操作(1為高電平,0為低電平)#define get_bit(x,y)(x&(1y) ? 1 : 0)/得到(d do)x端口第y位的數(shù)據(jù)/*例:*/ if(get_bit(PINC,7)=1) program1();共九十七頁2022/7/2083實(shí)驗(yàn)(shyn)2:使用ATmega16的ADC將ATmega16的PA7(ADC7)口與一個(y )光電開關(guān)連接,打開A/D轉(zhuǎn)換,并用LED指示燈指示轉(zhuǎn)換的高八位結(jié)果。共九十七頁2022/7/2084實(shí)驗(yàn)(shyn)2:使用ATmega16的ADC電路連接(在第16張“最小系統(tǒng)(xtng)”基礎(chǔ)上)+

28、5VADC710050056K共九十七頁2022/7/2085與ADC相關(guān)(xinggun)的寄存器Datasheet P7Datasheet P203Datasheet P205共九十七頁2022/7/2086與ADC相關(guān)(xinggun)的寄存器Datasheet P206共九十七頁2022/7/2087ICC程序(chngx)(ADC)完整程序(chngx)見備注void ADC_init(void)/ADC初始化 ADMUX|=(1ADLAR);/ADC結(jié)果左對齊 ADCSRA|=(1ADPS2)|(0ADPS1)|(1ADPS0);/ADC時鐘=clk/32 ADCSRA|=(1AD

29、EN);/ADC使能void ADC_work(void) /8路共需要0.8ms左右 unsigned char i=0; for(i=0;i8;i+) ADMUX&=0 xF0;/第4位清零,事實(shí)上只清低3位就可以了 ADMUX|=i;/選擇ADC通道為ADCi ADCSRA|=(1ADSC);/啟動ADC轉(zhuǎn)換 delay_us(80); adci=ADCH;/讀取本路轉(zhuǎn)換結(jié)果,只讀高8位 共九十七頁2022/7/2088實(shí)驗(yàn)(shyn)3:使用ATmega16的PWM(上)使用ATmega16的PWM對電機(jī)(dinj)進(jìn)行調(diào)速共九十七頁2022/7/2089L298N電機(jī)(dinj)控制

30、電路PB4PB5PB6PB7OC0OC2共九十七頁2022/7/2090L298N真值表(以一個(y )H橋?yàn)槔﹊nput1input2EN_AMOTOR_LXX0靜止101正轉(zhuǎn)011反轉(zhuǎn)001停止111制動共九十七頁2022/7/2091ATmega16與PWM相關(guān)(xinggun)的寄存器Datasheet P7TCCR0OCR0TCCR2OCR2Datasheet P78Datasheet P80Datasheet P119Datasheet P121TCCR1ATCCR1BOCR1AOCR1BDatasheet P102Datasheet P105Datasheet P106Data

31、sheet P106共九十七頁2022/7/2092ICC程序(chngx)(PWM上)void pwm02_init(void)/PWM初始化 /*OC0的PWM初始化*/ TCCR0=0 x00; TCCR0|=(1WGM01)|(1WGM00); /選擇快速PWM方式 TCCR0|=(1COM01)|(0COM00); /PWM左對齊(du q) TCCR0|=(0CS02)|(1CS01)|(1CS00); /clk/64分頻 OCR0=0; /OCR0的值:0255用來控制占空比,初值為0 /*OC2的PWM初始化*/ TCCR2=0 x00; TCCR2|=(1WGM21)|(1WGM20); /選擇快速PWM方式 TCCR2|=(1COM21)|(0COM20); /PWM左對齊 TCCR2|=(0CS22)|(1CS21)|(1CS20); /clk/64分頻 OCR2=0; /OCR2的值:0255用來控制占空比,初值為0完整程序見備注共九十七頁2022/7/2093實(shí)驗(yàn)(shyn

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論