AVR 学习.doc_第1页
AVR 学习.doc_第2页
AVR 学习.doc_第3页
AVR 学习.doc_第4页
AVR 学习.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

第一章 通用I/O端口的结构与应用1 AVR单片机I/O口引脚配置表工作状态DDRx.nPORTx.nPINx.n功能描述输入状态00读入端口引脚电平状态端口处于输入状态,内建上拉电阻无效1端口处于输入状态,内建上拉电阻打开输出状态10对PINx不影响端口状态端口输出低电平“0”1端口输出低电平“1”设计电路时,如果良好利用AVR内部的I/O口上拉电阻,可节省外部的上拉电阻。注:I/O口在使用时还需注意一组端口的电流综合不能超过一定限额,具体数值请查询数据手册。例:#include /AVR-LIBC总控头文件Unsigned char port_value;/定义一个无符号字符型变量DDRD = 0xFF;/设置PD0PD7均为输出端口PORTD = 0xA3;/在PD端口输出0xA3(0b10100011)DDRD = 0x00;/设置PD0PD7均为输入端口port_value = PIND; /读入PD端口状态到变量port_value2 端口的位操作在以一个完整字节操作PC口相关寄存器是,ATmega48单片机会自动屏蔽对于“不存在”的PC6、PC7的操作,免除了我们使用位操作。在使用取反运算是,需要将其与“逻辑非”运算符“!”区别。逻辑非操作只关心操作数是否为0,若为0就返回一个非0的值,取反操作则是对操作数执行“按位逐个取反”的操作。在macros.h头文件中,定义了一个“#define BIT(x)(1(x)”宏,用该宏来操作位变量,编译后生成的代码质量更高。如下例:#define PORTA0 0#define PORTA1 1#define PORTA2 2#define PORTA3 3#define PORTA4 4#define PORTA5 5#define PORTA6 6#define PORTA7 7在使用前,应在头文件加入“#include macros.h”定义。如要将PORTA7清零,可以使用以下语句:PORTA&=BIT(PORTA7);如果需要将PORTA7置位,可以使用以下语句:PORTA|=BIT(PORTA7);这样对I/O端口进行位操作,比较直观,且生成的代码能够充分利用AVR对I/O端口操作的位指令,生成高质量的代码。3上拉电阻的使用当AVR单片机I/ 0口片内的上拉电阻使能时,I/ 0引脚被外部上拉电阻拉高为高电平;当I/ 0引脚与地线短接,为低电平状态。上拉电阻起到了使I/O在按键释放状态下拉高引脚的作用,同时还起到了限流的作用,通常取值在550 K。第二章 中断系统及其应用中断响应过程:在单片机中,通常断电的保护和恢复会有单片机内部的硬件电路自动实现,但对于中断现场的保护和恢复,则需要程序员在编写中断处理程序时小心处理。中断向量:由于一个中断向量通常仅占几个字节或一条指令的长度,所以在中断向量区一般不能直接放置中断服务程序。中断服务程序一般放置在程序存储器的其他地方,而在中断向量处放置一条跳转到中断服务程序的指令。这样,CPU响应中断后,首先自动转向执行中断向量处的转移指令,再跳转到真正中断服务程序。中断优先级:对于中断优先级的确定,通常是由单片机的硬件结构规定的。一般的确定规则方式为:某中断对应的中断向量地址越小,其中断优先级越高。AVR不支持软件对中断控制寄存器的设定。中断嵌套:AVR的硬件系统不支持自动实现中断嵌套的处理。如果在系统设计中,必须使用中断嵌套处理,则需要由用户编写相应的程序,通过软件设置来实现中断嵌套的功能。Cli()/* 清0使能位I,以禁止全局中断 */Sei()/* 置1使能位I,以允许全局中断 */第三章 定时/计数器的结构与应用T/C0计数寄存器TCNT0:TCNT0是T/C0的计数值寄存器,可以直接被MCU读/写访问。写TCNT0寄存器将在下一定时器式中周期中阻塞比较匹配。因此,在计数器运行期间修改TCNT0的内容,有可能丢失一次TCNT0与OCR0的匹配比较操作。输出比较寄存器AOCR0A/BOCR0B:输出比较寄存器A/B包含一个8位的数据,不间断地与计数器数值TCNT0进行比较。匹配事件可以用来产生输出比较中断,或者用来在OC0A/ OC0B引脚上产生波动。T/C0中断屏蔽寄存器TIMSK01) 位2 OCIE0B: T/C0输出比较匹配B中断使能当OCIE0B和状态寄存器的全局中断使能位I都为“1”时,T/C0的输出比较匹配B中断使能。当T/C0的比较匹配方式,即TIFR0的OCF0B置位时,中断服务程序得以执行。2) 位1 OCIE0A: T/C输出比较匹配A同上。3) 位0 TOIE0: T/C0溢出中断使能当TOIE0和状态寄存器的全局中断使能位I都为“1”时,T/C0的溢出中断使能。当T/C0发生溢出,即TIFR0的TOV0置位时,中断服务程序得以执行。T/C0中断标志寄存器TIFR01) 位2 OCF0B: T/C0输出比较B匹配标志当T/C0与OCR0B(输出比较寄存器0B)的值匹配时,OCF0B置位。此位在中断服务程序里硬件清零,也可以对其写1来清零。当SREG中的为I、OCIE0B(T/C0比较B匹配中断使能)和OCF0B都置位时,中断服务程序得以执行。2) 位1 OCF0A: T/C0输出比较A匹配标志同上3) 位0 TOV0: T/C0溢出标志T/C0溢出时TOV0置位。执行相应的中断服务程序时此位将被硬件清零。此外,TOV0也可以通过写1来清零。当SREG中的为I、TOIE0(T/C0溢出中断使能)和TOV0都置位时,中断服务程序得到执行。T/C0控制寄存器A TCCR0A8位寄存器TCCR0A是T/C0的控制寄存器A,用于选择计数器的工作模式和比较输出的方式。1)位1:0 WGM01:0 :波形产生模式这几位与TCCR0B寄存器的WGM02结合起来控制计数器的技术序列,计数器的最大值TOP,以及产生何种波形。2) 位7:4 COM0x 1:0: 比较匹配A/B的输出模式控制这些位决定了比较匹配发生时输出引脚OC0A、OC0B的电平。T/C0控制寄存器B TCCR0B位2:0 CS02:0:时钟选择CCT模式控制定时中断周期使用CTC模式可以避免在定时器溢出中断中重装初值,用软件重装初值的方法会不可避免的带来误差,所以如果要求严格的定时间隔的话,应该使用CTC模式。定时器工作比CTC模式时,会不断将TCNT0技术值与OCRx值进行比较,比较匹配时产生比较匹配中断,这个中断信号几个作为定时时间到的信号,通知程序处理定时认为。使用该模式的要点在于确定比较匹配寄存器的值和分频系数。PWM波的参数及应用要点:(1)首先应根据实际的情况,确定需要输出的PWM波的频率范围。这个频率与控制对象有关。如输出的PWM波用于控制灯的亮度,鱼油人眼不能分辨42Hz以上的频率,所以PWM的频率应高于42Hz。PWM波的频率越高,经过积分器输出的电压也越平滑。(2)同时还要考虑占空比的调节精度。PWM波占空比的调节精度越高,经过积分器输出的电压也越平滑。但占空比的调节精度与PWM波的频率是一对矛盾,在相同时钟频率时,提高占空比的调节精度,将导致PWM波频率的降低。(3)由于PWM波的本身还是数字脉冲波,其中还有大量丰富的高频成分,因此在实际使用中,还需要一个号的积分器电路,如采用有源低通滤波器,或多阶滤波器。第四章 ADC接口单片机中与A/D相关的引脚:1、A/D模拟供电段AVcc这是一个电源输入引脚,为A/D模块和PC0至PC3端口提供电源。在不适用A/D模块的情况下,该引脚可直接接至Vcc引脚上;当适用A/D模块时,应通过一个低通滤波器将引脚与Vcc连接起来。这样做的目的是为了避免数字电路运行时引入的噪声通过电源线对A/D部分造成干扰。2、A/D参考电压AREF这个引脚上所接入的电压将会被作为参考电压,作为A/D转换的基准源,ATmega48的A/D模块还可以使用AVcc或内部的1.1电压基准源作为参考源。当选择AVcc或内部1.1V电压基准源时,AREF引脚上的电压就是AVcc的电压值或者1.1V,这时通常将该引脚通过一个0.1uF的电容接地;当选择AREF引脚上的电压作为参考电压时,该引脚可以接入任何满足要求的参考源。单片机与A/D相关的寄存器ADC多路复用选择寄存器 ADMUX用于选择参考电压(位7:6)、转换结果的对其方式(位5)和输入通道。位3:0 MUX3:0模拟通道选择位通过这几位的设置,可以对连接到ADC的模拟输入进行选择。如果转换过程中改变这几位的值,那么只有到转换结果(ADCSRA寄存器的ADIF置位)后新的设置才有效。ADC控制和状态寄存器A ADCSRA1)位7 ADEN:ADC使能在转换过程中关闭ADC将立即中止正在进行的转换。2)位6 ADSC:ADC开始转换在单次转换模式下,ADSC置位将启动一次ADC转换。在连续转换模式下,ADSC置位将启动首次转换。第一次转换需要25个ADC时钟周期,而不是正常情况下的13服务。地刺转换执行ADC初始化的工作。在转换进行过程中杜旭ADSC的返回值为“1”,知道转换结束。ADSC清零不产生任何动作。3)位5 ADATE:ADC自动触发使能触发信号源通过ADCSRB寄存器的ADC触发信号源选择位ADTS设置。4)位4 ADIF:ADC中断标志在ADC转换结束后,且数据寄存器被更新后,ADIF置位。如果ADIE及SREG中的全局中断使能位I也置位,ADC转换结束后中断服务程序即得以执行,同时ADIF硬件清零。此外,还额可以通过向次标志写1来清ADIF。注:如果对ADCSRA进行读 修改 写操作,那么待处理的中断会被进制。5)位3 ADIE:ADC中断使能6)位2:0 ADPS:ADC中断预分频选择位ADC控制及状态寄存器B ADCSRB1) 位7,5:3 Res:保留位2) 位2:0 ADST2:ADC自动触发源ADC数据寄存器 ADCL和ADCH读取ADCL之后,ADC数据寄存器一直要等到ADCH也被读出才可以进行数据更新。数字输入禁止寄存器0 DIDR0位5.0 ADC5D.ADC0D:ADC5.0数字输入禁止如果这几位为“1”,那么对应ADC引脚的数字输入缓冲被禁止,PIN寄存器的对应位状态将为“0”。如果这几位引脚世家了模拟信号,且当前应用不需要这些管脚提供数字输入缓冲器时,应向这几位写“1”来降低数字输入缓冲器的功耗。ADC的引脚ADC7和ADC6没有数字输入缓冲器,且不需要数字输入禁止位。第五章 单片机通用程序设计1 模块化1)一个模块是一个.c文件和一个.h文件的结合。头文件(.h)是对于该模块接口的声明,源程序文件(.c)是模块功能的实现;2)某模块提供给其它模块调用的外部函数及数据需在.h文件冠以extern关键字声明;3)模块内用到的函数和全局变量需在.c文件开头冠以static关键字声明,这么做的目的在于隐藏实现的细节,使得模块的用户只关心模块向外提供了什么样的功能,而不需要关心模块实现这些功能的方法;如果以后修改了模块的实现方法,只要模块提供的功能没有改变,就不需要修改用户代码;4)用药不要在.h文件中定义变量。定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念;二声明则只是告诉该声明的模块在连接阶段从其他模块寻找外部函数和变量。2 软件编写1)建立主循环框架函数main.c对于嵌入式系统,程序在微控制器一通电就开始运行,知道断电的时候停止运行。因此,嵌入式系统程序通常都是在通电时执行一些系统初始化工作,然后重复运行任务,其典型结构是一个超级循环,代码如下:#include /AVR-LIBC总控头文件#include Int main(void)System_Init();/适当的地方定义Sei();/全局中断使能/super loopWhile(1)System_Task();/适当的地方定义2)编写通用内存管理模块对于规模稍大的程序,内存管理是一个非常关键的问题。程序中对内存的分配有两种,静态分配和动态分配。如变量定义、数组定义等在程序编写时就已经能够定下来的内存需求,编译器就静态的为我们分配了固定的内存空间。对于大多数的单片机程序而言,使用静态内存就能满足我们的需求了。对于动态内存分配,我们可以再需要时才请求分配内存,分配的内存大小是哦我们需要的大小,在C语言标准库里,通过malloc和free函数提供动态内存分配的支持,但他们的代码占用空间过大。因此,需要建立一个简单的内存管理模块,实现动态内存管理。3)编写通用列队模块队列是一种数据结构,在单片机编程中经常用到,它的基本特点是“先进先出”。在单片机世界里,也经常遇到有大量任务等单片机处理,但单片机目前又处于忙碌状态,无法立刻解决完所有的任务,这时任务就需要排队等待物理,这可以借助队列来实现。所以建立一个通用的队列模块是非常重要的。第六章 串行SPI接口应用1 通信基础知识1)并行传输:为了在两个系统A、B之间传输数据,我们用多条线路将二者连接起来,是的构成要传送的数据的各个二进制位在多条线路上同时传送,这样的传输方式就是并行传输。缺点:硬件线路连接复杂,不利于系统的微型化;抗干扰能力差;不适合远距离系统级的数据传输。2)串行传输串行传输是将构成字符的二进制位序列在一条信道上以位(码元)为单位,按时间顺序先后一次传输的一种方式。要正确进行串行传输,必须要解决通信双方的“同步”问题。这里的“同步”包含2方面:1发送和接收方的时钟频率相同,也即发送二进制位和接收二进制位的速率必须一致。2发送和接受方法必须引入某种同步机制,是的接收端能够这却识别数据帧的开始喝结束,避免二进制位流组装成帧时的“错位”。3)与通信有关的一些基本概念一般情况下,我们称采用专门的信号线用于通信同步的通信方式为同步通信方式;省略该信号线而采用其他方式完成通信同步的通信方式为异步通信方式。2 SPI串行总线介绍1)SPI总线的组成SPI:Serial Peripheral Interface,串行外围设备接口。SPI是一个同步通信接口,所有的传输都参照一个共同的时钟,这个同步时钟信号由主机产生,接受数据的外设(从机)使用时钟对串行比特流的接收进行同步化。一个典型的SPI总线系统包括一个主机(通常是处理器)和一个从机(通常是一个外围设备芯片),双方之间通过4根信号线相连,分别是主机输出/从机输入(MOSI)、主机输入/从机输出(MISO)、串行时钟(SCLK或SCK)、从机选择(SS或CS)。2)SPI有如下特点:(1)主机控制具有完全的主导地位。它决定着通信的速度,也决定着何时可以开始和结束一次通信,从机只能被动的响应主机发起的传输。(2)SPI通信是一种全双工高速的通信方式,从通信的人和一方来看,写操作和读操作都是同步完成的。需要注意的是:正确的操作方式是先拉低SS信号,主机再向移位寄存器写入数据。3与SPI相关的寄存器1)SPI控制寄存器SPCR位7 SPIE:SPI中断使能位6 SPE:SPI使能位5 DORD:数据次序:置位时数据的LSB首先发送;否则数据的MSB首先发送位4 MSTR:主/从选择MSTR置位时选择主机模式,否则为从机。如果MSTR为“1”,SS配置为输入,也被拉低,则MSTR被清零,寄存器SPSR的SPIF置位。用户必须重新设置MSTR进入主机模式。位3,2 CPOL,CPHA:二者决定了SPI的工作模式位1,0 SPR1,SPR0:与SPI2X一块用于对SPI时钟速率选择2)SPI状态寄存器SPSR位7 SPIF:SPI中断标志串行发送结束后,SPIF置位。如果SPI为主机,SS配置为输入,且被拉低,SPIF也将置位。进入中断服务程序后SPIF自动清零。或者可以通过先读SPSR,紧接着访问SPDR来对SPIF清零(读取SPSR的操作将会自动清除SPIF位)位6 WCOL:写碰撞标志位0 SPIX3)SPI数据寄存器SPDR4 SPI接口设计的应用要点1)初始化(1)选择SPI的主从机模式。要注意保证整个系统中同一时刻只能有一个主机。(2)设置通信速率。AVR作为主机使用时,最高速率不能超过单片机时钟频率的1/2,当作为从机时,对速率的设置无聊,但要保证输入的SCL速率不高于本机的时钟频率的1/4。(3)设置SPI接口工作模式,这主要是选择正确的时钟相位和时钟极性。(4)设置数据的串出顺序,按照通信各方的要求,选择LSB或MSB先发送(5)配置SPI引脚的数据方向(6)使能SPI口2)SS引脚的处理需要注意的是:(1)在主机模式下,SS引脚方向的设置为不影响SPI接口的工作方式,尽量设置成输出方式。(2)尽管SS引脚归属于SPI总线的信号线之一,但在AVR的SPI工作于主模式时,SPI接口硬件本身并不对SS实行任何操作,对从机的选择必须通过用户程序来完成,也就是在于从机进行数据通信时,要先由软件拉低SS引脚。(3)在主机模式下,若将SS引脚设置为输入,应保证该引脚始终为高点平。这种情况下,如果SS被外部拉低,SPI接口会认为总线上出现了另一个主机,并正拉低SS准备与自己通信。为防止一个SPI通信系统出现两个主机的冲突,本机的SPI接口将自动清除SPCR寄存器的MSTR位,将自己设置为从机,MOSI、SCLK引脚自动设置为输入,同时置位SPSR寄存器的SPIF位,申请中断。3)查询方式使用SPI接口通信流程在对SPI接口进行正确初始化后,就可以使用SPI接口通信了。主机模式下,使用查询方式典型通信流程如下:(1)初始化SPI接口(2)初始化SPI引脚(3)拉低SS引脚,通知从机准备进行数据交换(4)将要发送的数据写入数据寄存器SPDR,触发一次通信。(5)不停的检查SPSR寄存器的SPIF标志位,等待通信完成;读取SPIF标志位的操作将自动清除SPIFwhile(!(SPSR&(1SPIF)(6)从SPDR中读取从机发送过来的数据(7)若还有需要发送的数据,回到第4步,否则拉高SS,迫使从机进入通信复位状态,等待下一次传输。第七章 异步通信与USART接口基础1异步通信的基本概念USART:通用异步接受/发送接口异步传输是一种面向字符的传输技术,它利用字符的再同步方式实现数据的发送和接收。在异步传输方式下,最基本的数据传输单位是一个字符帧。这个字符帧的组成方式成为该字符的数据帧格式。基本的字符数据帧是由713位组成。其中包括起始位,逻辑“0”;数据位(08),最少5位,最多9位,LSB在前;检验位;12位停止位,逻辑“1”。线路空闲时,线路保持逻辑“1”。异步传输的主要特点:(1)异步通信的发送端和接收端由双方各自的时钟来控制数据的发送(发送端)及数据的检测和接收(接收端),发送、接收双方的时钟彼此独立,通信时,通过起始位、结束位进行同步;(2)发送端发送数据时,必须严格按照所规定的异步传输数据帧格式,一帧一帧地发送,接收端也必须按照相同的数据帧格式逐帧的接收。这表明,为了正确的进行异步通信,通信双方必须采用相同的数据帧格式,和相同的数据传输速率。对于后者,常称为串行通信波特率。确定波特率,实际上就是规定数据帧中一个位的宽度,以便于发送和接收端确定多长时间发送和检测一个二进制位。波特率定义为每秒钟传送的二进制数码的位数,单位是b/s。波特率用于表征数据传送的速度,但它与字符的实际传输速率不同。字符的实际传输速率是指每秒内所传送的字符帧的帧数,与字符帧的格式有关。第八章 串行IIC接口应用1 IIC串行总线介绍IIC总线是一种用于IC期间之间连接的2线串行扩展总线,他用两根线连接多之路总线中的多个设备,所有连接在总线上的器件都可以工作于发送和接收方式,并且可以将一个设备连接到IIC总线上或是从IIC总线上取下来,而不会影响到其他设备。AVR单片机内部集成了TWI串行总线接口,该接口是对IIC总线的继承和发展,它不但全面兼容了IIC总线的特点,而且在操作上比IIC总线更为灵活,功能更加强大。以1B的数据通信过程(没有考虑失败的情形)为例,TWI总线数据的通信过程如下:(1)主机发送START信号;(2)主机发送从机地址,SLA+W;(3)从机寻址成功,应答ACK信号;(4)主机发送一个字节的数据;(5)从机成功接收,应答ACK信号;(6)主机发送STOP信号,接收一次数据传输。2 TWI寄存器1)波特率寄存器TWBR2)控制寄存器TWCR位7 TWINT:中断标志位;TWINT标志的清零必须通过软件写“1”来完成。要注意的是:只要这一位被清零,TWI立即工作。因此,在清零TWINT之前一定要首先完成对地址寄存器TWAR,状态寄存器TWSR,以及数据寄存器TWDR的访问。位6 TWEA:应答允许位:ACK信号位5 TWSTA:TWI START信号状态标志位当MCU希望自己成为总线上的主机时,需要置位TWSTA。发送START之后软件必须清零TWSTA。位4 TWSTO:TWI STOP信号状态标志位位3 TWWC:TWI写冲突标志位位2 TWEN:TWI允许位位0 TWIE:使能TWI中断3)TWI状态寄存器TWSR位73 TWS:TWI状态位10 TWPS:TWI预分频位4)TWI数据寄存器TWDR5)TWI地址寄存器TWAR位71 TWA:TWI从机地址寄存器位0 TWGCE:使能TWI广播识别6)TWI从机地址屏蔽寄

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论