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

下載本文檔

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

文檔簡(jiǎn)介

2023/2/51單片機(jī)片上開(kāi)發(fā)方法

(ATmega16為例)王浩98ID:wootE-mail:wanghao@SOC2023/2/522023/2/53你現(xiàn)在有這些麻煩嗎?我根本不知道怎么把單片機(jī)用在機(jī)器人上我在自學(xué),而且找了書(shū)在看,但越看越亂我看了一些方案的實(shí)例,對(duì)機(jī)械部分和電路部分有感覺(jué)了,但就是不知道他們是怎樣工作的我只會(huì)用仿真器,到現(xiàn)在還不知道如何把寫(xiě)好的程序“燒”進(jìn)一片真實(shí)的單片機(jī)中只要和單片機(jī)有一點(diǎn)關(guān)系的電路我們就不敢設(shè)計(jì),這讓我們?cè)趯?xiě)方案的過(guò)程中阻力很大。我學(xué)過(guò)C,但是不會(huì)用它寫(xiě)單片機(jī)的程序我到底是用匯編還是用C……2023/2/54要解決麻煩,首先假設(shè)你……會(huì)使用電腦(比如安裝WindowsXP的PC)已經(jīng)學(xué)過(guò)或?qū)語(yǔ)言有一定的了解能看得懂一些簡(jiǎn)單的電路和元器件符號(hào)充滿激情和渴望,而且有毅力和敢于動(dòng)手2023/2/55我去電子市場(chǎng)買(mǎi)來(lái)一片單片機(jī)!我能且只能這樣看著它——

數(shù)數(shù)它的腿,瞅瞅它上面的印字!40引腳DIP封裝ATmega16L-8ATmega16-16或2023/2/56從DATASHEET中了解更多ATMEL公司為他的所有單片機(jī)產(chǎn)品都提供了一份超級(jí)詳細(xì)的datasheet說(shuō)明書(shū),而且對(duì)常用的系列進(jìn)行了中文翻譯,這將是我們接下來(lái)進(jìn)行各種實(shí)驗(yàn)環(huán)節(jié)的第一手資料!2023/2/57從DATASHEET中了解更多現(xiàn)在很多單片機(jī)內(nèi)部有三種存儲(chǔ)器:FlashEEPROMSRAM/RAM存放程序和靜態(tài)數(shù)據(jù),單片機(jī)在工作過(guò)程中一般不能修改一般不會(huì)使用,使用時(shí)通過(guò)特殊的命令讀寫(xiě),其特點(diǎn)是掉電不丟失存放變量,特點(diǎn)是掉電丟失2023/2/58其實(shí)你還需要很多……最起碼(如果想完成這里的最少一個(gè)實(shí)驗(yàn)的話),你還需要準(zhǔn)備:一支電烙鐵、電烙鐵架子、一小卷含鉛的0.8mm焊錫和一塊足夠大的萬(wàn)用焊接電路板一些單芯帶絕緣皮的鍍錫銅導(dǎo)線一個(gè)40DIP插座和幾根杜邦排針8只1K的電阻和8只LED燈一根AVR的下載線(比如USBASP線)最好還有一個(gè)萬(wàn)用表2023/2/59USBASP下載線CC98上有人在做:8/dispbbs.asp?boardID=251&ID=23514972023/2/510下載一個(gè)開(kāi)發(fā)資料包(woot整理)AVR_DEV.rar解壓后請(qǐng)關(guān)注論壇,即時(shí)會(huì)掛在臨時(shí)ftp上并給出連接2023/2/511做好心理準(zhǔn)備

