AVR单片机一些学习笔记.docx
AVR单片机一些学习笔记下面是自己在学习AVR单片机时的学习经验,提供出来给大家,一起学习。1、AVR单片机采用RISC架构,8051单片机采用CISC架构。前者速度为后者 的24倍,为流水线操作指令。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、程序存储器按字来访问,擦除和写入以页为单位。9、复位时,所有的I/O 处于没有上拉电阻的输入状态(高阻)。10、没有中断优先级控制寄存器,由中断向量表的地址决定优先级(地址越低, 优先级越高)。11、PORTB |= (12)D2 置 1, P0RTB&=(1<6)D6 清零。12> FLASH分两段:引导程序段(BootProgram Section) +应用程序段 (Application Program Section) o BPS 中可以使用 SPM 指令实现 IAP 功能。13、中断向量表位于FLASH程序存储器的最前面。14、1/0空间为连续的64个I/O寄存器空间,在数据存储器空间的映射地址 为$0020飞005F。访问1/0寄存器的两种方式:IN, OUT指令+对SRAM访问指令。15、单独的AVcc用于给PORTA的ADC做AREF。16、13位的程序计数器PC,正好满足16KB的寻址。17、AVR对片内SRAM的访问需要2个时钟周期。19、状态寄存器SREG:I:全局中断使能位。置1, CPU可以响应中断;清0, CPU禁止响应中断。清0 时,单独的中断触发控制的值保持不变。并且中断响应后,I由硬件清0(手动 置1实现中断嵌套),由RETI置1再响应其他中断。T:位复制存储。BLD, BSTo可以将通用寄存器组中的任何一位复制到T中,反 过来也可以。II:半进位标志位。用于BCD的运算。S:符号标志位。S=NV。不管溢出与否(溢出后N的表示就不正确了!),但S 总是能正确的表示计算结果的符号。V: 2的补码溢出标志位。溢出时,N取反才是真正的结果符号。N:负数标志位。直接取自运算结果的最高位。Z:零值标志位。运算结果为0,置1。C:进/借位标志。20、MCUCSR可以查看复位原因。21、掉电检测(B0D)复位,2.7V阈值,具有迟滞效应(间隙特性?)22、在FLASH的$0000H存放的是一条JMP或者RJMP指令,用来跳转到正式代 码入口。$0002H0028H(针对中断向量为一个字的,如果中断向量为两个字 $0002H1)050H)存放的是中断向量表,20个中断口算上第一个复位中断为21 个,主程序开始在$002AH。23、硬件开发工具:软件模拟仿真器,实时在板仿真器(ICE),实时在片仿真 器(JTAG) o24、每组I/O 口配置三个寄存器用来表征他们的状态:方向控制寄存器 DDRx(Data Direction Register),数据寄存器 PORTn,输入引脚寄存器 PINx。25、DDRx=l, I/O 口处于推挽输出工作方式,PORTn为1输出20mA电流,为0 吸纳20mA电流。DDRx=0, 1/0 口处于输入工作方式,将PINx中的电平读入 到DB上(PORTn用来设置是否使用内部上拉电阻,1为使用,0为不使用)在 SFIOR中有一位PUD, PUD=1全部1/0上拉电阻无效,PUD=0,上拉取决于 PORTn的设置。26、使用1/0 口时、一定要先配置1/0 口 °首先配置DDRx,确定1/0 口是输 入还是输出。根据实际情况,输入时需要配置是上拉还是下拉(上拉就是默认输 入是高电平,下拉就是默认输入是低电平)。27、1/0 口输入方式时,应该读取的是PINx的值。28、输出口操作:PORTA |= (1 <PORTA &= "(1« PORTAx) / 位置低PORTA = (1 <输入口操作:PINA & (1« PORTAx) / 位读取29、有三个外部中断(INTO, INTI, INT2),其中TNT2只支持边缘触发30、满足中断条件,AVR硬件自动将相应的中断标志位置1,并且由硬件自动 清除(仅对于局部中断有此功能,当然也可以手动软件清除,清除的方法是写 1),硬件也同时自动清除I标志位(缺省不能进行中断嵌套,SEI将I置1,使 能中断嵌套功能)。31、退出中断后,AVR至少要再执行一条指令后才能去响应其他被挂起的中断。32、中断响应至少需要4个CK才能开始运行中断向量表中的跳转指令(清I, 清中断标志位,压栈PC,中断向量送入PC),至于要真正开始运行用户的代码, 至少需要67个CK。中断返回RETI也需要4个CK(弹出PC,置SREG中的I为 Do33、在使能中断允许位之前,最好先将对应中断源的中断标志位清除,为了防 止在使能时,会立马产生一次“多余”的中断。34、INTO, INT1支持四种形式的中断触发:上升沿,下降沿,任意电平变化, 低电平(不带中断标志位,低电平并不影响INTFO和INTF1的值(保持为0)。 INT2只支持异步的上升沿和下降沿触发(常用作唤醒MCU功能)。35、中断初始化步骤:配置中断触发类型(MCUCR,MCUCSR),使能对应的中断 (GICR),清除对应的中断标志位(GIFR),使能全局中断全sm( “SEI”)。AVR STUDI06中的中断写法:SIGNAL(xx) ) (x为中断向量号)或者ISR(xx) 。36、T/CO和T/C2可产生PWM,频率发生器,外部事件计数器(仅T/CO), 10位 时钟预分频器,溢出和比拟匹配中断源,允许用32. 768kHz晶体作为独立的计 数时钟源(仅T/C2)。37、时钟源和51单片机差不多:(CS 2:0共八种选择),停止计数,上升沿或 下降沿,10 位预分频器(1/1, 1/8, 1/64, 1/256, 1/1024)。38、TCNTO (8位)寄存器用来存放计数数值,如果在计数器运行期间写入数值, 那么在下一个定时时钟周期中会阻塞比拟匹配(丧失一次TCNTO和OCRO的匹配 操作)。39、OCRO中的数据会一直和TCNTO中的数值进行比拟,如果匹配,将产生一 个比拟匹配的中断申请或者改变0C0的输出逻辑电平。40、TIMSK 中的 0CIE0 (OutputCompare Interrupt Enable), TOIE (Timer Overflow Interrupt Enable)分别为比拟匹配中断允许标志位和溢出中断允许 位,当I被置位时,满足条件即可触发对应的中断。41、TIFR 中的 0CF0(0utputCompare Flag)和 TOVO (Timer Overflow)分别为比 较匹配标志位和定时器溢出标志位。42、TCCR中的WGM1:O决定T/CO的四种工作方式:普通模式,比拟匹配时定 时器清0,两种PWM模式。COM1:O比拟匹配输出方式的作用取决于T/CO的工 作方式。普通模式(WGM1:O=O):计数到OxFF会产生溢出中断,TOVO置1。比 较匹配清 0 计数器 CTC 模式(WGM1:0=2) : f=f (I0)/(2N(l+0CR0), TCNTO 和 OCRO匹配,匹配后TCNTO清0重新计数,同时置OCFO为1,便于产生中断。在 中断中改变OCRO的值,在0C0中可以输出可变的高低电平信号。快速PWM模式 (WGMl:0=3): f=f(I0)/(256N),TCNT0 从 0 计数到 OxFF,然后重新开始计数, 如果匹配OCRO那么根据COM1:0中的设置值分别置位或者清00C0,以此来输出 PWM波形。相位可调PWM模式(WGM1:O = 1):双向计数器,所以最高PWM频率 比快速PWM模式慢了一半。43、T2定时器的分频系数与T0不同,注意区别。44、T1定时器在读取数据时,先读低八位,再读高八位。在写入数据时,先 写高八位,再写低八位。就像对高位压栈一样。45、由于T1可以修改计数器的上限值(TOP),所以可以产生频率可变的PWM波 形,而T0/T2定时器无法做到这一点。46、T1的工作模式由WGM13:O决定,由此可以看出T1有16种工作模式。普 通模式(WGMl3:0=0)。CTC 模式(GWM1 3:0 =4 或 12)。快速 PWM 模式 (GWM13:O=5, 6, 7, 14, 15)有两路同时输出,0C1A, OCIBo47、口输入捕捉功能:触发信号由ICP1输入或者又模拟比拟器ACO输入。触 发时,TCNT1的值被写入到ICR1中置位1CF1。此外,ICNC (Input Capture NoiseCanceler)为噪声抑制功能,实现原理就是延迟4个CK检测电平变化,如 果连续4个CK不变,那么认为是真正的触发。ICES (Input Capture Edge Select) 为触发边缘的选择,0为下降沿,1为上升沿。48、模拟比拟器(正极 AINO 和负极 AIN1), SFIOR(Special Funciton 10 Register)中的 ACME (Analog Comparator Multiplexer Enable)模拟比拟多路 使能,置1并且ADC失能,比拟器负极接到ADC的多路开关。置0,比拟器负 极接到 AIN1。ACSR(AnalogComparator Control and Status Register)模拟比 较器控制和状态寄存器。ACD(AnalogControl Disable)置1时,切断模拟比拟 器的开关。在改变设置时,应先失能ACIE,禁止产生模拟器比拟中断。ACO (Analog Comparator Output)模拟比拟器输出。ACIS1:O (AnalogComparator Interrupt Select)模拟比拟器中断模式选择。49、AVCC为ADC模块的独立电源。参考电源可选择片内2. 56V, AVCC或者外部 参考电源。50、ADMUX(ADC 多路复用选择寄存器),ADLAR (ADC LeftAdjust Result)结果 左对齐。ADCSRA(ADC控制和状态寄存器A), ADEN, ADC使能位。ADSC(ADC Start Conversion)开始转换位。ADATE(ADC Auto Trigger Enable)自动触发开 始转换,信号源由SFIOR的ADTS位决定。ADPS2:0预分频选择位。51、如果AVREF接到外部电源,那么就不能使用内部参考电源。52、ADC模块在使能ADATE (自动触发转换)后,利用T0的溢出中断来触发开始 转换,一定要开启T0的中断允许位(TOIEO),否那么无法触发转换。53、一次正常的ADC转换过程需要13个采样时钟,假定ADC采样时钟频率为 200kHZ,那么最高的采样频。率为200kHz/13=15.38妹HZ,所以由香农定理, 被测信号的最高频率为7. 7kHZo54、通用同步/异步串行接收/发送器(Universal Synchronous and Asynchronous Serial Recevier andTransimitter)支持四种工作模式:普通异 步模式、双倍速异步模式、主机同步模式和从机同步模式。UCSRC中的UMSEL(U Mode Select)位用于选择同步或异步模式。UCSRA中的U2X用于控制是否使用 倍速模式。55、波特率计算公式:BAUD=fosc/(16(UBRR+l)o56、UCSRA 中的 UDRE(U Data Register Empty)置 1 时(数据寄存器为空),UDR 才能够被写入,一旦被写入,硬件自动将其中的内容送到TXD上串行移出。RXD 和TXD均可以产生相应的中断,并在进入中断后标志自动清0o57、由于UBRRH (U Baud Rate Register)和UCSRC的物理地址相同,只是在 最高位URSEL的不同,而写操作和读操作的对象不同。当URSEL为0时,对象 为UBRRH;当URSEL为1时,对象为UCSRCo (读UCSRC时,需要连续读两次才能 得到结果,第一次读的是UBRRH的值)。58、USART的初始化包括:设置波特率,使能接收和发送器,设置帧格式。数据发送:whiled (UCSRA& (1 « UDRE) ; UDR = data;UDRE 在 UDR 被写入 值后被硬件自动清3如果在UDR空中断没有对UDR赋值,那么UDRE没有清0, 退出中断后会再次触发中断。但是TXC中断可以硬件自动清0TXC标志数据接收:while(! (UCSRA & (1 « RXC) ; data = UDR;RXC 在 UDR 数据被读 出后被硬件自动清3所以在RXC中断时必须读取UDR,以清0RXC。或者手动 清 0RXCTXD和RXD功能由TXEN和RXEN的设置来开启和关闭59、如果UCSRA中的FE, PE, DOR在RXC中断中需要读出进行错误检测,那么 一定要先读UCSRA再读UDR60、串行外设接口(Serial Peripheral Interface, SPL飞思卡尔公司提出), 两线串行接口 (Two-wireSerial Interface, TWI) o SPI 一般有四根信号线: MOSI, MISO, SCLK, /SS.可以想象一下主机和从机从MOSI到MISO收尾相连形成环 (本质就是串行移位呗),当数据全部交换完毕后,主机拉高/SS,停止SPI传 输。这就是为什么SPI比TWIQ2C)快的原因:因为数据是全双工,并且数据走 不同的通道。61、SPI有四种工作模式,取决于同步时钟的极性(Clock Polariy)和同步时 钟的相位(Clock Phase) 2个参数。62、SPI的主机方式最高速率为(CK/2),从机方式最高速率为(CKI/4)63、数据寄存器SPDR。在读SPDR时' 读取的是缓冲寄存器内容;写SPDR时、 写到移位寄存器中。一旦将数据写入SPDR,硬件自动传输一次SPI通信,如果 中断允许,那么进入SPI中断。64、SPI速率一般为1MHZ,最高可达10MHZ65、TWI工作在被控模式时,CPU频率fcpuclock必须大于TWI时钟线SCL频 率的16倍。SCL的频率:(在主机模式下,TWBR应大于10.另外特别需要注意 的一点:指的不是4的TWPS次方,应该是按照分频表格,将表格中的1, 4, 16, 64替换整体)66、TWINT中断标志位,当其被置位时,时钟线SCL被拉低,并且执行中断向 量时,标志不会清0,只能靠手动软件清0。67、如果TWINT被置位,表示正在传送数据,此时如果写入TWDR,那么 TWWC (写冲突)会被置位。也就是说当TWINT被置位时,TWDR应该保持稳定,这 和I2C的协议是一致的。68、TWAR(地址寄存器)的高7位用于存储自己的地址,最后一位TWGCE(TWI General Call Recognition Enable)为地址匹配成功使能位。如果地址匹配成 功,将会产生一次TWI中断69、在12c的TWI寄存器设置中,不能使用|赋值,必须整体赋值70、CK0PT当系统频率较高时或者要求抗干扰能力强,设置为1。如果系统频 率低,设置为0,这样可以减少电流的损耗。71、片内EEPRCM执行读操作时,CPU停止运行4个时钟周期。而在执行写操 作时,CPU停止运行2个时钟周期。