《AVR单片机3454.docx》由会员分享,可在线阅读,更多相关《AVR单片机3454.docx(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、AVR单片机(ATmega16)培训宗旨:引导导为主 培养养编程思维时间分配(一学学期):三分分之一时间讲讲解;三分之二时间动动手实验。具体时间:星期期六晚上6:009:00内容形式: 1、软、硬硬件知识(一)讲解 2、实验经经验3、常用程序(思思维)分析1、专业讲座(请请资深讲师)(二)讲座 2、课外讲讲座(如书记记等)3、电影(专业业性强的短片片)(李世维维讲座)1、硬件测试与与软件使用(三)实验内容容 2、汇汇编语言编程程3、AVR单片片机内部资源源的使用 建议方法:先由由指导老师讲讲解实验内容容的原理、特特点、应用、实实践应用中的的经验以及编编程思维的分分析,再由会会员自己理解解、自己
2、验证证、运用原理理设计应用、调调试程序。在在会员动手的的过程中,由由摇篮的部长长(三名)从从旁指导。实验一 软软件和硬件的的认识一、 实验目的:1、掌握硬件原原理。 2、初初步掌握实验验板的使用方方法。 3、熟熟悉软件工作作界面。二、 实验仪器: AATmagee16实验板板 一块PC机 一一台三、 实验内容及步骤骤:1、插上电源,按按下开关。观观察批示灯是是否点亮。电源(可输入7712V)ATmega116管脚图2、由原理可知知I/O口的的批示灯为低低电平亮,在在实验板上取取地与I/OO口相接,观观察是否点亮亮。I/O口LEDD显示与接口口3、打开编程界界面,点击各各栏,认识各各栏的用途。A
3、VRICC IDE 软软件的工作界界面4、输入以下程程序:#includde int maiin(voiid) DDRA = 0xfff; /* alll outtputs */ DDRB = 0xfff; /* alll outtputs */ DDRC = 0xfff; /*alll outpputs */ DDRD = 0xfff; /*alll outpputs */ PORTAA = 0xx00; /* 输出低低电平 */ PORTBB = 0xx00; /* 输出低低电平 */ PORTCC = 0xx00; /* 输出低低电平 */ PORTDD = 0xx00; /* 输出低低
4、电平 */ whilee(1);观察I/O口的的灯是否被点点亮。实验二 I/OO口的输入与与输出一、 实验目的:1、了解IO口口的结构; 2、熟熟悉IO口的的特性; 3、掌掌握IO口的的控制。二、实验仪器:ATmagge16实验验板 一块块PC机 一一台三、 实验原理:作为通用数字II/O 使用用时,AVRR 所有的II/O 端口口都具有真正正的读- 修修改- 写功功能。这意味味着用SBII 或CBII 指令改变变某些管脚的的方向( 或或者是端口电电平、禁止/ 使能上拉拉电阻) 时时不会改变其其他管脚的方方向( 或者者是端口电平平、禁止/ 使能上拉电电阻)。输出出缓冲器具有有对称的驱动动能力,
5、可以以输出或吸收收大电流,直直接驱动LEED。所有的的端口引脚都都具有与电压压无关的上拉拉电阻。并有有保护二极管管与VCC 和地相连,如 Figure23 所示。在控制I/O时,分别由方向寄存器DDRX与数据寄存器PORTX控制I/O的状态,如下表。 Figure 23. II/O 引脚脚等效原理图图 I/O口LEDD显示与接口口四、 实验内容及步骤骤: 输入以下下程序:这个个程序为流水水灯#includde /*延延时 usvoid deelay_uus(intt t)do t-;while(tt1);/*延延时 mssvoid deelay_mms(unssignedd int t)whi
6、le(tt!=0)delay_uus(11442);t-;int maiin(voiid) DDRA = 0xfff;/* alll outtputs */ DDRB = 0xfff;/* alll outtputs */ DDRC = 0xfff; /*all outpuuts */ DDRD = 0xfff; /*all outpuuts */ PORTAA=0XFFF; PORTBB=0XFFF; PORTCC=0XFFF; PORTDD=0XFFF; while(1)/*IIO口输出低低电平有效,如如:0X011为十六进制制数,二进制制表示为0000000001B,再取取反 PORRT
7、A=0X001; dellay_mss(10000);/*延时1秒秒 PORRTA=0X022; dellay_mss(10000); PORRTA=0X004; dellay_mss(10000); PORRTA=0X008; dellay_mss(10000); PORRTA=0X110; dellay_mss(10000); PORRTA=0X220; dellay_mss(10000); PORRTA=0X440; dellay_mss(10000); PORRTA=0X880; dellay_mss(10000);PORTA=00XFF; PORRTB=00X01; dellay_m
8、ss(10000);/*延时1秒秒 PORRTB=00X02; dellay_mss(10000); PORRTB=00X04; dellay_mss(10000); PORRTB=00X08; dellay_mss(10000); PORRTB=00X10; dellay_mss(10000); PORRTB=00X20; dellay_mss(10000); PORRTB=00X40; dellay_mss(10000); PORRTB=00X80; dellay_mss(10000);PORTB=00XFF; PORRTC=00X01; dellay_mss(10000); PORRTC
9、=00X02; dellay_mss(10000); PORRTC=00X04; dellay_mss(10000); PORRTC=00X08; dellay_mss(10000); PORRTC=00X10; dellay_mss(10000); PORRTC=00X20;delay_mms(10000);PORTC=0X40; dellay_mss(10000); PORRTC=00X80; dellay_mss(10000);PORTC=00XFF; PORRTD=00X01; dellay_mss(10000); PORRTD=00X02; dellay_mss(10000); PO
10、RRTD=00X04; dellay_mss(10000); PORRTD=00X08; dellay_mss(10000); PORRTD=00X10; dellay_mss(10000); PORRTD=00X20; dellay_mss(10000); PORRTD=00X40; dellay_mss(10000); PORRTD=00X80; dellay_mss(10000); PORRTD=0XXFF; 观看现象是不是是流水灯。实验三 外部中中断一、 实验目的:1、了解外部中中断的库函数;2、熟悉外部中中断的特性; 3、掌握握外部中断的使用。二、实验仪器:ATmagge16实验验板
11、 一块块PC机 一一台三、 实验原理:外部中断通过引引脚INT00 与INTT1 或PCCINT233.0 触触发。只要使使能了中断,即即使引脚INNT0与INNT1 或PPCINT223.0 配置为输出出,只要电平平发生了合适适的变化,中中断也会触发发。这个特点点可以用来产产生软件中断断。 只要使使能, PCCINT233.16 引脚上的电电平变化将触触发外部中断断PCI2, PCINTT14.88 引脚上的的电平变化将将触发外部中中断PCI11, PCIINT7.0 将触发发外部中断PPCI0。PPCMSK22、PCMSSK1 与PPCMSK00 寄存器则则用来检测是是哪个引脚上上的电平发
12、生生了变化。PPCINT223.0 外部中断的的检测是异步步的。也就是是说,和其他他中断方式一一样,这些中中断也可以用用来将器件从从休眠模式唤唤醒。INTT0 与INNT1 中断断可以由下降降沿、上升沿沿,或者是低低电平触发。具具体由外部中中断控制寄存存器A EICRRA 的设置置来确定。当当INT0 或INT11 中断使能能且设定为电电平触发时,只只要引脚电平平被拉低,中中断就会产生生。若要求IINT0 或或INT1 在信号下降降沿或上升沿沿触发中断,则则I/O时钟钟必须工作(请参见P223”时钟系统及及其分布” 了解更多多信息)。IINT0与IINT1 的的低电平中断断检测是异步步的。也就
13、是是说它可以用用来将器件从从休眠模式唤唤醒。在休眠眠过程( 除除了空闲模式) 中I/O 时钟是是停止的。通通过电平中断断将MCU 从掉电模式式唤醒时,要要保证低电平平保持一定的的时间以使MMCU 完成成唤醒过程并并触发中断。如如果触发电平平在启动时间间结束前就消消失, MCCU 将被唤唤醒,但中断断不会被触发发。启动时间间由熔丝位SSUT 与CCKSEL 决定。详见见 P23” 系统时钟钟及其选项” 。外部中断控制寄寄存器MCUUCR 外部部中断控制寄寄存器 A 包括决定中中断触发方式式的控制位。位1, 0 ISC001, ISSC00: 中断触发方方式控制0 之位1 与与位0外部中中断0 由
14、引引脚INT00 激发,如如果SREGG 寄存器的的I 标志位位和相应的中中断屏蔽位置置位的话。触触发方式如TTable335 所示。在在检测边沿前前MCU 首首先采样INNT0 引脚脚上的电平。如如果选择了边边沿触发方式式或电平变化化触发方式,那那么持续时间间大于一个时时钟周期的脉脉冲将触发中中断,过短的的脉冲则不能能保证触发中中断。如果选选择低电平触触发方式,那那么低电平必必须保持到当当前指令执行行完成。中断断完成后回到到被中断的位位置。外部中断控制寄寄存器MCUUCR 外部部中断控制寄寄存器 A 包括决定中中断触发方式式的控制位。通用中断控制寄寄存器 GIICR,控制制外部中断使使能位,
15、具体体如下:四 ICC软软件中断程序序书写格式及及16中断向向量表 16中断向向量表五 实验步骤及及内容:输入程序:本程程序一开始是是IO口中的的A口以流水灯灯工作,一旦旦有外部中断断请求,就是是B口以流水水灯工作,循循环一次后回回到被中断处处继续运行。程序如下:#includde #includde /*延延时 usvoid deelay_uus(intt t)do t-; whilee(t1);/*延延时 mssvoid deelay_mms(unssignedd int t)while(tt!=0)delay_uus(11442);t-;#pragmaa inteerruptt_hand
16、dler IINT_0:2 /外外部中断0执执行函数void IINT_0 (voidd) PORTC=0XFF; PORRTB=00X01; dellay_mss(10000); PORRTB=00X02; dellay_mss(10000); PORRTB=00X04; dellay_mss(10000); PORRTB=00X08; dellay_mss(10000); PORRTB=00X10; dellay_mss(10000); PORRTB=00X20; dellay_mss(10000); PORRTB=00X40; dellay_mss(10000); PORRTB=00X8
17、0; dellay_mss(10000); PORRTB=0XXFF; void maain(vooid)DDRA = 0xff;/*输出 */DDRB = 0xff;/*输出 */ DDRCC = 0xxff;/*输出*/ DDRDD = 0xxff; /*输出*/ PORTTA=0XFFF; PORTTB=0XFFF; PORTTC=0XFFF; PORTTD=0XFFF; MCUCR=00X02; /定定义外部中断断INT0为为下降沿产生生中断请求 GICRR=0X40; /中断屏屏蔽寄存器开开INT0 SEI(); /*开全局中中断 for (;) PORRTA=0X001; dell
18、ay_mss(10000); PORRTA=0X002; dellay_mss(10000); PORRTA=0X004; dellay_mss(10000); PORRTA=0X008; dellay_mss(10000); PORRTA=0X110; dellay_mss(10000); PORRTA=0X220; dellay_mss(10000); PORRTA=0X40; dellay_mss(10000);PORTA=0X80; dellay_mss(10000); 实验四 数码LLED 实验验一、 实验目的:1、了解数码管管的原理;2、熟悉数码管管的使用; 3、掌握握外部中断和和
19、数码管动态态显示的应用。二 、 实验仪仪器:ATmagge16实验验板 一块块PC机 一一台三、 实验原理:数数码管原理图图如下:多个数码管的动动态显示是利利用人的眼睛睛在瞬间无法法识别的原理理来实现在,如如电灯也是利利用这个原理理。四、 实验步骤及内容容:这个程序序是数码管动动态显示,按按INT0键键加1,一直直到数码管显显示为99999再重新计计数。实验程序如下: #incluude #includde int ledd=00x3f,0x006,0x55b,0x44f,0x666,0x66d,0x77d,0x007,0x77f,0x6f;/*显示符符0,1,22,3,4,5,6,77,8,
20、9,unsigneed intt i;int g,ss,b,q;/*延延时 usvoid deelay_uus(intt t)do t-; whilee(t1);/*延延时 mssvoid deelay_mms(unssignedd int t)while(tt!=0)delay_uus(11442);t-;#pragmaa inteerruptt_handdler IINT_0:2 /外外部中断0执执行函数void IINT_0 (voidd) i+; delaay_ms(15);/*键盘防防抖动 void mmain(vvoid) DDRD = 0xfff;/* alll outtputs
21、 */ DDRC = 0xfff;/* alll outpputs */ DDRB = 0xfff; /*all outpuuts */ PORTTB=0XFFF; PORTTC=0X000; PORTTD=0XFFF; MMCUCR=0X02; /定定义外部中断断INT0为为下降沿产生生中断请求 GICR=00X40; /中断屏屏蔽寄存器开开INT0 SEII(); /*开全局中中断 for (;)/*显示按键次次数 if(i99999) ii=0; g=i%10; /取个位位,取余 POORTC=00X01; POORTB=lledg; deelay_mms(1); s=i%1000/10
22、; /取十十位 POORTC=00X02; POORTB=lleds; deelay_mms(1); b=i%10000/1000; /取百百位 POORTC=00X04; POORTB=lledb; deelay_mms(1); q=i%100000/10000; / 取取千位 POORTC=00X08; POORTB=lledq; deelay_mms(1);/* for (i=0;i4;ii+) g=i%10; /取余 POORTC=|(1ii); POORTB=lledg;g=i/10; /取整整PORTC=00x00;)*/ 实验五 键盘接接口实验一、 实验目的:1、了了解IO口的的
23、结构; 2、熟熟悉键盘的程程序原理; 3、掌掌握键盘的使使用。二、实验仪器: MEGAA16实验板板 一块PC机 一一台三、 实验原理:在AAVR 单片片机中,当II/O方向设设置为输入,电电平被设置为为高电平时,一一旦外部接入入低电平,端端口电平被拉拉低,电平变变化会反映相相应端口PIINX寄存器器中,利用这这一特点,在在键盘中采用用设置行所对对IO口为输输出,高电平平,列所对IIO口为输入入,高电平。对对行所对IOO口电平逐个个设置为低电电平,此时列列线上某列电电平被拉低。通通过读取列线线上电平,计计算出所按键键值。四 实验程序#includde #includde /延时/void de
24、elay_uus( innt t) /us dot-;while(tt1); void deelay_mms(unssignedd int t) /mmswhile(tt!=0)delay_uus(11442); t-; unsigneed chaar ledd= 0X3F,/*00*/ /七段译码表表 0X06,/*1*/ 0XX5B,/*2*/ 0XX4F,/*33*/ 0XX66,/*4*/ 0XX6D,/*5*/ 0XX7D,/*6*/ 0XX07,/*7*/ 0XX7F,/*88*/ 0XX6F,/*99*/ 0XX77,/*A*/ 0XX7C,/*bb*/ 0XX39,/*C*/
25、0XX5E,/*d*/ 0XX79,/*E*/ 0XX71,/*F*/; /显示示符0,1,2,3,44,5,6,7,8,99,unsigneed chaar ledd_bufff=00x3f,0x3f,0x3f,0x3f,0x3f,0x3f; /显示缓冲区区unsigneed chaar scaan_keyy(voidd) /不做按按键释放检查查的键盘扫描描函数 unsignned chhar i,temp;DDRD=0XX0F; /设设置D口的高高四位为输入入,低四位为为输出PORTD=00XFf; /D口输出高高电平for(i=00;i4;i+) PORTD=(1i); /第ii为值为低
26、电电平delay_uus(5000);temp=PIIND&0XXF0; /temmp取D口高高四位的值if(tempp!=0xff0) /如有有键按下,延延时15mss delay_mms(15); /延时用来消消除显示抖动动 temp=PPIND&00xf0; /再读键键盘if(tempp!=0xff0)temp&=00xf0; switchh (temmp) /计算算键值 case 0xx70:teemp=155-(3-ii)*4;bbreak;case 0xxb0:teemp=144-(3-ii)*4;bbreak;case 0xxd0:teemp=133-(3-ii)*4;bbrea
27、k; casse 0xee0:temmp=12-(3-i)*4;brreak;defaultt:tempp=0x7ff; return temp; /返回回temp PORTD=0xff; return 0x7f; void poort_innit(vooid) /初初始化IO DDRA=00xff; PORTA=0xff; DDRC=00xff; PORTC=0Xff; DDRD=0xx0f;PORTD=00xff; void ddisplaay(voiid) /六六位数码管显显示unsigneed intt i=0;for(;i6;i+) PORTAA=led_buffi; /PA口为为段
28、选PORTC=(1i); /PC口口为位选 delayy_us(11000); PORTC=0X00;void maain(vooid)unsigneed chaar keyy1,keyy2; unsigneed chaar i;port_innit(); for(;) key1=sccan_keey(); /键键盘扫描if (keyy1!=0xx7f) do kkey2=sscan_kkey(); dispplay(); whille(keyy1=keey2); for (i=0;ii5;i+) /显示示 led_bbuff55-i=lled_buuff4-i; /按下下一次移一次次 led
29、d_bufff0=lledkeey1; /做led显显示转换 displayy(); /显显示实验六 模数转转换AD 实验一、 实验目的:1、了解IO口口的结构; 2、熟熟悉A/D的的特性; 3、掌掌握A/D的的使用。二、实验仪器:MEGA166实验板 一块PC机 一台台三、 实验原理:四、 实验步骤及内容容:#includde #includde #definee VREFF 4.9550unsigneed innt V=00;float VVin=0;unsigneed chaar ledd=00X3F,0X006,0X55B,0X44F,0X666,0X66D,0X77D,0X007,0
30、X77F,0X6F; /0-9unsigneed chaar ledd_putfff=0X3F,0X3F,0X3F,0X3F;/*延延时 ussvoid deelay_uus(intt t)do t-; while(tt1);/*延延时 mssvoid deelay_mms(unssignedd int t)while(tt!=0)delay_uus(11442);t-;/*.中中断.*/#pragmaa inteerruptt_handdler AADC_issr:15void AADC_issr(voiid)V=ADCL;V=(ADCHH8)+V; /读取取转换数值/*.系系统初始化.*/
31、Void cchushiihua(vvoid)DDRD=0XXFF; /位选选DDRB=0XXFF; /数码码管DDRA=0XXFE; /C00口电压输入入PORTD=00X00;PORTB=00XC0;PORTA=00X00;ADCSRA|=(1ADEN); /开开启ADSEI();/*.AAD初始化.*/void add_linkk(voidd) ADCSRAA|=(1ADSCC)|(1ADIEE); /启动转转换 ADCSRA|=(1ADPS00)|(1ADPSS1); /八分频ADCSRA|=(1ADATEE); /开启连续续模式使能ADMUX=00X40; /右右对齐,基准准电源VR
32、EEF。零通道道SFIOR=00X00; /开启启连续模式/*.计计算转换值.*/void leed_putt(voidd)unsigneed chhar srreg;unsigneed chhar i=0;unsigneed chhar f=0; unsigneed innt X=00;sreg = SREG; /保存全局局中断标志CLI(); /禁用中断断Vin=V*VVREF/11024; /转换数值X=(unsiigned shortt)(10000*Vinn);for(i=00;i4;i+) f=X%10;led_puttffi=ledf; X=X/10;led_puttff3=0X
33、800|led_putfff3; SREG=ssreg; /恢复全局局中断标志/*.数数码管扫描.*/void diisplayy(voidd)unsigneed chhar i=0; for(i=0;i44;i+) PORTB=led_pputffi;PORTD|=(1ii);delay_uus(30);PORTD=00X00;/*.主主函数.*/void maain(vooid) chushiihua(); ad_linnk(); for(;) led_puut();displayy();实验七 PWMM使用一、 实验目的: 1、熟悉PWWM的原理与与特性; 2、掌握PWWM的使用。二、实
34、验仪器: MEGAA16实验板 一块 PC机 一台三 实验目目的:输出频率固固定,占空比比可调的方波波,分别由按按键控制占空空比的增加,每每次增减量为为0.1。四 、实验原理理: 利用MEEGA16芯芯片内部8位位定时器的快快速工作模式式产生可调的的PWM,快快速PWM 模式(WGMM01:0 = 3) 可用来产生生高频的PWWM 波形。快快速PWM 模式与其他他PWM模式的的不同之处是是其单斜坡工工作方式。计计数器从BOOTTOM计计到MAX,然后后立即回到BBOTTOMM重新开始。对对于普通的比比较输出模式式,输出比较较引脚OC00在TCNT00与OCR0匹配配时清零,在在BOTTOOM
35、时置位位;对于反向向比较输出模模式, OC0 的动动作正好相反反。由于使用用了单斜坡模模式,快速PPWM 模式式的工作频率率比使用双斜斜坡的相位修修正PWM 模式高一倍倍。此高频操操作特性使得得快速PWMM 模式十分分适合于功率率调节,整流流和DAC 应用。高频频可以减小外外部元器件( 电感,电电容) 的物理尺尺寸,从而降降低系统成本本。工作于快快速PWM 模式时,计计数器的数值值一直增加到到MAX,然后后在后面的一一个时钟周期期清零。具体体的时序图为为Figurre 32。图图中柱状的TTCNT0 表示这是单单边斜坡操作作。方框图同同时包含了普普通的PWMM 输出以及及反向PWMM 输出。TCNNT0 斜坡坡上的短水平平线表示OCCR0和TCNT0 的比较匹配配。Figure 32. 快快速PWM 模式时序图图、计时器数值达到到MAX 时T/C 溢出出标志TOVV0 置位。如如果中断使能能,在中断服服务程序可以以更新比较值值。工作于快快速PWM 模式时,比比较单元可以以在OC0 引脚上输出出PWM 波形形。设置COOM01:00为2 可以产生生普通的PWWM 信号;为3 则可以产产生反向PWWM 波形。要要想在引脚上上得到输出信信号还必须将将OC0 的数数据方向设置置为输出。产产生PWM 波形的机理理是OC0 寄存器在O