接下來(lái)我們將為mega16單片機(jī)搭建一個(gè)最基本的電路,可以稱(chēng)它為一個(gè)“最小系統(tǒng)”,這個(gè)系統(tǒng)只能向單片機(jī)中下載程序并讓其開(kāi)始工作,然后我們會(huì)按照實(shí)驗(yàn)的順序逐漸增加并完善這個(gè)系統(tǒng),并讓它最終成為SLOWLY機(jī)器人的一個(gè)標(biāo)準(zhǔn)系統(tǒng)。在這個(gè)過(guò)程中,我們會(huì)邊講、邊試,不知不覺(jué)中學(xué)會(huì)使用datasheet,學(xué)會(huì)在Windows上開(kāi)發(fā)平臺(tái)的搭建、單片機(jī)C語(yǔ)言編程基礎(chǔ)、程序的下載、延時(shí)程序、LED點(diǎn)燈程序、I/O操作、PWM功能、定時(shí)器功能、A/D功能等片上功能的使用……2023/2/512ATmega16單片機(jī)的管腳排列PB0PB1PB2PB3PB4PB5PB6PB7RESETVCCGNDXTAL2XTAL1PD0PD1PD2PD3PD4PD5PD6PA0PA1PA2PA3PA4PA5PA6PA7AREFGNDAVCCPC7PC6PC5PC4PC3PC2PC1PC0PD7ATmega16010203040506070809101112131415161718192040393837363534333231302928272625242322212023/2/513從datasheet上快速知道管腳定義AVR_DEV\datasheet\cn_mega16-16L.pdf的第2頁(yè)(P2)2023/2/514搭建ATmega16的“最小系統(tǒng)”(MOSI)PB5(MISO)PB6(SCK)PB7RESETVCCGNDGNDAVCCATmega1601020304050607080910111213141516171819204039383736353433323130292827262524232221USBASP下載頭插座(板子正面)VCCGNDMOSIMISOSCKRESET+5V+5V2023/2/515建議的“最小系統(tǒng)”(MOSI)PB5(MISO)PB6(SCK)PB7RESETVCCGNDXTAL2XTAL1AREFGNDAVCCATmega1601020304050607080910111213141516171819204039383736353433323130292827262524232221USBASP下載頭插座(板子正面)VCCGNDMOSIMISOSCKRESET+5V+5V10422pF22pF8MHz4K7+10uF+5VRESETXTAL2XTAL11002023/2/516增加8個(gè)LED燈用來(lái)指示(MOSI)PB5(MISO)PB6(SCK)PB7RESETVCCGNDXTAL2XTAL1AREFGNDAVCCPC7PC6PC5PC4PC3PC2PC1PC0ATmega1601020304050607080910111213141516171819204039383736353433323130292827262524232221USBASP下載頭插座(板子正面)VCCGNDMOSIMISOSCKRESET+5V+5V10422pF22pF8MHz4K7+10uF+5VRESETXTAL2XTAL1LED1K1002023/2/517實(shí)驗(yàn)1:讓8個(gè)LED燈閃爍安裝ICC編譯器編寫(xiě)讓8個(gè)LED燈閃爍的程序安裝USBASP下載線驅(qū)動(dòng)使用USBASP給mega16下載寫(xiě)好的程序更改mega16的熔絲位2023/2/518安裝ICC編譯器雙擊AVR_DEV\ICCAVR7.13C\Setup.exe之后的圖片使用ICC6.31A安裝時(shí)的界面,ICC7.13的界面與其相似2023/2/5192023/2/5202023/2/5212023/2/522C:\iccv7avr2023/2/5232023/2/5242023/2/5252023/2/5262023/2/5272023/2/528安裝ICC編譯器將AVR_DEV\ICCAVR7.13C\ICC.exe文件復(fù)制到C:\iccv7avr\bin\目錄下面。這里是默認(rèn)的目錄,根據(jù)你的安裝情況使用安裝時(shí)設(shè)置的目錄。以后,我們可以通過(guò)雙擊這個(gè)文件運(yùn)行ICC,可不受其30天試用期限制,但僅限于自己學(xué)習(xí),不能用于其它用途!2023/2/529運(yùn)行ICC使用剛才的ICC.exe運(yùn)行ICC7.132023/2/530ICC的界面2023/2/531新建一個(gè)工程ProjectNew2023/2/532新建一個(gè)工程建議先建立一個(gè)文件夾,如LED_test2023/2/533新建一個(gè)工程在建立的LED_test文件夾內(nèi)建立LED_文件,如圖點(diǎn)擊“保存(S)”2023/2/5342023/2/535在工程中建立一個(gè)LED.c文件FileNew2023/2/5362023/2/537在工程中建立一個(gè)LED.c文件FileSaveAs…2023/2/538在工程中建立一個(gè)LED.c文件在剛建立的LED_test文件夾內(nèi)保存成LED.c2023/2/539將LED.c添加到工程中File(右擊)AddFile(s)…2023/2/540將LED.c添加到工程中選中剛才建立的LED.c文件,打開(kāi)(O)2023/2/541將LED.c添加到工程中LED.c就成功添加到LED_project中了2023/2/542我們將會(huì)在這個(gè)區(qū)域里用C語(yǔ)言寫(xiě)一個(gè)LED閃爍的程序……2023/2/543在開(kāi)始之前設(shè)置ICC,使其配置成為可以開(kāi)發(fā)ATmega16的編譯器環(huán)境2023/2/544設(shè)置你的ICCProjectOptions…2023/2/545設(shè)置你的ICC如圖在Target標(biāo)簽中的DeviceConfiguration里選擇ATmega16單片機(jī),點(diǎn)擊OK即可2023/2/546書(shū)寫(xiě)程序程序?qū)?huì)被寫(xiě)到這里,如果你是第一次使用,不妨先把下一頁(yè)P(yáng)PT提供的寫(xiě)好的程序復(fù)制到這里,熟悉一下流程先2023/2/547寫(xiě)好的程序#include<iom16v.h>#include<macros.h>#include<stdio.h>voidInitPorts(void){DDRC=0xFF;PORTC=0xFF;}voiddelay_us(unsignedinttime){do{time--;}while(time>1);}voiddelay_ms(unsignedinttime){while(time!=0){delay_us(1000);time--;}}voidmain(void){InitPorts();delay_ms(50);while(1){PORTC=0x00;delay_ms(500);PORTC=0xFF;delay_ms(500);}}2023/2/548LED燈閃爍程序解釋#include<iom16v.h>//此頭文件包含了ATmega16的口位定義等#include<macros.h>//此頭文件包含了AVR系列通用口位定義等#include<stdio.h>/*此頭文件是C語(yǔ)言的標(biāo)準(zhǔn)頭文件,在這里不寫(xiě)是沒(méi)關(guān)系的*/2023/2/549LED燈閃爍程序解釋//端口初始化函數(shù)voidInitPorts(){/***76543210***/DDRC=0xFF;

