版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章ATmega单片机的
中断系统及定时器内容提要
本章介绍了ATmega单片机中断系统的工作原理及过程,并对单片机内部中断寄存器的用法做了详细的介绍,对单片机内部3个定时器/计数器的功能和和使用方法做了详尽的讲解,定时器/计数器还拥有信号捕获中断,比较中断,脉宽调制输出中断,实时时钟计数等功能。4.1ATmega单片机的中断系统4.1.1中断处理ATmega16L有18个不同的中断源,每个中断源和系统复位在程序存储器空间都有一个独立的中断向量,每个中断时间都有各自独立的中断允许控制位,当某个中断源的中断允许位置“1”,且状态寄存器中的全局中断允许位也为“1”时,MCU才能响应中断。利用这一特性,可以提高系统的安全性。中断设置复位向量和中断向量表置于1、FLASH程序存储器的应用程序区的头部2、引导程序载入区的头部,3、分开置于不同的两个区各自的头部。当MCU响应一个中断请求后,会自动将全局中断允许位I自动清零,此时后续中断的响应被屏蔽。当MCU执行中断返回指令RETI时,会将全局中断允许位I自动置“1”,以允许响应下一个中断。用户可在中断处理程序中I位置“1”,打开中断响应,这样MCU就可以再次响应中断,实现了中断嵌套处理。中断源的类型:
一类是时间触发型中断:如时钟、计数、比较等,一旦事件产生后会将相应的中断标志位置位,申请中断处理,当MCU响应中断,跳转到实际中断向量,开启相应的中断处理程序时,硬件自动清除对应的中断标志,这些中断标志位也可通过软件写“1”来清除。另一类是条件中断:当一个符合条件的中断触发置位了中断标志位,但相应的中断允许位为“0”,此时,这个中断标志将挂起为“1”,一直保持到该中断被响应或中断标志被软件清为“0”。有些没有中断标志位,在中断条件成立时,将一直不断的向MCU申请中断,如果在中断允许响应前,中断条件由成立状态变成不成立状态,该中断即宣告终止了。4.1.2外部中断外部中断通过引脚INT0,INT1(ATmega16L多一个INT2外部中断)触发。即使引脚INT0,1配置为输出,只要电平发生了合适的变化,中断也会触发。这个特点可以用来产生软件中断。通过设置MCU控制寄存器MCUCR,中断可以由下降沿、上升沿,或者是低电平触发。当外部中断使能并且配置为电平触发(INT0/INT1),只要引脚电平为低,中断就会产生。因为中断检测是异步的,可以用来将器件从睡眠模式唤醒。若要求INT0,INT1在信号下降沿或上升沿触发,I/O时钟必须工作(睡眠过程中I/O时钟是停止的)。4.1.2外部中断1、中断寄存器(1)MCU控制寄存器(MCUCR)图4.1MCU控制寄存器Bit3,2–ISC11,ISC10:外部中断1触发方式控制Bit1,0–ISC01,ISC00:外部中断0触发方式控制例4.1设置寄存器MCUCR,响应外部中断INT1为上升沿产生中断。MCUCR|=0x0c;例4.2利用寄存器MCUCR,响应外部中断INT0,上升沿有效。MCUCR|=0x03;(2)通用中断控制寄存器(GICR)Bit7-INT1:外部中断请求1使能Bit6-INT0:外部中断请求0使能例4.3利用控制寄存器GICR,设置INT1、INT0均使能外部中断使用程序。GICR=0xc0;(3)通用中断标志寄存器(GIFR)Bit7-INTF1:外部中断标志1例4.4GIFR=0x80//表示外部中断标志1置位(即表示启动了外部中断1)4.1.3中断响应1、中断响应的条件除了非屏蔽中断外,其它中断都可以用软件来屏蔽或开放。系统只有具备如下的中断条件,CPU才可能对中断请求进行响应。(1)设置中断请求触发器每一个中断源,能发出中断请求信号,而且这个信号能保持着,直至CPU响应这个中断后,才可清除中断请求。(2)设置中断屏蔽触发器在实际系统中,往往有多个中断源。在每一个外设的接口电路中增加了一个中断屏蔽触发器,只有当此触发器为“1”时,外设的中断请求才能被送出至CPU。(3)设置中断允许触发器在CPU内部有一个中断允许触发器。只有当其为“1”时,CPU才能响应中断;若其为“0”,即使INTR线上有中断请求,CPU也不响应。而这个触发器的状态可由软件指令来改变。当CPU复位时,中断允许触发器为“0”,所以必须要用软件指令来开中断。当中断响应后,CPU就自动关中断,所以在中断服务程序中也必须要用软件指令来开中断。CPU在现行指令结束后即响应中断。2、中断响应过程当满足了中断的条件后,CPU就会响应中断,转入中断程序处理。具体的工作过程如下所述。(1)关中断:CPU响应中断后,发出中断响应信号的同时,内部自动地实现关中断。(2)保留断点:CPU响应中断后,把主程序执行的位置和有关数据信息保留到堆栈,以备中断处理完毕后,能返回主程序并正确执行。(3)保护现场:为了使中断处理程序不影响主程序的运作,故要把断点处的有关寄存器的内容和标志位的状态全部推入堆栈保护起来,即在中断服务程序中把这些寄存器的内容推入堆栈。这样,当中断处理完成后返回主程序时,CPU能够恢复主程序的中断前的状态,保证主程序的正确动作。(4)给出中断入口,转入相应的中断服务程序:系统由中断源提供的中断向量形成中断入口地址,使CPU能够正确进入中断服务程序。(5)恢复现场:把所保存的各个内部寄存器的内容和标志位的状态,从堆栈弹出,送回CPU中原来的位置。这个操作在系统中也是由服务程序来完成的。(6)开中断与返回:在中断服务程序的最后,要开中断(以便CPU能响应新的中断请求)和安排一条中断返回指令,将堆栈内保存的主程序被中断的位置值弹出,运行被恢复到主程序。例4.6使用中断进行计数程序实例:voidextint_init(void)//中断初始化设置{ MCUCR|=0x03;//上升沿触发
MCUCSR|=0x00;//控制和状态寄存器
GICR=0x40;//开启中断0使能}SIGNAL(SIG_INTERRUPT0)//外部中断0程序{ uintk;//设置变量k来记录中断的次数
k++;}ATmega16控制和状态寄存器MCUCSR
AVR控制和状态寄存器提供了有关引起AVR复位的复位源的信息。Bit4–JTRF:JTAG复位标志
通过JTAG指令AVR_RESET可以使JTAG复位寄存器置位,并引发MCU复位,并使JTRF置位。上电复位将使其清零,也可以通过写”0”来清除。
Bit3–WDRF:看门狗复位标志
看门狗复位发生时置位。上电复位将使其清零,也可以通过写”0”来清除。
Bit2–BORF:掉电检测复位标志
掉电检测复位发生时置位。上电复位将使其清零,也可以通过写”0”来清除。
Bit1–EXTRF:外部复位标志
外部复位发生时置位。上电复位将使其清零,也可以通过写”0”来清除。
Bit0–PORF:上电复位标志
上电复位发生时置位。只能通过写”0”来清除。4.2定时器/计数器的使用方法4.2.18位定时器/计数器0-T/C0T/C0是一个通用8位定时/计数器,其主要特点是:单通道计数器频率发生器外部事件计数带10位预定比例分频器1、8位T/C0的寄存器(1)T/C0控制寄存器(TCCR0)例4.7TCCR0=0x02CS02、CS01、CS00这3个标志位用于选择T/C0的时钟源,见表4.3。
表4.3时钟源分频器真值表(2)T/C0计数寄存器(TCNT0)TCNT0寄存器为数据存储寄存器TCNT0是T/C0的计数值寄存器,该寄存器可以直接被读写访问,写TCNT0寄存器将会在下一个定时器时钟周期中阻塞比较匹配。(3)定时/计数器中断屏蔽寄存器(TIMSK)例4.8TIMSK=0x01//表示T0中断溢出允许位0—TOIE0:T/C0溢出中断允许标志位当TOIE0被设置为“1”,且状态寄存器中的I位被置位“1”时,将使能T/C0溢出中断。若在T/C0上发生溢出时,则执行T/C0溢出中断服务程序。(4)定时/计数器中断标志寄存器(TIFR)例如:TIFR=0x01//表示位0置位,即T/C0溢出中断被置位位0—TOV0:T/C0溢出中断标志位当T/C0产生溢出时,TOV0位被设置为“1”。当转入T/C0溢出中断向量执行中断处理程序时,TOV0由硬件自动清零。2、8位定时/计数器08位T/C0单元是一个可编程计数器,计数值保存在寄存器TCNT0中,MCU可以在任何时间访问读/写TCNT0。计数器单一向上计数,一旦寄存器TCNT0为0x00的同时,置溢出标志位TTOV0位为“1”。用户可以通过写入TCNT0寄存器初值来调整计数器溢出的时间间隔。4.2.216位定时器/计数器1――T/C1T/C1是一个16位的多功能定时/计数器,其主要特点是:真正的16位设计两个独立的输出比较单元双缓冲输出比较寄存器一个输入捕获单元输入捕获噪声抑止比较匹配时清零计数器无奇边非对称,相位可调的脉宽调制输出周期可调的PWM1、T/C1的组成结构定时/计数器寄存器TCNT1、输出比较寄存器OCR1A和OCR1B以及输入捕获寄存器ICR1都是16位寄存器。对这些16位寄存器的读写操作应遵循特定的步骤,T/C1的中断请求信号可以在定时器中断标志寄存器TIFR中找到,在定时器中断屏蔽寄存器TIMSK中,可以找到各自独立的中断屏蔽位。(1)T/C1的时钟源T/C1时钟源可来自芯片内部,也可来自外部引脚T1。T/C1与T/C0共享一个预定比例分频器。时钟源选择由寄存器TCCR1B中的标志位CS[2,0]确定。(2)16位T/C1的计数单元T/C1的计数单元是一个可编程的16位双向计数器,计数值保存在16位寄存器TCNT1中。TCNT1由两个8位寄存器:TCNT1H和TCNT1L组成。MCU对TCNT1的访问操作应遵循特定的步骤。(3)输入捕获单元T/C1内部的输入捕获单元。外部事件发生的触发信号由引脚ICP1(PD6)输入。此外,模拟比较器的ACO单元的输出信号也可作为外部事件捕获的触发信号。(见书P14)一个输入捕获发生在外部引脚ICP1上的逻辑电平变化,或者模拟比较器输出电平变化,此时T/C1计数器TCNT1中的计数值被写入输入捕获寄存器ICR1中,并置位输入捕获标志位ICF1。输入捕获功能可用于频率和周期的精确测量。当T/C1运行在PWM方式下时,允许对寄存器ICR1进行写操作。应在设置T/C1的运行方式为PWM后,再设置ICR1,此时写入ICR1的值将作为计数器计数序列的上限值。(4)输入比较单元在T/C1运行期间,输出比较单元一直将寄存器TCNT1的计数值同寄存器OCR1A和OCR1B的内容进行比较,一旦发现与其中之一相等,比较器即会产生一个比较匹配信号,在下一个计数时钟脉冲到达时置位OCF1A和OCF1B中断标志位。根据WGM[2:0]和COM1A[1:0]、COM1B[1:0]的不同设置,比较相等匹配的信号还用于控制和产生各种类型的脉冲PWM波形。寄存器OCR1A和OCR1B各自配置有一个辅助缓存器。当T/C1工作在非PWM模式时,该辅助缓存器禁止。MCU直接访问和操作寄存器OCR1A和OCR1B本身。(5)比较匹配输出单元标志位COM1A[1:0]的输出方式以及控制外部引脚OC1A(PD5)是否输出OC1A寄存器的值。当标志位COM1A[1:0]中任何一位为“1”时,波形发生器的输出OC1A取代引脚原来的I/O功能,但引脚的方向寄存器DDR依然控制OC1A引脚的输入/输出方向。如果要在外部引脚输出OC1A的逻辑电平,应设定DDR定义该引脚为输出脚。(6)比较输出模式和波形发生器对于T/C1的各种工作模式,COM1A[1:0]的不同设置都会影响到波形发生器产生的脉冲波形方式。但只要COM1A[1:0]=0,波形发生器对OC1A寄存器就没有任何作用。2、16位T/C1的寄存器(1)T/C1的计数寄存器(TCNT1H和TCNT1L)TCNT1H和TCNT1L组成T/C1的计数值寄存器TCNT1,该寄存器可以直接被CPU读写访问(2)输出比较寄存器OCR1A和OCR1BOCR1AH和OCR1AL组成16位输出比较寄存器OCR1A。该寄存器中的16位数据用于同TCNT1寄存器中的计数值进行连续的匹配比较。一旦TCNT1的计数值与OCR1A的数据匹配相等,将产生一个输出比较匹配相等的中断申请,或改变OCR1A的输出逻辑电平。OCR1A和OCR1B两者作用相同。(3)输入捕获寄存器(ICR1H和ICR1L)
ICR1H和ICR1L组成16位输入捕获寄存器ICR1。当外部引脚ICP1或模拟比较器有输入捕获触发信号产生时,计数器TCNT1中的计数值写入寄存器ICR1中。在PWM方式下,ICR1的设定值将作为计数器计数上限值。(4)定时/计数器中断屏蔽寄存器(TIMSK)例4.9TIMSK=0x01//表示输入捕获中断允许位5――TICIE1:T/C1输入捕获中断允许标志位当TICIE1被设为“1”,且状态寄存器中的I位被设为“1”时,将使能T/C1的输入捕获中断。位4――OCIE1A:T/C1输出比较A匹配中断允许标志位位3――OCIE1B:T/C1输出比较B匹配中断允许标志位当OCIE1A/B被设为“1”,且状态寄存器中的I位被设置为“1”时,将使能T/C1的输入比较匹配中断。若在T/C1上发生输出比较A/B匹配,则执行T/C1输出比较A/B匹配中断服务程序。位2――TOIE1:T/C1溢出中断允许标志位当TOIE1被设为“1”,且状态寄存器中的I位被设置为“1”时,将使能T/C1的溢出中断。若在T/C1上发生溢出时,则执行T/C1溢出中断服务程序。(5)定时/计数器中断标志寄存器(TIFR)例4.10TIFR=0x20//表示T/C1输入捕获中断被置位位5――ICF1:T/C1输入捕获中断标志位当T/C1由外部引脚ICP1触发输入捕获时,ICF1位被设为“1”。在T/C1运行方式为PWM,寄存器ICR1内容作为计数器计数上限值时,一旦计数器TCNT1计数值与ICR1相等,也将置位ICF1。图4.13TIFR寄存器位4――OCF1A:T/C1输出比较匹配中断标志位当T/C1由外部引脚ICP1触发输入捕获时,OCF1A位被设为“1”。当转入T/C1输出比较A匹配中断向量执行中断处理程序时,OCF1A由硬件自动清零。写入一个逻辑“1”到OCF1A标志位将清除该标志位。设置强制输出比较A匹配时,不会置位OCF1A标志位位3――OCF1B:T/C1输出比较B匹配中断标志位当T/C1由外部引脚ICP1触发输入捕获时,OCF1B位被设为“1”。当转入T/C1输出比较匹配中断向量执行中断处理程序时,OCF1B由硬件自动清零。写入一个逻辑“1”到OCF1B标志位将清除该标志位。位2――TOV1:T/C1溢出中断标志位当T/C1产生溢出时,TOV1位被设为“1”。当转入T/C1溢出中断向量执行中断处理程序时,TOV1由硬件自动清零。写入一个逻辑“1”到TOV1标志位将清除该标志位。(6)T/C1控制寄存器A(TCCR1A)此寄存器用来设置比较A和B的输出模式,以及波形的发生模式。位7~6――COM1A[1:0]比较A输出模式位5~4――COM1B[1:0]比较B输出模式这些位控制了比较输出引脚OC1A的输出行为。图4.14TCCR1A寄存器位3――FOC1A强制输出比较A位2――FOC1B强制输出比较B一个FOC1A/FOC1B选通脉冲不会产生任何的中断申请,也不影响计数器TCNT1和寄存器OCR1A的值。读FOC1A/FOC1B总为零。位1~0――WGM[1:0]:波形发生模式这两个标志与WGM[3:2]相组合,用于控制T/C1的计数和工作方式――计数器计数上限值和确定波形发生器的工作模式。T/C1支持的工作模式有:一般模式,比较匹配时清零定时器模式,以及两种脉宽调制模式等15种。(7)T/C1控制寄存器B(TCCR1B)位7――ICNC1:输入捕获噪声抑制允许位4~3――WGM[3:2]:波形发生模式位[2:0]――CS1[2:0]T/C1时钟源选择图4.15TCCR1B寄存器表4.4T/C1的时钟源真值表3、16位寄存器的读写操作步骤T/C1有4个16位的寄存器:TCNT1、OCR1A、OCR1B、ICR1。由于AVR的内部数据总线为8位,因此读写16位的寄存器需要分两次操作。为了能够同步读写16位寄存器,每一个16位寄存器分别配有一个8位的临时辅助寄存器,用于保存16位寄存器的高8位数据。要同步读写这些16位寄存器,读写操作应遵循以下特定的步骤:1)16位寄存器的读操作当MCU读取16位寄存器的低字节,16位寄存器低字节内容被送到MCU,而高字节内容在读低字节的同时被置于临时辅助寄存器中;当MCU读取高字节时,读到的是临时辅助寄存器的内容,因此,要同步读取16位寄存器中的数据,应先读取该寄存器的低位字节,再立即读取其高位字节。2)16位寄存器的写操作当MCU写入数据到16位寄存器的高位字节时,数据是写入到临时辅助寄存器中,当MCU写入数据到16位寄存器的低位字节时,写入的8位数据与临时辅助寄存器中的8位数据组合成16位数据,同步写入到16位寄存器中。因此,要同步写16位寄存器时,应写入该寄存器的高位字节,再立即写入它的低位字节。4.2.38位定时器/计数器2(T/C2)T/C2是一个8位的多功能定时/计数器,其主要特点是:比较匹配时清零计数器无奇边非对称,相位可调的脉宽调制输出周期可调的PWM频率发生器10位的时钟预分频器溢出和比较匹配中断源允许使用从外部引脚的32.768kHz时钟晶振作为独立的计数时钟源。1、T/C2的组成结构(1)8位T/C2的计数单元T/C2的计数单元是一个可编程的8位双向计数器,根据计数器的工作模式,在每一个时钟到来时,计数器进行加1、减1或清零操作。时钟的来源由标志位CSR[2:0]设定。当CSR[2:0]=0时,计数器停止计数。计数值保存在寄存器TCNT2中,MCU可以在任何时间访问读/写TCNT2,MCU写入TCNT2的值将立即覆盖其中原有的内容,并会影响计数器的运行。计数器的计数序列取决于寄存器TCCR2中标志位的设置。WGM2[2:0]的设置直接影响到计数器的计数方式和OC2的输出,同时也影响和涉及T/C2的溢出标志位TOV2的置位。标志位TOV2可以用于产生申请中断。(2)输出比较单元在T/C2运行期间,输出比较单元一直将寄存器TCNT2的计数值同寄存器OCR2的内容进行比较。一旦两者相等,在下一个计数时钟脉冲到达时置位OCR2标志位。根据WGM2[1:0]和COM2[2:0]的不同设置,比较相等匹配的输出还控制产生各种类型的脉冲波形。(3)比较匹配输出单元
当标志位COM2[1:0]中的任何一位为“1”时,波形发生器的输出取代OC2引脚原来的I/O功能,单引脚的方向寄存器DDR仍然控制OC2引脚的输入/输出方向。如果要在外部引脚输出OC2的逻辑电平,应设定DDR定义该引脚为输出脚。采用这种结构,用户可以先初始化OC2的状态,然后再允许其由引脚输出。(4)比较输出模式和波形发生器在四种工作模式下,根据COM2[1:0]的不同设定,波形发生器将产生各种不同的脉冲波形,只要COM2[1:0]=0,波形发生器对OC2寄存器没有任何作用。2、8位T/C2的寄存器(1)TCNT2是T/C2的计数值寄存器,该寄存器可以直接被读写访问。写TCNT2寄存器在下一个定时器时钟周期中阻塞比较匹配。因此,在计数器运行期间修改TCNT2的内容,可能将丢失一次TCNT2与OCR2的匹配比较操作。(2)输出比较寄存器(OCR2)OCR2寄存器中的8位数据用于同TCNT2寄存器中的计数值进行连续的匹配比较。一旦TCNT2的计数值与OCR2的数据匹配相等,将产生一个输出比较匹配相等的中断申请,或改变OC2的输出逻辑电平。(3)定时/计数器中断屏蔽寄存器(TIMSK)位7―OCIE2:T/C2输出比较匹配中断允许标志位位6―TOIE2:T/C2溢出中断允许标志位
(4)定时/计数器中断标志寄存器(TIFR)位7――OCF2:T/C2输出比较匹配中断标志位位6――TOV2:T/C2溢出中断标志位(5)特殊功能I/O寄存器(SFIOR)位1――PSR2:T/C2预定比例分频器复位当写入“1”到该位,将复位T/C2预定比例分频器,一旦预定比例分频器复位,硬件自动清零该标志位。(6)T/C2控制寄存器(TCCR2)位7――FOC2:强制输出比较
当写入“1”到FOC2时,在波形发生器上强加一个匹配成功信号,改变OC2输出状态。位3,6―WGM2[1:0]:波形发生模式普通模式(WGM21:0=0)为最简单的工作模式。在此模式下计数器不停地累加。计到的最大值后(TOP=0xFF),数值溢出,计数器简单地返回到最小值0x00重新开始。相位修正PWM模式(WGM21:0=1)为用户提供了一个获得高精度相位修正PWM波形的方法。在CTC模式(WGM21:0=2),OCR2寄存器用于调节计数器的分辨率。当计数器的数值TCNT2等于OCR2时,计数器清零。快速PWM模式(WGM21:0=3)可用来产生高频的PWM波形。位5:4―COM2[1:0]:比较匹配输出模式位2:0――CS2[2:0]:T/C2时钟源选择位[2:0]――CS2[2:0]:T/C2时钟源选择4.3T/C0与T/C1共用的预分频器的
使用方法ATMEGA8的T/C0和T/C1由一个10位预定比例分频器提供时钟源。1、T/C0和T/C1的时钟源T/C0和T/C1的时钟源可来自芯片内部,也可来自外部引脚T0和T1。当CSn[2:0]=1时,系统内部时钟直接作为定时/计数器的时钟源,这也是最高频率的时钟源。由预定比例分频器提供的时钟源。预定比例分频器对系统时钟按四个不同的分频比例分频,输出4个不同周期的时钟信号。两个定时/计数器可以分别选定其中一个作为时钟源。T/C0(TC1)可以使用来自外部引脚T0(T1)的时钟信号作为外部时钟源。
2、外部时钟信号的检测施加在外部引脚T0/T1的时钟信号,由引脚同步检测电路采样,每个系统时钟周期同步采样一次,采样输出信号进入边沿检测器。外部时钟的最高频率不能大于F/2.5,脉冲宽度要大于一个系统时钟clk周期。此外,外部时钟源是不进入预定比例分频器再次分频的。3、特殊功能I/O寄存器(SFIOR)Bit0――PSR10:T/C0,1预定比例分频器复位Bit1一PSR2:T/C2预定比例分频器复位当该位置1时,复位对应预定比例分频器4.4具有PMW功能与异步操作的
定时器/计数器使用方法自学4.4.1.T/C1的应用标志位WGM[3:0]和COM1A[1:0]/COM1B[1:0]的组合构成了T/C1的16种工作方式以及OC1A/OC1B不同模式的输出。1、一般模式(WGM[3:0]=0)T/C1最简单的工作为一般模式,此时计数器为单向加1计数器,一旦寄存器TCNT1的计数值达到0xFFFF,下一个计数脉冲到来时便恢复为0x0000,并继续开始向上申请中断,也可以作为计数器的第17位使用,用户可以在任何时候通过写入TCNT1寄存器初值来调整计数器溢出的时间间隔。在一般模式中,可以方便地应用输入捕获功能,并正确选择计数时钟源,使得两次捕获触发信号的时间间隔小于计数器完成一次单程计数器溢出的时间间隔。在一般模式中,可以使用输出比较单元产生定时中断。但最好不要在一般模式下使用输出比较单元产生脉冲调制波形输出,因为这将占用过多的MCU的时间。2、比较匹配清零计数器CTC模式(WGM1[3:0]=4或者WGM1[3:0]=12)T/C1工作在CTC时,计数器为单向加1计数器,一旦寄存器TCNT1的值与OCR1A(WGM1[3:0]=4或者WGM1[3:0]=12)的设定值相等,就将计数器TCNT1清零,然后继续向上加1计数。通过设置OCR1A/ICR1的值,可以方便地控制比较匹配输出地频率,也方便了外部事件计数的应用。在TCNT1与OCR1A/ICR1匹配的同时,置比较匹配标志位OCF1A/ICF1为“1”。标志位OCF1A/ICF1可以用于申请中断,如果MCU响应该匹配中断,用户可以在中断服务程序中修改OCR1A/ICR1寄存器的值。在T/C1采用的计数时钟频率较高,且写入OCR1A/ICR1的值与0x0000接近时,可能会丢失一次比较匹配成立条件。例如,当TCNT1的值与OCR1A相等,TCNT1便被硬件清零并申请中断:在中断服务中重新改变设置OCR1A为0x0005;但中断返回后TCNT1的计数值已经为0x0010了,此时便丢失了一次比较匹配成立条件,计数器将继续加1计数到0xFFFF,然后返回0x0000,当再次计数到0x0000时,才能产生比较匹配成功。在CTC模式下产生波形输出时,应设置OC1A的输出方式为触发方式。OC1A输出波形的最高频率为。其他的输出频率由下式确定,式中N的取值为1、8、64、256或1024。除此之外,与一般的模式相同,当计数器TCNT1的计数值由0xFFFF转到0x0000时,标志位TOV1置位。
3、快速PWM模式T/C1工作在快速PWM模式可以产生高速的PWM波形。当T/C1工作在此模式下时,计数器为单程向上的加1计数器,从0x0000一直加到TOP,在下一计数脉冲到来时清零,然后再从0x0000开始加1计数。在设置正向比较匹配输出模式中,当TCNT1的计数值与OCR1A/OCR1B的值相同匹配时置位OC1A/OC1B,当计数器的值由TOP返回0x0000时清零OC1A/OC1B。而在设置反向比较匹配输出模式中,当TCNT1的计数值与OCR1A/OCR1B的值相同匹配时清零OC1A/OC1B,当计数值由TOP返回0x0000时置位OC1A/OC1B。由于快速PWM模式采用单程计数方式,所以其产生PWM波的频率比另外两种模式高一倍。因此快速PWM模式适用于电源调整等应用。快速PWM的精度可以为固定的8、9、10位或由寄存器OCR1A,ICR1设置值定义:最小精度为2位,最大精度为16位。其它由OCR1A,ICR1设定值所定义的精度。在TCNT1的计数值到达TOP时,新的TOP值必须大于或等于比较寄存器设定的比较值,否则比较匹配输出将不会发生。4、相位可调PWM模式相位可调PWM模式可以产生高精度相位可调的PWM波形,当T/C1工作在此模式下时,计数器为双程计数器:从0x0000一直加到TOP,在下一个计数脉冲到达时,改变计数方向,从TOP开始减1计数到0x0000。在设置正向比较匹配输出模式下:正向加1过程中,TCNT1的计数值与OCR1A/OCR1B的值相同匹配时清零OC1A/OC1B;反向减1过程中,当计数器TCNT1的计数值与OCR1A/OCR1B的值相同匹配时清零OC1A/OC1B。计数器计数上限TOP值的大小决定了PWM输出频率的低高。而比较寄存器的数值则决定了输出脉冲的起始相位和脉宽。相位可调PWM的精度可以为固定的8、9、10位,或由寄存器OCR1A,ICR1设置值定义。最小精度为2位,最大精度为16位。其他由OCR1A,ICR1设定值所定义的精度。在TCNT1的计数值到达0x0000时,置溢出标志位TOV1为“1”。如果使用寄存器OCR1A,ICR1的设定值来作为计数器计数上限值,当在TCNT1计数到达TOP时,OC1A/OCF1标志位置位,同时OCR1A/OCR1B自动更新,这些中断标志位都可以用于申请中断。当改变计数器的计数上限时,新的TOP值必须大于或等于比较寄存器OCR1A/OCR1B设置比较值,否则比较匹配输出将不会发生。由于在相位可调PWM模式中,OCR1A/OCR1B的更新发生在TCNT1=TOP,因此,如果在应用中需要经常改变计数器计数的上限值,那么建议使用频率周期可调PWM模式。5、相位频率可调PWM模式相位频率可调PWM模式可以产生高精度相位和频率可调的PWM波形,当T/C1工作在此模式下时,计数器为双程计数器:从0x0000一直加到TOP,在下一个计数脉冲到达时,改变计数方向,从TOP开始减1计数到0x0000。在设置正向比较匹配输出模式下:正向加1过程中,TCNT1的计数值与OCR1A/OCR1B的值相同匹配时清零。4.4.2T/C2的应用标志位WGM2[3:0]和COM2[2:0]组合构成了T/C2的4种工作方式以及OC2不同模式的输出。T/C2最简单的工作为一般模式,此时计数器为单向加1计数器,一旦寄存器TCNT2的计数值达到0xFFFF,下一个计数脉冲到来时便恢复为0x0000,并继续开始向上申请中断,也可以作为计数器的第9位使用,用户可以在任何时候通过写入TCNT2寄存器初值来调整计数器溢出的时间间隔。1、在一般模式中,可以使用输出比较单元产生定时中断。2、比较匹配清零计数器CTC模式(WGM2[1:0]=2)T/C2工作在CTC时,计数器为单向加1计数器,一旦寄存器TCNT2的值与OCR2的设定值相等,就将计数器TCNT2清零,然后继续向上加1计数。通过设置OCR2的值,可以方便地控制比较匹配输出地频率,也方便了外部事件计数的应用。在TCNT2与OCR2匹配的同时,置比较匹配标志位OCF2为“1”。标志位OCF2可以用于申请中断,如果MCU响应该匹配中断,用户可以在中断服务程序中修改OCR2寄存器的值。在T/C2采用的计数时钟频率较高,且写入OCR2的值与0x0000接近时,可能会丢失一次比较匹配成立条件。在CTC模式下产生波形输出时,应设置OC2的输出方式为触发方式。OC2输出波形的最高频率为。其他的输出频率由下式确定,式中的取值为1、8、64、256或1024。除此之外,与一般的模式相同,当计数器TCNT2的计数值由0xFFFF转到0x0000时,标志位TOV2置位。3、快速PWM模式T/C2工作在快速PWM模式可以产生高速的PWM波形。当T/C2工作在此模式下时,计数器为单程向上的加1计数器,从0x0000一直加到TOP,在下一计数脉冲到来时清零,然后再从0x0000开始加1计数。在设置正向比较匹配输出模式中,当TCNT2的计数值与OCR2的值相同匹配时置位OC2,当计数器的值由TOP返回0x0000时清零OC2。而在设置反向比较匹配输出模式中,当TCNT2的计数值与OCR2的值相同匹配时清零OC2,当计数值由TOP返回0x0000时置位OC2。由于快速PWM模式采用单程计数方式,所以其产生PWM波的频率比另外两种模式高一倍。因此快速PWM模式适用于电源调整等应用。在快速PWM模式下。OC2的值,可以获得不同占空比的PWM脉冲波形。OCR2的一些特殊值会产生极端的PWM波形。当OCR2的设置值与0x0000相近时,会产生窄脉冲序列。而设置OCR2的值等于TOP,OC2的输出为恒定的高(低)电平。当设置OCR2为0x0000,且OC2输出方式为触发模式,OC2产生占空比为50%的最高频率PWM波形。4、相位可调PWM模式相位可调PWM模式可以产生高精度相位可调的PWM波形,当T/C2工作在此模式下时,计数器为双程计数器:从0x0000一直加到TOP,在下一个计数脉冲到达时,改变计数方向,从TOP开始减1计数到0x0000。在设置正向比较匹配输出模式下:正向加1过程中,TCNT2的计数值与OCR2的值相同匹配时清零OC2;反向减1过程中,当计数器TCNT2的计数值与OCR2的值相同匹配时清零OC2。计数器计数上限TOP值的大小决定了PWM输出频率的低高。而比较寄存器的数值则决定了输出脉冲的起始相位和脉宽。相位可调PWM的精度可以为固定的8、9、10位,或由寄存器OCR2设置值定义。最小精度为2位,最大精度为16位。其他由OCR2设定值所定义的精度。在TCNT2的计数值到达0x0000时,置溢出标志位TOV2为“1”。如果使用寄存器OCR2的设定值作为计数器计数上限值,当在TCNT2计数到达TOP时,OC2标志位置位,同时OCR2自动更新,这些中断标志位都可以用于申请中断。当改变计数器的计数上限时,新的TOP值必须大于或等于比较寄存器OCR2设置比较值,否则比较匹配输出将不会发生。由于在相位可调PWM模式中,OCR2的更新发生在TCNT2=TOP,因此,如果在应用中需要经常改变计数器计数的上限值,那么建议使用频率周期可调PWM模式。5、相位频率可调PWM模式相位频率可调PWM模式可以产生高精度相位和频率可调的PWM波形,当T/C2工作在此模式下时,计数器为双程计数器:从0x0000一直加到TOP,在下一个计数脉冲到达时,改变计数方向,从TOP开始减1计数到0x0000。在设置正向比较匹配输出模式下:正向加1过程中,TCNT2的计数值与OCR2的值相同匹配时清零OC2;反向减1过程中,当计数器TCNT2的计数值与OCR2的值相同时置位OC2。在设置反向比较匹配输出模式下:正向加1过程中,TCNT2的计数值与OCR2的值相同匹配时置位OC2;反向减1过程中,当计数器TCNT2的计数值与OCR2的值相同时清零OC2。由于该PWM模式采用双程计数方式,所以它产生的PWM波的频率比快速PWM低,其相位可调的特性适用于马达控制一类的应用。计数器计数上限TOP值的大小决定了PWM输出频率的低高。而比较寄存器的数值则决定了输出脉冲的起始相位和脉宽。相位频率可调PWM的精度可以为固定的8、9、10位,或由寄存器OCR2设置值定义。最小精度为2位,最大精度为16位。其他由OCR2设定值所定义的精度。在TCNT2的计数值到达0x0000时,置溢出标志位TOV2为“1”。同时OCR2自动更新,其更新数据来源于各自的辅助缓冲器。如果使用寄存器OCR2的设定值来作为计数器计数上限值,当在TCNT2计数到达TOP时,OC2标志位置位,这些中断标志位都可以用于申请中断。当改变计数器的计数上限时,新的TOP值必须大于或等于比较寄存器OCR2设置比较值,否则比较匹配输出将不会发生。由于在相位频率可调PWM模式中,OCR2的更新发生在TCNT2=0x0000,因此,不管如何改变计数器计数的上限值,都能产生对称的PWM输出波形,同时调整了频率。使用寄存器OCR2来设定计数器计数的上限值,一般应用于固定频率PWM输出,这时,除了OCR2外,寄存器OCR2也可用于产生PWM脉冲。如果在应用中需要经常改变计数器计数的上限值,那么使用寄存器OCR2设定上限值是最好的选择,但此时只能有一个PWM输出。4.4.3T/C2的异步操作方式位3--AS2异步T/C2设定位位2――TCN2UB位1――OCR2UB:OCR2更新忙位0――TCR2UB:TCCR2更新忙1、异步状态寄存器(ASSR)图4.23ASSR寄存器2、T/C2的异步操作当T/C2采用异步工作方式时,计数时钟直接来自外部引脚TOSC1,因此计数时钟与系统时钟是不同步的,所以在使用异步方式时必须注意以下几个方面:①当在同步和异步方式之间切换时,寄存器TCNT2、OCR2和TCCR2的内容会受到破环。安全改变时钟源(同步异步转换)的顺序如下:
通过清零OCIE2和TOIE2标志位,屏蔽T/C2的中断;选择时钟源AS2,设置为相应的值;写新的值到TCNT2、OCR2和TCCR2寄存器;同步转异步时,须等待TCR2UB、OCR2UB和TCN2UB为“0”;清T/C2的中断标志位;如果需要时,使能T/C2的中断。②芯片已经对时钟晶振进行了优化。加一个外部时钟到TOSC1引脚可能会导致T/C2不正常的工作。CPU的主时钟频率必须大于外部时钟频率的4倍。③当写入TCNT2、OCR2和TCCR2寄存器中的一个时,其值先写入到临时缓冲寄存器中,在TOSC1上的时钟两个上升沿后,临时缓冲寄存器中的值被锁存到寄存器中。在临时缓冲寄存器中的值未锁存到其目标寄存器前,不能写一个新值到临时缓冲寄存器,以上三个寄存器的每一个都有独立的临时缓冲寄存器。④在设置TCNT2、OCR2和TCCR2寄存器后,如要进入省电模式或等待模式时,同时要将T/C2用作唤醒源的话,用户必须要等到被写入的寄存器完成更新后才能进入休眠状态。否则,这些寄存器的改变还没有生效,MCU就进入休眠了。特别是使用输出比较匹配OCF2中断作为唤醒器件的唤醒源时,这点尤其重要。因为在写OCR2或TCNT2期间,输出比较功能单元将被屏蔽。如果写入的内容没有生效,MCU就进入了休眠模式,器件永远都不会接收到比较匹配中断,MCU将不会被唤醒。⑤如果T/C2被用作将器件从省电或等待模式唤醒,用户必须注意,当要再次进入这些休眠模式时,中断逻辑需要一个TOSC1周期来复位。如果器件唤醒和再次进入休眠模式之间的时间少于一个TOSC1周期,中断将不会发生,器件将不能被唤醒。如果不能确定再次进入省电或等待模式前的时间是否足够,可使用以下算法来保证有一个TOSC1的时钟周期:
写一个值到TCNT2、OCR2和TCCR2寄存器;等待ASSR寄存器中相应的更新标志位返回“0”;再次进入省电或等待模式。⑥当选择了异步方式,T/C2的32.768kHz晶振始终在运行状态甲除非进入掉电模式或等待模式。在上电复位或从掉电模式或等待模式下被唤醒时,晶振需要大约1秒钟的时间来稳定。建议用户在上电复位或从掉电模式或等待模式下被唤醒后,等待1秒钟后再使用T/C2。无论T/C2使用内部计数时钟还是外部TOSC1引脚上的计数时钟,当器件从掉电或等待模式状态下被唤醒后,所有T/C2寄存器中的内容均被认为已经丢失(由于不稳定的时钟信号造成)。⑦当使用异步方式时,从省电或等待模式下唤醒的过程为:当符合中断条件产生后,唤醒过程将在下一个计数器的时钟周期开始。器件被唤醒后,MCU暂停4个时钟周期,然后执行中断处理程序,最后从SLEEP指令后的指令重新开始执行。⑧在器件被唤醒后,立即读取TCNT2寄存器将返回不正确的值。由于TGNT2是由TOSC1异步时钟驱动的,而读取TCNT2必须通过一个寄存器,并且应同内部I/O时钟同步。这个读取同步发生在每个TOSC1的上升沿。当从省电模式唤醒,I/O时钟(clk)再次有效,立即读取TCNT2则读出的为进入休眠前的值,因为直到TOSC1的下一个上升沿,寄存器中的值才会更新。由于在从省电模式下唤醒后,TOSC1时钟的相位是不可预测的,建议按照以下的顺序读取TCNT2寄存器:4.5ATmega单片机的时钟综合实例硬件电路是利用DFD368B-A-060906板的数码显示和按键部份。能进行年、月、日、星期、时、分的计时,有星期,闰月等功能。可以利用键盘调节。其中K1为翻页和上调键,K2为下调键,K3为设定键。1、图4.24是一个简单的单片机时钟系统图4.24简单数字电子钟电路原理图4.5.1数码管动态显示实际的单片机系统中,往往需要多位显示。动态显示是一种最常见的多位显示方法,应用非常广泛。1.动态显示概念
用数码管显示信息时,由于每个数码管至少需要8个I/O口,如果需要多个数码管,则需要太多I/O口,而单片机的I/O口是有限的。在实际应用中,一般采用动态显示的方式解决此问题。2.动态显示原理所有数码管的段选全部连接在一起,如何能显示不同的内容呢?动态显示是多个数码管,交替显示,利用人的视觉暂留作用使人看到多个数码管同时显示。3.动态显示的实现在编程时,需要输出段选和位选信号,位选信号选中其中一个数码管,然后输出段码,使该数码管显示所需要的内容,延时一段时间后,再选中另一个数码管,再输出对应的段码,高速交替。4.动态显示实例例:需要显示数字“12”
①输出位选信号,选中第一个数码管A1=1②输出1的段码b=1,c=1③延时一段时间④选中第二个数码管A2=1⑤输出2的段码a=1,b=1g=1,e=1,d=1⑥把上面的流程以一定的速度循环执行如果延时时间长,则会出现闪烁现象;如果延时时间太短,则会出现显示暗且有重影。
4.5.274LS595简介1.74LS595外形及功能8位串行输入转并行输出移位寄存器QA--QH:八位并行输出端,可以直接控制数码管的8个段。QH1:级联输出端。将它接下一个595的SBR端。SBR:串行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 跨国公司国际法律事务合作协议2026年版本
- 第29讲 反应热的测定与计算
- 健康宣教宣传
- 2026年中国工会题库及答案
- 肝部分切除术护理查房
- 视网膜静脉阻塞护理查房
- 年产40万吨煤制二甲醚生产线可行性研究报告
- 项目部技术人员救护措施
- 建筑工地救援组织措施制度
- 油毡瓦屋面安全技术交底
- 了解月经周期与女性乳腺健康的关系
- GB/T 7000.201-2023灯具第2-1部分:特殊要求固定式通用灯具
- 人体解剖学肌肉运动解剖培训课件
- 见证取样记录表
- 教师节师德师风主题演讲PPT
- 心理咨询的理论与实务江光荣演示文稿
- 通信电子线路习题解答
- FZ/T 73009-2021山羊绒针织品
- 统计学贾俊平第章-假设检验课件
- 权力政治社会学教学课件
- 真人实战游戏CS野战枪战通用模板课件
评论
0/150
提交评论