AVR学习总结
AVR学习笔记
ATmega16中断表第一节课Avr单片机的每个引脚有三个寄存器来控制:DDRnx(输入输出控制寄存器1输出,0输入)PORTnx(引脚输出电平控制)PINnx(输入寄存器)第二节课AVR单片机的AD转换涉及寄存器:ADMUX sbit[7;6]参考电压选择,sbit[5] AD转换数据对齐方式选择,sbit[4:0]通道与增益选择;ADCSRA sbit[7]AD使能,sbit[6]AD开始转换,sbit[5]自动触发使能,sbit[4]AD 中断使能,sbit[3:0]分频设置;SFIOR(触发源的选择)sbit[7:5] (ADTS)选择触发源,ADCL,ADCH数据寄存器;初始化步骤:1:设置通道的IO口为输入(高阻);2:设置与AD有关的寄存器;3:开总中断,SREG=BIT(7);4:写中断函数(中断标号是15)第三节课AVR有三个定时计数器,T/C0,T/C1,T/C2;T/C0,T/C2是两个8BIT的计数器;T/C1定时计数器,普通模式时机寄存器:TCCR1B:2:0时钟选择TCNT1L,TCNTH:定时数据TIMSK :TOIE 中断使能位 使用方法1, 选择时钟源,TCCR1B ;2, 设计初值,TCNT1L ,TCNT1H ;3, 设置中断使能位;TIMSK{2},SREG{7} 4, 选中断号,写中断函数 5, (中断号9)CTC 模式如果输出波形,则设IO 位输出 设置波形模式和时钟源TCCR1B 设置输出模式TCCR1A根据需要设置上限OCR1ATCCR1A 设置输出口频率计算:()A OCR N ffclko112+∙∙=控制寄存器A TCCR1ACOM1A1:0: 通道A 的比较输出模式 COM1B1:0: 通道B 的比较输出模式COM1A1:0与COM1B1:0分别控制OC1A 与OC1B 状态。
如果COM1A1:0(COM1B1:0)的一位或两位 被写入"1”,OC1A(OC1B) 输出功能将取代I/O 端口功能。
avr体会
怎么样学好AVR单片机
哈尔滨工程大学 宋宝森 07-04-10
首先介绍一下为什么要学习AVR单片机!!
随着各IC厂商推出各种高性能的单片机,51单片机已经远远不能满足大家对高性能单片机的需求。ATMEL作为一个51系列单片机的大生产厂商,90年代中后期推出一款高性价比的RISC(精简指令集)单片机系列,就是当今很流行也很著名的AVR单片机,在各种高性能单片机的竞争中,脱颖而出,很受各界电子人士热爱。很多想学单片机的人都不敢学习AVR,觉得不好入门,其实不然,如果你使用C语言编程,入门都是一样的,而且当你学好后,不用像学习51的人,还要在学习一个高性能的单片机,这样很浪费时间。目前很多公司和学校已经开始转向AVR单片机了,相信在未来几年,AVR将会非常兴旺,所以学习AVR单片机将会很有前途。先说说AVR单片机的优点,相比经典的51系列来说,突出的优点主要有以下几点:
总得来说,只要你有信心,做事能坚持到底,有不成功不罢休的精神,不管你学习没学习过单片机,学好AVR单片机就是件非常容易的事。
下面我再简要介绍一下步骤:
一、找本书大概了解一下AVR单片机结构、功能。大概了解就行,不用看的很细。(五天)
二、找学习板练习编写程序,学单片机主要是练习编写程序,遇到不会的再请教别人或查书。(四十天)
一、速度快。AVR是精简指令集单片机,其速度可以达到1MIPS/秒,理论上是传统的51的12倍,实际上在10倍左右。
二、片上资源丰富。MEGA系列片上具备JTAG仿真和下载功能。片内含有看门狗电路、片内程序Flash、片内数据RAM、同步串行接口SPI、异步串口UART、内嵌AD转换器、EEPROM、模拟比较器、PWM定时计数器、TWI(IIC)总线接口、硬件乘法器、独立振荡器的实时计数器RTC、片内标定的RC振荡器等片内外设,可以满足各种开发需求。
AVR学习
AVR学习这次就为大家分享一下AVR的学习经验。
学习AVR单片机不是说看书就可以学会的,一定要有实操才学会(电脑不是有仿真软件么?有用的话我就不会这么说啦!继续看下去吧!)。
既然要实操就一定要有开发软件、开发板、编程器。
AVR的开发软件有很多,有AVR studio、Codevison AVR、GCC AVR、ICC、IAR for avr等等。
AVR studio是ATMEL的AVR单片机的集成环境汇编级开发调试软件,完全免费哦!一般来说我们是用GCC(WINAVR)配合来用,studio 它是一个汇编开发的软件,而GCC是一个编译器,两者配合着用就可以用C语言了。
大家可以百度一下GCC,这可不不是一个简单的编译器。
Codevison AVR这开发软件对于初学者来说也是不错的软件,如果你会Keil的话上手应该是不难的(不要问我,我也不会)。
ICC对于初学者来说挺好的,它可以很容易配置AVR 芯片,例如管脚方向、T0计数器、T1计数器、AD转换等工作状态(我刚开始学习也是用这个开发软件)。
IAR for avr用来ICC配合着用挺不错的,我现在就是用这两个软件配合来用,它和ICC的头文件差不多,就中断函数有点不一样。
不过个人建议还是先学习ICC或Codevison,IAR的话,挺好用,可以先用ICC 初始化然后复制到IAR。
不过用IAR有很多地方要注意,首先要注意的就是IAR 中AVR的头文件经常是有问题的,我用过的ATMEGA48和ATMEGA8的头文件都要经过一些小改动才可以通过。
例如编译出现以下这种状况:使用的芯片是ATMEGA48,程序没错但编译就出现这种状况。
经过多次检查,发现是iom48.inc这个文件有问题。
做出以下修改,就可以编译成功。
iom48.inc 修改如下:只要把iom48.inc 的头和尾都加//就可以编译成功了。
貌似ATMEGA8也要经过修改后才可以编译成功。
还要注意一点,IAR默认的输出文件不是HEX格式,是.a90,经过以下的修改后就可以输出HEX文件了:改了什么地方自己认真观察吧!ICC我也举个初始化的例子吧!ICC界面比较简单看到那个紫色的“按键”(叫按键吗?)按一下就出现下面的界面:学AVR中有个很重要的地方,那就是熔丝位编程。
AVR单片机一些学习笔记
AVR 单片机一些学习笔记
下面是自己在学习AVR 单片机时的学习经验,分享出来给大家,一起
学习。
1、AVR 单片机采用RISC 架构,8051 单片机采用CISC 架构。
前者速度为后者的2~4 倍,为流水线操作指令。
2、AVR 单片机有32 个通用寄存器(地址在RAM 区从$0000 开始到$001F),其中有6 个(最后6 个)合并为3 个16 位的X,Y,Z 寄存器,用来存放地址指针,Z 寄存器还可以寻址程序存储器。
3、哈佛结构,131 条机器指令。
4、延迟开机功能。
5、内部自带RC 振荡器,可提供1/2/4/8MHZ 的工作时钟。
6、FLASH+EEPROM+SRAM+SPI+USART+TWI+PWM+RTC+10 位ADC+模拟比较器+JTAG。
7、堆栈指针向下增长,51 单片机向上增长。
8、程序存储器按字来访问,擦除和写入以页为单位。
AVR学习资料整理
Atmega16引脚图I/O端口引脚配置I/O 端口寄存器的说明端口A数据寄存器-PORTA端口A数据方向寄存器-DDRA端口A输入引脚地址-PINAAVR的真正双向IO结构就复杂多了,单是控制端口的寄存器也有4个PORTx.DDRx,PINx,SFIOR(PUD位),不过功能也强劲多了。
作为通用数字I/O 使用时,所有AVR I/O 端口都具有真正的读- 修改- 写功能。
这意味着用SBI 或CBI 指令改变某些管脚的方向( 或者是端口电平、禁止/ 使能上拉电阻) 时,不会无意地改变其他管脚的方向( 或者是端口电平、禁止/ 使能上拉电阻)。
输出缓冲器具有对称的驱动能力,可以输出或吸收大电流,直接驱动LED。
所有的端口引脚都具有与电压无关的上拉电阻。
并有保护二极管与VCC 和地相连。
(很多数字器件都有保护二极管,在低功耗应用时要考虑保护二极管的电流倒灌的影响) 数据寄存器PORTx和数据方向寄存器DDRx为读/ 写寄存器,而端口输入引脚PINx 为只读寄存器。
但是需要特别注意的是,对PINx 寄存器某一位写入逻辑"1“ 将造成数据寄存器相应位的数据发生"0“ 与“1“ 的交替变化。
当寄存器MCUCR 的上拉禁止位PUD置位时所有端口引脚的上拉电阻都被禁止。
在( 高阻态) 三态({DDxn, PORTxn} = 0b00) 输出高电平({DDxn, PORTxn} = 0b11) 两种状态之间进行切换时,上拉电阻使能({DDxn, PORTxn} = 0b01) 或输出低电平({DDxn,PORTxn} = 0b10) 这两种模式必然会有一个发生。
通常,上拉电阻使能是完全可以接受的,因为高阻环境不在意是强高电平输出还是上拉输出。
如果使用情况不是这样子,可以通过置位SFIOR 寄存器的PUD 来禁止所有端口的上拉电阻。
在上拉输入({DDxn, PORTxn} = 0b01)和输出低电平({DDxn,PORTxn} = 0b10)之间切换也有同样的问题。
avr物流实训报告总结
avr物流实训报告总结本次实训中,我们选择了avr物流系统作为研究对象,并对其进行了详细的调研和分析。
在实训过程中,我们深入了解了avr物流系统的功能和特点,并进行了系统的设计和实现。
下面将对本次实训进行总结和反思。
avr物流系统是一款基于物流行业需求开发的软件,旨在提高物流企业的运作效率和管理水平。
通过对物流过程的全面监控和管理,该系统能够实现货物的准确运输、快速分拣和及时配送,有效降低物流成本,提升客户满意度。
在调研过程中,我们发现avr物流系统拥有一系列强大的功能,包括订单管理、仓库管理、运输管理、配送管理等。
通过这些功能,用户可以实时跟踪货物的流转情况,掌握库存情况,合理调配资源,提高物流效率。
此外,系统还支持对物流过程中的异常情况进行预警和处理,确保货物的安全和准时送达。
在系统设计和实现过程中,我们遵循了软件工程的基本原则,采用了模块化设计和面向对象的编程方法。
通过对系统的拆分和抽象,我们将复杂的物流过程分解为若干个模块,并为每个模块定义了清晰的接口和功能。
通过合理的模块划分和接口设计,我们实现了系统的高内聚低耦合,提高了代码的可维护性和可扩展性。
在实际操作中,我们采用了敏捷开发的方法,通过迭代和反馈的方式不断优化系统。
我们与物流企业进行了合作,收集了大量的需求和反馈,并及时进行了调整和改进。
在实训过程中,我们充分体现了团队协作的精神,通过分工合作,共同攻克了许多技术难题,并最终完成了一个功能完善、性能稳定的avr物流系统。
在总结和反思中,我们认为本次实训取得了很好的成果。
通过实际操作,我们深入了解了物流行业的需求和挑战,掌握了物流系统的设计和实现方法。
同时,我们也意识到了自身的不足之处,比如对某些技术的掌握还不够深入,对需求的理解和分析能力还有待提高。
在今后的学习和工作中,我们将进一步加强对物流系统的研究和学习,不断提升自己的技术水平和综合能力。
avr物流实训报告总结,通过本次实训,我们深入了解了avr物流系统的功能和特点,进行了系统的设计和实现。
AVR学习笔记
PC = progammer counter //程序计数器ACC = accumulate //累加器PSW = progammer status word //程序状态字SP = stack point //堆栈指针DPTR = data point register //数据指针寄存器IP = interrupt priority //中断优先级IE = interrupt enable // 中断使能TMOD = timer mode //定时器方式 (定时器/计数器控制寄存器)ALE = alter (变更,可能是)PSEN = progammer saving enable //程序存储器使能(选择外部程序存储器的意思) EA = enable all(允许所有中断)完整应该是 enable all interruptPROG = progamme (程序)SFR = special funtion register //特殊功能寄存器TCON = timer control //定时器控制PCON = power control //电源控制MSB = most significant bit//最高有效位LSB = last significant bit//最低有效位CY = carry //进位(标志)AC = assistant carry //辅助进位OV = overflow //溢出ORG = originally //起始来源DB = define byte //字节定义EQU = equal //等于DW = define word //字定义E = enable //使能OE = output enable //输出使能RD = read //读WR = write //写中断部分:INT0 = interrupt 0 //中断0INT1 = interrupt 1//中断1T0 = timer 0 //定时器0T1 = timer 1 //定时器1TF1 = timer1 flag //定时器1 标志 (其实是定时器1中断标志位)IE1 = interrupt exterior //(外部中断请求,可能是)IT1 = interrupt touch //(外部中断触发方式,可能是)ES = enable serial //串行使能ET = enable timer //定时器使能EX = enable exterior //外部使能(中断)PX = priority exterior //外部中断优先级PT = priority timer //定时器优先级PS = priority serial //串口优先级第一部分二极管发光的条件是正负极相差达1V以上。
avr单片机的总结
1、A VR单片机中断总结A VR单片机只是A TMEL公司推出的一款基于RISC指令构架的高性能、低功耗单片机。
ATmega16单片机具有21个中断源,如下表所示。
每一个中断源都有一个独立的中断向量作为中断服务程序的入口地址,而且所有的中断源都有自己独立的使能位。
如果全局中断IA VR单片机有3个外部中断,由引脚触发。
PB2(INT2),PD2(INT0)、PD3(INT1).。
需要注意:如果允许外部中断的话,即使是INT0,INT1、INT2这三个引脚都设为输出方式,外部中断也会触发。
INT0、INT1外部中断可以选择的触发方式有上升沿触发、下降沿触发以及低电平触发;INT2只有跳变沿触发,没有电平触发。
使用外部中断涉及到的寄存器有:MCU控制寄存器MCUCR,MCU控制欲寄存器MCUCSR,通用中断控制寄存器GICR,通用中断寄存器GIFR。
A VR单片机的中断响应时间最少为4个时钟周期。
在这4个时钟周期里,程序计数器PC的2字节自动入栈,而堆栈指针SP减2。
中断相关的寄存器:外部中断0触发方式选择6位—ISC2:外部中断2的触发方式,异步外部中断2由外部引脚INT2激发。
如果ISC2清零,则INT2的下降沿激活中断;如果ISC2置1,则INT2的上升沿激活中断。
INT2的边沿触发方式是异步的,只要INT2引脚上产生宽度超过50ns就会引起中断。
如果选择了低电平中断,则低电平必须保持到当前的指令完成才会产生中断。
而且只要引脚拉低,就会引发中断请求。
改变ISC2时有可能发生中断。
因此在寄存器GICR里清楚相应的中断使能位INT2,然后再改变ISC2,最后在重新使能中断之前,需要通过对GIFR寄存器的响应中断标志位INF2写“1”使其清零。
位7INT1:使能外部中断请求1.当INT1为1,且状态寄存器SREG的I标志置位的时候,相应的外部引脚中断使能。
MCU通用控制寄存器MCUCR的中断敏感电平控制ISC11和ISC10决定中断是由上升沿、下降沿、还是INT1电平触发的。
AVR串口学习
一.熟悉AVR单片机UART资源,首先从波特率和帧说起波特率:与51不同有单独的波特率发生器,不需要定时器来产生,节省了资源波特率计算公式,这里我采用IccAVR的配置功能,直接计算生成单片机支持的模式:异步正常模式,异步倍数模式,和同步模式,一般选第一种模式帧格式:起始位+数据位(5-9位可选)+校验位(可选)+停止位(1、2位) 空闲o ********* P 1 1通讯电路空闲时为高电平二、大概了解了下硬件资源后,就要了解软硬件的桥梁—寄存器了1.数据寄存器:数据来了要有个接受的地方吧,数据发送要有个数据发送的信封吧。
这就是数据寄存器UDR (RXB和TXB) 物理上为分开的,地址上是一样的。
就像写信和接信时,你家的地址只有同一个地址一样,但是写信和别人发给你的信封却有2个一样。
使用时自动控制的。
数据寄存器为空时才能发送数据,否则会无效。
数据进入后,进入移位寄存器,由引脚TXD一位位发出。
2.控制和状态寄存器UCSRARXC TXC UDRE FE DOR PE U2X MPCM接受完成置1 发送完成置1 数据为空标志帧错误1 接受数据校验位错误倍速模式多机通信读取数据清0 中断时自动清0 数据完全到移溢出1 1 1 地址位位寄存器中1UCSRB 设置相关中断的允许RXCIE TXCIE UDRIE RXEN TXEN UXSZ2 RXB8 TXB8接受中断允许发送中断允许空中断允许数据接受允许数据发送允许位数设置接受第9位RXEN,TXEN设置时会改变时普通IO口,或者是当做复用口用,在发送数据时设置下,数据全部发送后才生效RXB8,TXB8需要先读写出UCSRCURSEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL寄存器选择工作模式校验方式停止位和上面的UXSZ2设置写时需要设为1 1异步数据个数存在共用寄存器 00禁止11奇10偶 0为1个1为2个波特率寄存器:UBRRL UBRRHUBRRH和UCSRC共用了底4位加上UBRRL共12位设置后正在传的数据会被打断需要注意URSEL的设置:0 写入的比特率高4位1 写入的是寄存器的内容读UBRRH,第一次是比特率的内容在连续的2个时钟周期内再读一次就是UCRSC的内容使用时可以查速查表,直接用ICCAVR生成工具即可。
AVR单片机学习精通
AVR单片机学习精通单片机是构成单片机嵌入式系统的核心器件。
本章首先将介绍一般单片机的基本结构和组成,使大家对单片机芯片的内部硬件有基本了解和认识。
掌握了单片机的基本结构和组成,对学习、了解任何一种类型单片机的工作原理,编写单片机的系统软件以及和设计外围电路都是非常重要的。
AVR是美国ATMEL公司推出的一款采用RISC指令的8位高速单片机。
本章将以ATmega16为主线,介绍和讲述AVR单片机内核的基本结构、引脚功能、工作方式等。
深入的理解和掌握AVR的基本结构,对后续章节的学习、以及对实际的应用AVR单片机都是非常重要的。
单片机的基本组成单片机的基本组成结构单片机嵌入式系统的核心部件是单片机,其结构特征是将组成计算机的基本部件集成在一块晶体芯片上,构成一片具有特定功能的单芯片计算机—单片机。
一片典型单片机芯片内部的基本组成结构如图1-1所示。
外部中断外部数据/地址总线图1-1 典型单片机的基本组成结构从单片机的基本组成可以看出,在一片(单片机)芯片中,集成了构成一个计算机系统的最基本的单元:如CPU、程序(指令)存储器、数据存储器、各种类型的输入/输出接口等。
CPU同各基本单元通过芯片内的内部总线(包括数据总线、地址总线和控制总线)连接。
一般情况下,内部总线中的数据总线宽度(或指CPU的字长)也是标定该单片机等级的一个重要指标。
一般讲,低档单片机的内部数据总线宽度为4位(4位机),普通和中档单片机的内部数据总线宽度一般为8位(8位机),高档单片机内部数据总线宽度为16或31位。
内部数据总线宽度越宽,单片机的处理速度也相应的提高,功能也越强。
单片机基本单元与作用下面分别对单片机芯片中所集成的各个组成部分予以简要介绍。
1.MCU单元(Microcontroller Unit)MCU单元部分包括了CPU、时钟系统、复位、总线控制逻辑等电路。
CPU是按照面向测控对象、嵌入式应用的要求设计的,其功能有进行算术、逻辑、比较等运算和操作,并将结果和状态信息与存储器以及状态寄存器进行交换(读/写)。
AVR定时器学习笔记
0
0
0
0
1 普通模式
0xFF
立即
0xFF 比较匹配时触发 OC0
0
0
0
1
0 普通模式
0xFF
立即
0xFF 比较匹配时清零 OC0
0
0
0
1
1 普通模式
0xFF
立即
0xFF 比较匹配时置位 OC0
1
0
1
0
0 PWM,相位可调
0xFF
0xFF
0x00 PB3 为通用 I/O 引脚
1
0
1
0
1 PWM,相位可调
求定时时间
TS = {(MAX+1-TCNT0)* N }/Fclk
0.(A)
变量 N 代表预分频因子(1、8、64、或 1024),TS 定时时间,MAX 最大计数,Fclk 系统时钟
TCNT0 T/C0 的初始值;
求 T/C0 的初值
TCNT0 = MAX+1 – {(TS*Fclk)/N } (B)
第二部分:定时器 0 T/C0 定时器 0 有两个中断源 TIMER0 OVF(溢出中断)和 TIMER0 COMP(比较匹配中断),中断向量号分别为 10
和 20;在三个定时器中,T/C0 的中断级别最低。(PS:既然 TIMER0 OVF(溢出中断)比 TIMER0 COMP(比较匹配 中断)优先级要高,那么 T/C0 主要用在计数方面吧?^-^ ^-^) 1、 T/C0 的时钟源 T/C0 的计数时钟源可由来自外部引脚 T0(PB0)的信号提供,也可来自芯片的内部。时钟源
OCR0
立即
0xFF PB3 为通用 I/O 引脚
2
1
avr单片机学习心得
模式,这种区别仅对于开发人员才有意义。但从最终用户的角度看,Boot
Loader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载
然必须工作在这种模式下。下载(Downloading)模式:在这种模式下,目标
机上的BootLoader将通过串口连接或网络连接等通信手段从主机(Host)下
载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首
先被BootLoader保存到目标机的RAM中,然后再被BootLoader写到目标
Loader通常同时支持这两种工作模式,而且允许用户在这两种工作模式之间进
行切换。比如,Blob在启动时处于正常的启动加载模式,但是它会延时10
秒等待终端用户按下任意键而将blob切换到下载模式。如果在10秒内没有
用户按键,则blob继续启动Linux内核。
tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!
工作模式的区别。启动加载(Bootloading)模式:这种模式也称为”自主”
(Autonomous)模式。也即BootLoader从目标机上的某个固态存储设备上将
操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是
BootLoader的正常工作模式,因此在嵌入式产品发布的时侯,BootLoader显
机上的FLASH类固态存储设备中。BootLoader的这种模式通常在第一次安
装内核与根文件系统时被使用;此外,以后的系统更新也会使用BootLoader
的这种工作模式。工作于这种模式下的BootLoader通常都会向它的终端用户
avr学习笔记
MCU控制寄存器—MCUCRBit 1 – IVSEL: 中断向量选择IVSEL为"0―时,中断向量位于Flash存储器的起始地址;IVSEL 为"1―时,中断向量转移到Boot 区的起始地址。
实际的Boot 区起始地址由熔丝位BOOTSZ 确定。
为了防止无意识地改变中断向量表,修改IVSEL 时需要遵循如下过程:1. 置位中断向量修改使能位IVCE2. 在紧接的4 个时钟周期里将需要的数据写入IVSEL,同时对IVCE 写‖0‖执行上述序列时中断自动被禁止。
其实,在置位IVCE 时中断就被禁止了,并一直保持到写IVSEL 操作之后的下一条语句。
如果没有IVSEL 写操作,则中断在置位IVCE 之后的4个时钟周期保持禁止。
需要注意的是,虽然中断被自动禁止,但状态寄存器的位I并不会因此而受到影响。
Note: 若中断向量位于Boot Loader区,且Boot锁定位BLB02被编程,则执行应用区的程序时中断被禁止;若中断向量位于应用区,且Boot锁定位BLB12 被编程,则执行Boot Loader区的程序时中断被禁止。
有关Boot锁定位的细节请参见P241‖Boot Loader 支持RWW自编程,ATmega88 与ATmega168‖ 。
该位在ATmega48 中无效。
• 位0 – IVCE: 中断向量修改使能改变IVSEL 时IVCE 必须置位。
在IVCE 写入4 个时钟周期或IVSEL 写操作之后,IVC被硬件清零。
如前面所述,置位IVCE 将禁止中断。
代码如下:void Move_interrupts(void){/* 使能中断向量的修改*/MCUCR = (1<<IVCE); /* 将中断向量转移到boot区*/ MCUCR = (1<<IVSEL);}• 位7 – I: 全局中断使能Sei();全局中断使能,cli();对I清零。
• 位6 – T: 位拷贝存储位拷贝指令BLD 和BST 利用T 作为目的或源地址。
21IC-AVR学习笔记,AVR单片机教程
21IC-AVR 学习笔记,AVR 单片机教程AVR 学习笔记一、基本输出实验(电路原理图)
本实验包括七个例程:1、点亮LED 试验,2、流水灯试验,3、蜂鸣器试验,4、1 位数码管显示试验,5、四位数码管显示试验,6、1602 液晶显示试验,7、12864 液晶显示实验。
AVR 学习笔记二、基本输入和外部中断实验
本实验包括二个例程:1、检测按键,实现按键控制LED 的亮灭,2、外部中断实验,利用中断检测按键,并在数码管上显示。
AVR 学习笔记三、定时记数器0 实验
本实验包括五个例程:1、定时/计数器0 的计数实验,2、定时/计数器0 的定时实验,3、定时/计数器0 的比较匹配(CTC)实验,4、定时/计数器0 的快速PWM 实验,5、定时/计数器0 的相位修正PWM 实验。
AVR 学习笔记四、定时记数器1 实验
由于在定时/计数器0 的实验中我们已经学会了定时/计数器的定时、计数、PWM 等基本功能的使用方法。
而单片机中的定时/计数器的基本功能大致上是一样的。
主要区别只是在于对不同寄存器的设置。
所以在定时/计数器1 的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录中断学习 (2)E2PROM学习 (3)时钟系统及时钟源的学习 (5)系统复位学习 (5)I/O端口的学习 (6)中断学习中断的过程:CPU 检测中断的产生(总是在每条指令的最后检测中断请求),然后响应中断,进入中断服务函数处理。
CPU 检测到中断并不是立即响应,而是有条件的: 1. 设立中断请求触发器 2. 设立中断屏蔽触发器 3. 总中断是开放的4. CPU 现行指令结束后执行中断Mega 有20个中断源,包括3个外部中断(int0、int1、int2)和18个内部中断。
与中断有关的寄存器:GIFR 通用中断标志寄存器:GIFR :产生中断时由CPU 自动置1,响应后自动置0。
GICR 通用中断控制寄存器:GICR :位7—5为外部中断0、1、2使能,该位置1且全局中断使能置1即响应外部中断。
位4—0与外部中断无关,为中断向量标号的选择有关。
SREG 状态寄存器:SREG :全局中断使能标志位,置1时使能全局中断(asm (”SEI ”)),响应后应使其置0(asm (”CLI ”))。
MCUCR 单片机控制寄存器:MCUCR :Bit7—4Bit1、0MCUCSR 单片机控制和状态寄存器:MCUCSR :外部中断2触发方式设置:Bit6写0为下降沿触发,Bit6写1为上升沿触发。
外部中断的初始化可以为以下步骤:1. 设置外部中断的触发方式(0、1时设置MCUCR ;2时设置MCUCSR )。
2. (清零GIFR 寄存器对应的位,此步骤可省略。
另外,此寄存器可用来做可读寄存器,通过判断完成一些操作)。
3. 打开对应外部中断的控制位(GICR )。
4. 打开全局中断使能为I (SREG )。
5. 写中断服务函数。
格式为:#pragma interrupt_handler <func1> :<vector number> <func2> :<vector> … 阴影标注部分是必须的,func1是函数名,vector number 是中断向量标号,在头文件中定义的向量号一般前加 ”iv_中断源名称”,宏定义相当于直接使用向量号,但用起来意义明显。
注意:外部中断源的引脚一定要设置成输入作为中断检测的输入接口,而且一定要设置成带上拉电阻的方式(DDRD=0x00,PORTD=0xFF ),否则PD 端口一直为低电平就会一直触发中断。
在ICCA VR 中可以用Wizard 来生成服务程序,一个很简单的工具。
只需对生成代码做简单的修改即能完成相应的功能,节省的代码的书写,同时提高了编程的效率。
E 2PROM 学习Mega16有512Bytes 的E 2PROM ,用户可以通过操作其控制寄存器来实现对其读写即对E 2PROM 各存储单元的访问。
与E 2PROM 有关的寄存器:EEAR 地址寄存器(分为两个字节EEARH 、EEARL ):EEARH : EEARL :E 2PROM 的初值无定义,因此必须为其赋一个确定的数值。
EEDR 数据寄存器:EEDR :对E2PROM写操作保存的是将要写入的数据,对E2PROM读操作保存的是读出的数据。
EECR数据寄存器:Bit3-EERIE使能E2PROM准备好中断:若SREG的“I”为1是,置位EERIE将使能准备好中断,清0则禁止此中断。
在置位I和EERIE的前提下,清零EEWE则准备好中断即可发生。
Bit2-EEMWE主机写使能:当EEMWE为1时,在其后的4个时钟周期内置位EEWE 即可把数据写入;当EEMWE为0时,则操作EEWE不起作用。
在其后的4个时钟周期内硬件对其清零。
Bit1-EEWE写使能:当E2PROM准备好地址和数据后,置位EEWE即可把数据写入,但此时EEMWE必须为1。
Bit0-EERE读使能:当E2PROM准备好地址后,置位EERE即可把数据读入。
读操作执行后4个时钟周期才能执行下一条指令。
执行一个写操作的步骤如下:1.等待EEWE清零(有硬件完成清零)。
(while(EECR&BIT(EEWE)))2.将地址写入EEAR。
3.将数据写入EEDR。
4.置位EEMWE,在其后的4个时钟周期内置位EEWE。
执行一个读操作的步骤如下:1.等待EEWE清零(有硬件完成清零)。
(while(EECR&BIT(EEWE)))2.将地址写入EEAR。
3.置位EERE即可读出数据,读出的数据存在EEDR中。
注意:如果在写操作期间发生中断将会导致写擦做失败,如果一个操作E2PROM 的中断打断了另一个E2PROM操作,EEDR或EEAR可能被修改,引起读或写操作失败。
因此在主函数中在操作E2PROM期间要关闭全局中断(CLI()),操作完成后在打开全局中断(SEI())。
在头文件中包含eeprom.h,其中定义了几个有用的操作E2PROM的函数:void EEPROMReadBytes(int addr,void * ptr,int size)(1)void EEPROMWriteBytes(int addr,void * ptr,int size)(2) 对(1)其中addr是要读内部E2PROM的起始地址,ptr是读出数据存放数组的首地址,size是要读出的字节数。
对(2)其中addr是要写内部E2PROM的起始地址,ptr是写入数据存放数组的首地址,size是要写入的字节数。
#define EEPROM_READ(addr,dst) EEPROMReadBytes(addr,&dst,sizeof(dst)) #define EEPROM_WRITE(addr,src) EEPROMReadBytes(addr,&src,sizeof(src)) 参数的含义基本上同上面两函数,只不过在定义数组时要定义成char或unsigned char型的,正好保存一个字节长度。
同时,要定义数组的长度,这样就可以用此函数而省略一个参数。
时钟系统及时钟源的学习A VR的时钟系统包括:CPU时钟,I/O时钟,flash时钟,异步定时器时钟,ADC时钟。
A VR的时钟源包括:外部晶体/ 陶瓷振荡、外部低频晶振、外部RC 振荡器、标定的内部RC振荡器、外部时钟。
(另外,还有看门狗振荡器作为独立的振荡器为看门狗提供时钟。
)当PC端口的Bit6、Bit7(TOSC1和TOSC2)外接晶体(无需外部电容且针对32.768 kHz 的钟表晶体)时,此振荡器为T/C2提供异步时钟。
MCUCR单片机控制寄存器:MCUCR:SE休眠使能:为确保进入休眠模式,在执行SLEEP指令前必须将SE置位,MCU一旦唤醒即清除SE进入的休眠模式由SM2、SM1、SM0选择。
SLEEP的下一条指令。
一般情况下休眠模式可用掉电模式(010)和ADC噪声抑制模式(001)这两种。
系统复位学习Mega16有五个复位源:上电复位、外部复位(低电平复位,且持续时间至少1.5us)、看门狗复位、掉电检测复位、JTAG复位。
MCUCSR单片机控制和状态寄存器:ArrayMCUCSR:Bit4—0分别为JTAG复位标志、看门狗复位标志、掉电检测复位标志、外部复位标志(低电平复位,且持续时间至少 1.5us) 、上电复位标志。
这几个标志位发生复位时置位,除了上电复位标志在上电时复位将其清零,也可以写零将其复位,但上电复位标志只能通过写零将其复位。
WDTCR 看门狗定时器控制寄存器:(看门狗定时器由独立的1MHz 的片内振荡器驱动)WDTCR :WDTOE 看门狗修改使能(一旦置位,由硬件在紧接的4个时钟周期内自动清零), WDE 使能看门狗(置位时使能看门狗,复位时禁止看门狗,但禁止看门狗时WDTOE 必须置位才能复位WDE), WDP2、WDP1、WDP0 看门狗定时器预分WDR();用来复位看门狗。
为了防止无意间禁止看门狗,因此在禁用看门狗时必须跟一个特定的修改序列,即关闭看门狗的步骤如下:1. 在同一个指令内置位WDTOE 和WDE ,即使WDE已经置位。
2. 在紧接的4个时钟周期内对WDE 写零。
I/O 端口的学习I/O 端口寄存器的使用:在使用时要首先配置寄存器,DDRxn 为方向控制寄存器,配置为1时为输出,为0时为输入;PORTxn 是数据寄存器,当DDRxn 为1时PORTxn 置位则输出高电平清零则输出低电平,当DDRxn 为0时PORTxn 置位则使能上拉电阻清零则不使用内部上拉电阻(未连接的引脚一般使能内部上拉电阻);PINxn 为只读的数据输入寄存器。
每个端口都有第二功能,使用时要确定其功能。
SFIOR 特殊功能I/O 寄存器:SFIOR:BIT2-PUD :禁用上拉电阻。
置位即禁用,即使通过寄存器配置为使能。
端口A 的第二功能作为ADC 模拟输入的8个模拟输入通道。
端口B 的第二功能:端口C 的第二功能:端口D定时/计数(T/C)的学习Mega16单片机的定时计数资源有:两个8位定时/计数器T/C0、T/C2,一个16位定时/计数器T/C1。
都有对应的预分频器,其中T/C0、T/C1共用一个,T/C2也有自己的预分频器。
这三个定时/计数器分别有以下功能:1. T/C0能设置成8位的定时器或计数器模式,可以设置成比较匹配输出模式(其中比较匹配模式包括CTC 模式和PWM 模式(又包括快速PWM 模式和相位修正PWM 模式),其模式是通过WGM 的位设定的)。
2. T/C1能设置成16位的定时器或计数器模式;可以设置成比较匹配输出模式(其中比较匹配模式包括CTC 模式和PWM 模式(又包括快速PWM 模式,相位修正PWM 模式和相位频率修正PWM 模式),其模式是通过WGM 的位设定的),比较匹配输出有A 输出和B 输出两个通道;还可以设置成输入捕获模式。
3. T/C2能设置成8位的定时器模式(其中又可分为同步定时和异步定时,异步定时采用纽扣电池和手表晶振时可作为实时时钟RTC ),可以设置成比较匹配输出模式(其中比较匹配模式包括CTC 模式和PWM 模式(又包括快速PWM 模式和相位修正PWM 模式),其模式是通过WGM 的位设定的)。
定时/计数器T/C0TCCR0 T/C0控制寄存器:TCCR0:TCNT0 T/C0寄存器:TCNT0:OCR0 输出比较寄存器0:OCR0:定时/计数器T/C1TCCR1A T/C1控制寄存器A :TCCR1A :TCCR1B T/C1控制寄存器B :TCCR1B :TCNT1 T/C1寄存器:TCNT1H :TCNT1L :OCR1A 输出比较寄存器1AOCR1AH :OCR1AL :OCR1B 输出比较寄存器1BOCR1BH :OCR1BL :ICR1 输入捕捉寄存器1:ICR1H :ICR1L :定时/计数器T/C2TCCR2 T/C2控制寄存器:TCCR2:TCNT2 T/C2寄存器:TCNT2:OCR2 输出比较寄存器2:OCR2:ASSR 异步状态寄存器:ASSR :当AS2置位时时钟来源于TOSC1和TOSC2连接的振荡器,其与端口断开,不再是普通的I/O口,这两引脚连接手表晶振,频率为32.768kHz,同时也可配置外部电源作为当板子电源断开时的实时时钟RTC。