//PC口定義為輸出PORTC=0xFF;

//PC口置1(也叫“拉高”)//

11111111}2023/2/550LED燈閃爍程序解釋/*8MHz晶振下*///微秒級(jí)延時(shí)函數(shù)voiddelay_us(unsignedinttime){do{time--;}while(time>1);}//毫秒級(jí)延時(shí)函數(shù)voiddelay_ms(unsignedinttime){while(time!=0){delay_us(1000);time--;}}2023/2/551LED燈閃爍程序解釋voidmain(void)//主程序{InitPorts();//端口初始化

delay_ms(50);//延時(shí)一下,保證外部電路穩(wěn)定

while(1)//進(jìn)入一個(gè)死循環(huán)

{PORTC=0x00;//C口的LED燈點(diǎn)亮

delay_ms(500);//延時(shí)500msPORTC=0xFF;//C口的LED燈熄滅

delay_ms(500);//延時(shí)100ms}}2023/2/552編譯BuildProject2023/2/553編譯成功2023/2/554編譯后的文件2023/2/555把程序?qū)懭雖ega16單片機(jī)安裝USBASP下載線驅(qū)動(dòng)使用USBASP給mega16下載寫(xiě)好的程序2023/2/556安裝USBASP下載線驅(qū)動(dòng)設(shè)置USBASP下載線的跳線跳線說(shuō)明:+5V:連接時(shí)將通過(guò)USB接口為目標(biāo)板供電。updata:連接時(shí)可以給USBasp進(jìn)行固件升級(jí)(一般不使用)。這里我們連接+5,斷開(kāi)updata+5Vupdata2023/2/557安裝USBASP下載線驅(qū)動(dòng)給USBASP插上下載排線黑色插頭有突起的一側(cè)對(duì)著板子上有白色方框的這一側(cè)插入2023/2/558安裝USBASP下載線驅(qū)動(dòng)先下載USBasp驅(qū)動(dòng):可以在CC98代理處下載8/uploadfile/2008/9/26/2064585665.rar也可以在AVR_DEV\progisp167\USB-Drive\下找到驅(qū)動(dòng)不能直接雙擊安裝,先把USBASP下載線插入電腦的USB口2023/2/559安裝USBASP下載線驅(qū)動(dòng)電腦顯示屏自動(dòng)彈出下列提示框,用鼠標(biāo)點(diǎn)擊選擇“是,僅這一次(Y)”,然后點(diǎn)擊“下一步(N)”

2023/2/560安裝USBASP下載線驅(qū)動(dòng)當(dāng)計(jì)算機(jī)屏幕顯示下列提示框后,點(diǎn)擊選擇“從列表或指定位置安裝(高級(jí))(S)”,再點(diǎn)擊“下一步(N)”2023/2/561安裝USBASP下載線驅(qū)動(dòng)屏幕出現(xiàn)下列提示框,點(diǎn)擊“瀏覽(R)”選擇USBASP驅(qū)動(dòng)文件所在的文件夾(USBasp-Drive),然后點(diǎn)擊“下一步(N)”2023/2/562安裝USBASP下載線驅(qū)動(dòng)2023/2/563安裝USBASP下載線驅(qū)動(dòng)2023/2/564安裝USBASP下載線驅(qū)動(dòng)2023/2/565使用progisp167下載軟件progisp167是一個(gè)免費(fèi)綠色軟件,就在\AVR_DEV\progisp167目錄下雙擊progisp.exe就能運(yùn)行軟件2023/2/566使用progisp167下載軟件(1)(2)(3)依次選擇好如圖設(shè)置ATmega16USBASPusb2023/2/567注意下載線另一頭與單片機(jī)的連接(MOSI)PB5(MISO)PB6(SCK)PB7RESETVCCGNDXTAL2XTAL1AREFGNDAVCCPC7PC6PC5PC4PC3PC2PC1PC0ATmega1601020304050607080910111213141516171819204039383736353433323130292827262524232221USBASP下載頭插座(板子正面)GNDVCCMOSIMISOSCKRESET+5V+5V10422pF22pF8MHz4K7+10uF+5VRESETXTAL2XTAL1LED1K1002023/2/568使用progisp167下載軟件點(diǎn)擊“調(diào)入Flash”(4)點(diǎn)擊“打開(kāi)”2023/2/569使用progisp167下載軟件設(shè)置好編程方式,然后點(diǎn)擊“自動(dòng)”(5)2023/2/570使用progisp167下載軟件說(shuō)明程序已經(jīng)下載成功了!2023/2/571為什么會(huì)這樣?LED燈閃爍得很慢,好像根本不是1秒一次!中間的4個(gè)LED燈根本就沒(méi)有被點(diǎn)亮過(guò)!2023/2/572設(shè)置ATmega16的熔絲位原因很有可能出在“熔絲位”上!2023/2/573設(shè)置ATmega16的熔絲位新手可能根本就看不懂,下面點(diǎn)“向?qū)Х绞健?023/2/574設(shè)置ATmega16的熔絲位鉤選不選不選2023/2/575設(shè)置ATmega16的熔絲位設(shè)置好熔絲位,然后點(diǎn)擊“寫(xiě)入”如果成功,這里會(huì)提示2023/2/576所有的LED燈都按照1s的節(jié)拍閃爍起來(lái)!2023/2/577端口初始化命令DDRA=0xF0;對(duì)端口A初始化,高4位作為輸出(1),低4位作為輸入(0)注:金黃色字體部分表示可以根據(jù)情況更改2023/2/578寫(xiě)端口命令PORTA=0x0F;將端口A的8個(gè)I/O口寫(xiě)為00001111,0表示I/O口拉低,1表示I/O口拉高。注:只有在A口相應(yīng)的I/O口位被定義為輸出時(shí)才有實(shí)際作用2023/2/579寫(xiě)端口命令P=PINA

