




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2023/2/51單片機片上開發(fā)方法
(ATmega16為例)王浩98ID:wootE-mail:wanghao@SOC2023/2/522023/2/53你現(xiàn)在有這些麻煩嗎?我根本不知道怎么把單片機用在機器人上我在自學,而且找了書在看,但越看越亂我看了一些方案的實例,對機械部分和電路部分有感覺了,但就是不知道他們是怎樣工作的我只會用仿真器,到現(xiàn)在還不知道如何把寫好的程序“燒”進一片真實的單片機中只要和單片機有一點關(guān)系的電路我們就不敢設計,這讓我們在寫方案的過程中阻力很大。我學過C,但是不會用它寫單片機的程序我到底是用匯編還是用C……2023/2/54要解決麻煩,首先假設你……會使用電腦(比如安裝WindowsXP的PC)已經(jīng)學過或?qū)語言有一定的了解能看得懂一些簡單的電路和元器件符號充滿激情和渴望,而且有毅力和敢于動手2023/2/55我去電子市場買來一片單片機!我能且只能這樣看著它——
數(shù)數(shù)它的腿,瞅瞅它上面的印字!40引腳DIP封裝ATmega16L-8ATmega16-16或2023/2/56從DATASHEET中了解更多ATMEL公司為他的所有單片機產(chǎn)品都提供了一份超級詳細的datasheet說明書,而且對常用的系列進行了中文翻譯,這將是我們接下來進行各種實驗環(huán)節(jié)的第一手資料!2023/2/57從DATASHEET中了解更多現(xiàn)在很多單片機內(nèi)部有三種存儲器:FlashEEPROMSRAM/RAM存放程序和靜態(tài)數(shù)據(jù),單片機在工作過程中一般不能修改一般不會使用,使用時通過特殊的命令讀寫,其特點是掉電不丟失存放變量,特點是掉電丟失2023/2/58其實你還需要很多……最起碼(如果想完成這里的最少一個實驗的話),你還需要準備:一支電烙鐵、電烙鐵架子、一小卷含鉛的0.8mm焊錫和一塊足夠大的萬用焊接電路板一些單芯帶絕緣皮的鍍錫銅導線一個40DIP插座和幾根杜邦排針8只1K的電阻和8只LED燈一根AVR的下載線(比如USBASP線)最好還有一個萬用表2023/2/59USBASP下載線CC98上有人在做:8/dispbbs.asp?boardID=251&ID=23514972023/2/510下載一個開發(fā)資料包(woot整理)AVR_DEV.rar解壓后請關(guān)注論壇,即時會掛在臨時ftp上并給出連接2023/2/511做好心理準備
接下來我們將為mega16單片機搭建一個最基本的電路,可以稱它為一個“最小系統(tǒng)”,這個系統(tǒng)只能向單片機中下載程序并讓其開始工作,然后我們會按照實驗的順序逐漸增加并完善這個系統(tǒng),并讓它最終成為SLOWLY機器人的一個標準系統(tǒng)。在這個過程中,我們會邊講、邊試,不知不覺中學會使用datasheet,學會在Windows上開發(fā)平臺的搭建、單片機C語言編程基礎、程序的下載、延時程序、LED點燈程序、I/O操作、PWM功能、定時器功能、A/D功能等片上功能的使用……2023/2/512ATmega16單片機的管腳排列PB0PB1PB2PB3PB4PB5PB6PB7RESETVCCGNDXTAL2XTAL1PD0PD1PD2PD3PD4PD5PD6PA0PA1PA2PA3PA4PA5PA6PA7AREFGNDAVCCPC7PC6PC5PC4PC3PC2PC1PC0PD7ATmega16010203040506070809101112131415161718192040393837363534333231302928272625242322212023/2/513從datasheet上快速知道管腳定義AVR_DEV\datasheet\cn_mega16-16L.pdf的第2頁(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個LED燈用來指示(MOSI)PB5(MISO)PB6(SCK)PB7RESETVCCGNDXTAL2XTAL1AREFGNDAVCCPC7PC6PC5PC4PC3PC2PC1PC0ATmega1601020304050607080910111213141516171819204039383736353433323130292827262524232221USBASP下載頭插座(板子正面)VCCGNDMOSIMISOSCKRESET+5V+5V10422pF22pF8MHz4K7+10uF+5VRESETXTAL2XTAL1LED1K1002023/2/517實驗1:讓8個LED燈閃爍安裝ICC編譯器編寫讓8個LED燈閃爍的程序安裝USBASP下載線驅(qū)動使用USBASP給mega16下載寫好的程序更改mega16的熔絲位2023/2/518安裝ICC編譯器雙擊AVR_DEV\ICCAVR7.13C\Setup.exe之后的圖片使用ICC6.31A安裝時的界面,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文件復制到C:\iccv7avr\bin\目錄下面。這里是默認的目錄,根據(jù)你的安裝情況使用安裝時設置的目錄。以后,我們可以通過雙擊這個文件運行ICC,可不受其30天試用期限制,但僅限于自己學習,不能用于其它用途!2023/2/529運行ICC使用剛才的ICC.exe運行ICC7.132023/2/530ICC的界面2023/2/531新建一個工程ProjectNew2023/2/532新建一個工程建議先建立一個文件夾,如LED_test2023/2/533新建一個工程在建立的LED_test文件夾內(nèi)建立LED_文件,如圖點擊“保存(S)”2023/2/5342023/2/535在工程中建立一個LED.c文件FileNew2023/2/5362023/2/537在工程中建立一個LED.c文件FileSaveAs…2023/2/538在工程中建立一個LED.c文件在剛建立的LED_test文件夾內(nèi)保存成LED.c2023/2/539將LED.c添加到工程中File(右擊)AddFile(s)…2023/2/540將LED.c添加到工程中選中剛才建立的LED.c文件,打開(O)2023/2/541將LED.c添加到工程中LED.c就成功添加到LED_project中了2023/2/542我們將會在這個區(qū)域里用C語言寫一個LED閃爍的程序……2023/2/543在開始之前設置ICC,使其配置成為可以開發(fā)ATmega16的編譯器環(huán)境2023/2/544設置你的ICCProjectOptions…2023/2/545設置你的ICC如圖在Target標簽中的DeviceConfiguration里選擇ATmega16單片機,點擊OK即可2023/2/546書寫程序程序?qū)粚懙竭@里,如果你是第一次使用,不妨先把下一頁PPT提供的寫好的程序復制到這里,熟悉一下流程先2023/2/547寫好的程序#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語言的標準頭文件,在這里不寫是沒關(guān)系的*/2023/2/549LED燈閃爍程序解釋//端口初始化函數(shù)voidInitPorts(){/***76543210***/DDRC=0xFF;
//PC口定義為輸出PORTC=0xFF;
//PC口置1(也叫“拉高”)//
11111111}2023/2/550LED燈閃爍程序解釋/*8MHz晶振下*///微秒級延時函數(shù)voiddelay_us(unsignedinttime){do{time--;}while(time>1);}//毫秒級延時函數(shù)voiddelay_ms(unsignedinttime){while(time!=0){delay_us(1000);time--;}}2023/2/551LED燈閃爍程序解釋voidmain(void)//主程序{InitPorts();//端口初始化
delay_ms(50);//延時一下,保證外部電路穩(wěn)定
while(1)//進入一個死循環(huán)
{PORTC=0x00;//C口的LED燈點亮
delay_ms(500);//延時500msPORTC=0xFF;//C口的LED燈熄滅
delay_ms(500);//延時100ms}}2023/2/552編譯BuildProject2023/2/553編譯成功2023/2/554編譯后的文件2023/2/555把程序?qū)懭雖ega16單片機安裝USBASP下載線驅(qū)動使用USBASP給mega16下載寫好的程序2023/2/556安裝USBASP下載線驅(qū)動設置USBASP下載線的跳線跳線說明:+5V:連接時將通過USB接口為目標板供電。updata:連接時可以給USBasp進行固件升級(一般不使用)。這里我們連接+5,斷開updata+5Vupdata2023/2/557安裝USBASP下載線驅(qū)動給USBASP插上下載排線黑色插頭有突起的一側(cè)對著板子上有白色方框的這一側(cè)插入2023/2/558安裝USBASP下載線驅(qū)動先下載USBasp驅(qū)動:可以在CC98代理處下載8/uploadfile/2008/9/26/2064585665.rar也可以在AVR_DEV\progisp167\USB-Drive\下找到驅(qū)動不能直接雙擊安裝,先把USBASP下載線插入電腦的USB口2023/2/559安裝USBASP下載線驅(qū)動電腦顯示屏自動彈出下列提示框,用鼠標點擊選擇“是,僅這一次(Y)”,然后點擊“下一步(N)”
2023/2/560安裝USBASP下載線驅(qū)動當計算機屏幕顯示下列提示框后,點擊選擇“從列表或指定位置安裝(高級)(S)”,再點擊“下一步(N)”2023/2/561安裝USBASP下載線驅(qū)動屏幕出現(xiàn)下列提示框,點擊“瀏覽(R)”選擇USBASP驅(qū)動文件所在的文件夾(USBasp-Drive),然后點擊“下一步(N)”2023/2/562安裝USBASP下載線驅(qū)動2023/2/563安裝USBASP下載線驅(qū)動2023/2/564安裝USBASP下載線驅(qū)動2023/2/565使用progisp167下載軟件progisp167是一個免費綠色軟件,就在\AVR_DEV\progisp167目錄下雙擊progisp.exe就能運行軟件2023/2/566使用progisp167下載軟件(1)(2)(3)依次選擇好如圖設置ATmega16USBASPusb2023/2/567注意下載線另一頭與單片機的連接(MOSI)PB5(MISO)PB6(SCK)PB7RESETVCCGNDXTAL2XTAL1AREFGNDAVCCPC7PC6PC5PC4PC3PC2PC1PC0ATmega1601020304050607080910111213141516171819204039383736353433323130292827262524232221USBASP下載頭插座(板子正面)GNDVCCMOSIMISOSCKRESET+5V+5V10422pF22pF8MHz4K7+10uF+5VRESETXTAL2XTAL1LED1K1002023/2/568使用progisp167下載軟件點擊“調(diào)入Flash”(4)點擊“打開”2023/2/569使用progisp167下載軟件設置好編程方式,然后點擊“自動”(5)2023/2/570使用progisp167下載軟件說明程序已經(jīng)下載成功了!2023/2/571為什么會這樣?LED燈閃爍得很慢,好像根本不是1秒一次!中間的4個LED燈根本就沒有被點亮過!2023/2/572設置ATmega16的熔絲位原因很有可能出在“熔絲位”上!2023/2/573設置ATmega16的熔絲位新手可能根本就看不懂,下面點“向?qū)Х绞健?023/2/574設置ATmega16的熔絲位鉤選不選不選2023/2/575設置ATmega16的熔絲位設置好熔絲位,然后點擊“寫入”如果成功,這里會提示2023/2/576所有的LED燈都按照1s的節(jié)拍閃爍起來!2023/2/577端口初始化命令DDRA=0xF0;對端口A初始化,高4位作為輸出(1),低4位作為輸入(0)注:金黃色字體部分表示可以根據(jù)情況更改2023/2/578寫端口命令PORTA=0x0F;將端口A的8個I/O口寫為00001111,0表示I/O口拉低,1表示I/O口拉高。注:只有在A口相應的I/O口位被定義為輸出時才有實際作用2023/2/579寫端口命令P=PINA
;讀出端口A的8個I/O口上的高低電平狀態(tài),1表示高電平,0表示低電平,將其賦給P,P是無符號字節(jié)型變量(unsignedcharP;)注:只有在A口相應的I/O口位被定義為輸入時才有實際作用2023/2/580I/O操作應用舉例LED指示燈unsignedcharP;P=PINB;//B口值給PPORTC=P;/*C口按照P的值輸出。*/PB0PB1PB3PB5PB7PB2PB4PB6DDRB=0x00;//B口輸入DDRC=0xFF;//C口輸出PC7PC6PC5PC4PC3PC2PC1PC0AVRICC程序2023/2/581I/O口的一種位操作實現(xiàn)方法//輸出端口位操作(1為拉高,0為拉低)#defineset_bit(x,y) (x|=(1<<y))//將x端口的第y位設置成1/*例:*/set_bit(PORTB,0)#defineclr_bit(x,y) (x&=~(1<<y))//將x端口的第y位設置成0/*例:*/clr_bit(PORTB,0)2023/2/582I/O口的一種位操作實現(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實驗2:使用ATmega16的ADC將ATmega16的PA7(ADC7)口與一個光電開關(guān)連接,打開A/D轉(zhuǎn)換,并用LED指示燈指示轉(zhuǎn)換的高八位結(jié)果。2023/2/584實驗2:使用ATmega16的ADC電路連接(在第16張“最小系統(tǒng)”基礎上)+5VADC710050056K2023/2/585與ADC相關(guān)的寄存器DatasheetP7DatasheetP203DatasheetP2052023/2/586與ADC相關(guān)的寄存器DatasheetP2062023/2/587ICC程序(ADC)完整程序見備注voidADC_init(void){//ADC初始化
ADMUX|=(1<<ADLAR);//ADC結(jié)果左對齊
ADCSRA|=(1<<ADPS2)|(0<<ADPS1)|(1<<ADPS0);//ADC時鐘=clk/32ADCSRA|=(1<<ADEN);//ADC使能}voidADC_work(void){//8路共需要0.8ms左右
unsignedchari=0;for(i=0;i<8;i++){ADMUX&=0xF0;//第4位清零,事實上只清低3位就可以了
ADMUX|=i;//選擇ADC通道為ADCi
ADCSRA|=(1<<ADSC);//啟動ADC轉(zhuǎn)換
delay_us(80);adc[i]=ADCH;//讀取本路轉(zhuǎn)換結(jié)果,只讀高8位
}}2023/2/588實驗3:使用ATmega16的PWM(上)使用ATmega16的PWM對電機進行調(diào)速2023/2/589L298N電機控制電路PB4PB5PB6PB7OC0OC22023/2/590L298N真值表(以一個H橋為例)input1input2EN_AMOTOR_LXX0靜止101正轉(zhuǎn)011反轉(zhuǎn)001停止111制動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左對齊
TCCR0|=(0<<CS02)|(1<<CS01)|(1<<CS00);//clk/64分頻
OCR0=0;//OCR0的值:0~255用來控制占空比,初值為0
/*OC2的PWM初始化*/TCCR2=0x00;T
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 三醫(yī)政策分析半年報2025(極簡版)
- 營運電動車過戶管理辦法
- 蓬萊艾山保護區(qū)管理辦法
- 銜接資金項目庫管理辦法
- 健康活動不貪食冷飲課件
- 衢州公積金提前管理辦法
- 西安住校生封閉管理辦法
- 規(guī)范代收費管理暫行辦法
- 設備液壓與潤滑管理辦法
- 試驗室授權(quán)資質(zhì)管理辦法
- RB/T 303-2016養(yǎng)老服務認證技術(shù)導則
- GB/T 6896-2007鈮條
- GB/T 6075.1-2012機械振動在非旋轉(zhuǎn)部件上測量評價機器的振動第1部分:總則
- GB/T 32227-2015船用工作救生衣
- GB 38454-2019墜落防護水平生命線裝置
- 大學2023年自主招生報名登記表
- 小學體育暑假特色作業(yè)
- 2020四川考研數(shù)學二真題【含答案】
- 壓縮機拆除方案
- 部編人教版小學一年級上冊寫字表田字格字帖
- JJG 5-2001 纖維卷尺、測繩檢定規(guī)程-(高清現(xiàn)行)
評論
0/150
提交評論