单片机片上开发方法(ATmega16为例)_第1页
单片机片上开发方法(ATmega16为例)_第2页
单片机片上开发方法(ATmega16为例)_第3页
单片机片上开发方法(ATmega16为例)_第4页
单片机片上开发方法(ATmega16为例)_第5页
已阅读5页,还剩91页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2023/2/51单片机片上开发方法

(ATmega16为例)王浩98ID:wootE-mail:wanghao@SOC2023/2/522023/2/53你现在有这些麻烦吗?我根本不知道怎么把单片机用在机器人上我在自学,而且找了书在看,但越看越乱我看了一些方案的实例,对机械部分和电路部分有感觉了,但就是不知道他们是怎样工作的我只会用仿真器,到现在还不知道如何把写好的程序“烧”进一片真实的单片机中只要和单片机有一点关系的电路我们就不敢设计,这让我们在写方案的过程中阻力很大。我学过C,但是不会用它写单片机的程序我到底是用汇编还是用C……2023/2/54要解决麻烦,首先假设你……会使用电脑(比如安装WindowsXP的PC)已经学过或对C语言有一定的了解能看得懂一些简单的电路和元器件符号充满激情和渴望,而且有毅力和敢于动手2023/2/55我去电子市场买来一片单片机!我能且只能这样看着它——

数数它的腿,瞅瞅它上面的印字!40引脚DIP封装ATmega16L-8ATmega16-16或2023/2/56从DATASHEET中了解更多ATMEL公司为他的所有单片机产品都提供了一份超级详细的datasheet说明书,而且对常用的系列进行了中文翻译,这将是我们接下来进行各种实验环节的第一手资料!2023/2/57从DATASHEET中了解更多现在很多单片机内部有三种存储器:FlashEEPROMSRAM/RAM存放程序和静态数据,单片机在工作过程中一般不能修改一般不会使用,使用时通过特殊的命令读写,其特点是掉电不丢失存放变量,特点是掉电丢失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下载一个开发资料包(woot整理)AVR_DEV.rar解压后请关注论坛,即时会挂在临时ftp上并给出连接2023/2/511做好心理准备

接下来我们将为mega16单片机搭建一个最基本的电路,可以称它为一个“最小系统”,这个系统只能向单片机中下载程序并让其开始工作,然后我们会按照实验的顺序逐渐增加并完善这个系统,并让它最终成为SLOWLY机器人的一个标准系统。在这个过程中,我们会边讲、边试,不知不觉中学会使用datasheet,学会在Windows上开发平台的搭建、单片机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的“最小系统”(MOSI)PB5(MISO)PB6(SCK)PB7RESETVCCGNDGNDAVCCATmega1601020304050607080910111213141516171819204039383736353433323130292827262524232221USBASP下载头插座(板子正面)VCCGNDMOSIMISOSCKRESET+5V+5V2023/2/515建议的“最小系统”(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下载线驱动使用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\目录下面。这里是默认的目录,根据你的安装情况使用安装时设置的目录。以后,我们可以通过双击这个文件运行ICC,可不受其30天试用期限制,但仅限于自己学习,不能用于其它用途!2023/2/529运行ICC使用刚才的ICC.exe运行ICC7.132023/2/530ICC的界面2023/2/531新建一个工程ProjectNew2023/2/532新建一个工程建议先建立一个文件夹,如LED_test2023/2/533新建一个工程在建立的LED_test文件夹内建立LED_文件,如图点击“保存(S)”2023/2/5342023/2/535在工程中建立一个LED.c文件FileNew2023/2/5362023/2/537在工程中建立一个LED.c文件FileSaveAs…2023/2/538在工程中建立一个LED.c文件在刚建立的LED_test文件夹内保存成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我们将会在这个区域里用C语言写一个LED闪烁的程序……2023/2/543在开始之前设置ICC,使其配置成为可以开发ATmega16的编译器环境2023/2/544设置你的ICCProjectOptions…2023/2/545设置你的ICC如图在Target标签中的DeviceConfiguration里选择ATmega16单片机,点击OK即可2023/2/546书写程序程序将会被写到这里,如果你是第一次使用,不妨先把下一页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语言的标准头文件,在这里不写是没关系的*/2023/2/549LED灯闪烁程序解释//端口初始化函数voidInitPorts(){/***76543210***/DDRC=0xFF;

//PC口定义为输出PORTC=0xFF;

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

11111111}2023/2/550LED灯闪烁程序解释/*8MHz晶振下*///微秒级延时函数voiddelay_us(unsignedinttime){do{time--;}while(time>1);}//毫秒级延时函数voiddelay_ms(unsignedinttime){while(time!=0){delay_us(1000);time--;}}2023/2/551LED灯闪烁程序解释voidmain(void)//主程序{InitPorts();//端口初始化