;讀出端口A的8個(gè)I/O口上的高低電平狀態(tài),1表示高電平,0表示低電平,將其賦給P,P是無(wú)符號(hào)字節(jié)型變量(unsignedcharP;)注:只有在A口相應(yīng)的I/O口位被定義為輸入時(shí)才有實(shí)際作用2023/2/580I/O操作應(yīng)用舉例LED指示燈unsignedcharP;P=PINB;//B口值給PPORTC=P;/*C口按照P的值輸出。*/PB0PB1PB3PB5PB7PB2PB4PB6DDRB=0x00;//B口輸入DDRC=0xFF;//C口輸出PC7PC6PC5PC4PC3PC2PC1PC0AVRICC程序2023/2/581I/O口的一種位操作實(shí)現(xiàn)方法//輸出端口位操作(1為拉高,0為拉低)#defineset_bit(x,y) (x|=(1<<y))//將x端口的第y位設(shè)置成1/*例:*/set_bit(PORTB,0)#defineclr_bit(x,y) (x&=~(1<<y))//將x端口的第y位設(shè)置成0/*例:*/clr_bit(PORTB,0)2023/2/582I/O口的一種位操作實(shí)現(xiàn)方法//輸入端口位操作(1為高電平,0為低電平)#defineget_bit(x,y) ((x&(1<<y))?1:0)//得到x端口第y位的數(shù)據(jù)/*例:*/if(get_bit(PINC,7)==1)program1();2023/2/583實(shí)驗(yàn)2:使用ATmega16的ADC將ATmega16的PA7(ADC7)口與一個(gè)光電開(kāi)關(guān)連接,打開(kāi)A/D轉(zhuǎn)換,并用LED指示燈指示轉(zhuǎn)換的高八位結(jié)果。2023/2/584實(shí)驗(yàn)2:使用ATmega16的ADC電路連接(在第16張“最小系統(tǒng)”基礎(chǔ)上)+5VADC710050056K2023/2/585與ADC相關(guān)的寄存器DatasheetP7DatasheetP203DatasheetP2052023/2/586與ADC相關(guān)的寄存器DatasheetP2062023/2/587ICC程序(ADC)完整程序見(jiàn)備注voidADC_init(void){//ADC初始化

ADMUX|=(1<<ADLAR);//ADC結(jié)果左對(duì)齊

ADCSRA|=(1<<ADPS2)|(0<<ADPS1)|(1<<ADPS0);//ADC時(shí)鐘=clk/32ADCSRA|=(1<<ADEN);//ADC使能}voidADC_work(void){//8路共需要0.8ms左右

unsignedchari=0;for(i=0;i<8;i++){ADMUX&=0xF0;//第4位清零,事實(shí)上只清低3位就可以了

ADMUX|=i;//選擇ADC通道為ADCi

ADCSRA|=(1<<ADSC);//啟動(dòng)ADC轉(zhuǎn)換

delay_us(80);adc[i]=ADCH;//讀取本路轉(zhuǎn)換結(jié)果,只讀高8位

}}2023/2/588實(shí)驗(yàn)3:使用ATmega16的PWM(上)使用ATmega16的PWM對(duì)電機(jī)進(jìn)行調(diào)速2023/2/589L298N電機(jī)控制電路PB4PB5PB6PB7OC0OC22023/2/590L298N真值表(以一個(gè)H橋?yàn)槔﹊nput1input2EN_AMOTOR_LXX0靜止101正轉(zhuǎn)011反轉(zhuǎn)001停止111制動(dòng)2023/2/591ATmega16與PWM相關(guān)的寄存器DatasheetP7TCCR0OCR0TCCR2OCR2DatasheetP78DatasheetP80DatasheetP119DatasheetP121TCCR1ATCCR1BOCR1AOCR1BDatasheetP102DatasheetP105DatasheetP106DatasheetP1062023/2/592ICC程序(PWM上)voidpwm02_init(void){//PWM初始化

/*OC0的PWM初始化*/TCCR0=0x00;TCCR0|=(1<<WGM01)|(1<<WGM00);//選擇快速PWM方式

TCCR0|=(1<<COM01)|(0<<COM00);//PWM左對(duì)齊

TCCR0|=(0<<CS02)|(1<<CS01)|(1<<CS00);//clk/64分頻

OCR0=0;//OCR0的值:0~255用來(lái)控制占空比,初值為0

/*OC2的PWM初始化*/TCCR2=0x00;T

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論