delay_ms(50);//延时一下,保证外部电路稳定

while(1)//进入一个死循环

{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把程序写入mega16单片机安装USBASP下载线驱动使用USBASP给mega16下载写好的程序2023/2/556安装USBASP下载线驱动设置USBASP下载线的跳线跳线说明:+5V:连接时将通过USB接口为目标板供电。updata:连接时可以给USBasp进行固件升级(一般不使用)。这里我们连接+5,断开updata+5Vupdata2023/2/557安装USBASP下载线驱动给USBASP插上下载排线黑色插头有突起的一侧对着板子上有白色方框的这一侧插入2023/2/558安装USBASP下载线驱动先下载USBasp驱动:可以在CC98代理处下载8/uploadfile/2008/9/26/2064585665.rar也可以在AVR_DEV\progisp167\USB-Drive\下找到驱动不能直接双击安装,先把USBASP下载线插入电脑的USB口2023/2/559安装USBASP下载线驱动电脑显示屏自动弹出下列提示框,用鼠标点击选择“是,仅这一次(Y)”,然后点击“下一步(N)”

2023/2/560安装USBASP下载线驱动当计算机屏幕显示下列提示框后,点击选择“从列表或指定位置安装(高级)(S)”,再点击“下一步(N)”2023/2/561安装USBASP下载线驱动屏幕出现下列提示框,点击“浏览(R)”选择USBASP驱动文件所在的文件夹(USBasp-Drive),然后点击“下一步(N)”2023/2/562安装USBASP下载线驱动2023/2/563安装USBASP下载线驱动2023/2/564安装USBASP下载线驱动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下载软件点击“调入Flash”(4)点击“打开”2023/2/569使用progisp167下载软件设置好编程方式,然后点击“自动”(5)2023/2/570使用progisp167下载软件说明程序已经下载成功了!2023/2/571为什么会这样?LED灯闪烁得很慢,好像根本不是1秒一次!中间的4个LED灯根本就没有被点亮过!2023/2/572设置ATmega16的熔丝位原因很有可能出在“熔丝位”上!2023/2/573设置ATmega16的熔丝位新手可能根本就看不懂,下面点“向导方式”2023/2/574设置ATmega16的熔丝位钩选不选不选2023/2/575设置ATmega16的熔丝位设置好熔丝位,然后点击“写入”如果成功,这里会提示2023/2/576所有的LED灯都按照1s的节拍闪烁起来!2023/2/577端口初始化命令DDRA=0xF0;对端口A初始化,高4位作为输出(1),低4位作为输入(0)注:金黄色字体部分表示可以根据情况更改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口上的高低电平状态,1表示高电平,0表示低电平,将其赋给P,P是无符号字节型变量(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口的一种位操作实现方法//输出端口位操作(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口的一种位操作实现方法//输入端口位操作(1为高电平,0为低电平)#defineget_bit(x,y) ((x&(1<<y))?1:0)//得到x端口第y位的数据/*例:*/if(get_bit(PINC,7)==1)program1();2023/2/583实验2:使用ATmega16的ADC将ATmega16的PA7(ADC7)口与一个光电开关连接,打开A/D转换,并用LED指示灯指示转换的高八位结果。2023/2/584实验2:使用ATmega16的ADC电路连接(在第16张“最小系统”基础上)+5VADC710050056K2023/2/585与ADC相关的寄存器DatasheetP7DatasheetP203DatasheetP2052023/2/586与ADC相关的寄存器DatasheetP2062023/2/587ICC程序(ADC)完整程序见备注voidADC_init(void){//ADC初始化

ADMUX|=(1<<ADLAR);//ADC结果左对齐

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转换

delay_us(80);adc[i]=ADCH;//读取本路转换结果,只读高8位

}}2023/2/588实验3:使用ATmega16的PWM(上)使用ATmega16的PWM对电机进行调速2023/2/589L298N电机控制电路PB4PB5PB6PB7OC0OC22023/2/590L298N真值表(以一个H桥为例)input1input2EN_AMOTOR_LXX0静止101正转011反转001停止111制动2023/2/591ATmega16与PWM相关的寄存器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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论