ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:145.33KB ,
资源ID:10776734      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10776734.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(AVR单片机定时计数器1实验四.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

AVR单片机定时计数器1实验四.docx

1、AVR单片机定时计数器1实验四AVR学习笔记四、定时/记数器1实验 -基于LT_Mini_M164.1 定时/计数器1的计数实验4.1.1 实例功能ATmega16的T/C1是一个16位的多功能定时计数器,其主要特点有: 真正的16位设计,允许16位的PWM。 2个独立的输出比较匹配单元。 双缓冲输出比较寄存器。 一个输入捕捉单元。 输入捕捉躁声抑制。 比较匹配时清零计数器(自动重装特性,Auto Reload)。 可产生无输出抖动(glitch-free)的,相位可调的脉宽调制(PWM)信号输出。 周期可调的PWM波形输出。 频率发生器。 外部事件计数器。 带10位的时钟预分频器。 4个独立

2、的中断源(TOV1、OCF1A、OCF1B、ICF1)。在前面的实例中,我们已经学习了AVR单片机的定时/计数器0,本实例和下一个我们学习定时/计数器1,从上面的介绍我们可以看出,ATmega16单片机的定时/计数器1功能更为强大,值得我们深入学习。定时/计数器的基本功能都是定时、计数等,掌握了一个定时/计数器的用法就能很容易的掌握其他定时/计数器的用法,所以我们不在学习定时/计数器1的定时、计数等基本功能。在接下来的两个实例中,我们将学习定时/计数器1的增强功能。在本实例中,我们利用ATmega16单片机的定时/计数器1的输入捕捉功能实现对按键时间的捕捉,并检测两次按键之间的时间间隔,然后通

3、过LED指示实例运行效果。本实例共有3个功能模块,分别描述如下: 单片机系统:使用定时/计数器1的输入捕捉功能检测按键的按下,并判断两次按键按下的时间间隔,然后通过LED灯的亮灭指示按键按下次数。 外围电路:按键检测电路以及显示运行结果的LED显示电路。 软件程序:熟悉掌握ATmega16单片机的定时/计数器1的输入捕捉中断程序的编写。3.1.2、器件和原理 本实例首先介绍ATmega16单片机的定时/计数器1的输入捕捉功能,然后详细介绍如何利用定时/计数器1实现对外部事件进行输入捕捉。最后通过一个程序来实现这一功能。1、ATmega16单片机的定时/计数器1的增强功能介绍与8位定时/计数器T

4、/C0、T/C2相比,T/C1的功能增强主要表现在以下几个方面。116位的计数器由于T/C1是16位的计数器,因此它的计数宽度、计时长度大大增加,配合一个独立的10位预定比例分频器,计时精度也更加精确,这是其它的8位单片机所做不到的。需要注意的是,AVR的内部有许多16位的寄存器,这些寄存器都是由两个8位的寄存器组成的。如16位的寄存器TCNT1实际由2个8位寄存器TCNT1H、TCNT1L组成的。在使用汇编语言对这些16位寄存器的读写操作时需要遵循特定的步骤。 16位寄存器的读操作同步读取16位寄存器中的数据,应先读取该寄存器的低位字节,再立即读取其高位字节。 16位寄存器的写入操作同步写1

5、6位寄存器时,应先写入该寄存器的高位字节,再立即写入它的低位字节。此外,在对16位寄存器操作时,最好将中断响应屏蔽,防止在主程序读写16位寄存器的两条指令之间插入一个含有对该寄存器操作的中断服务。如果这种情况发生,那么中断返回后,寄存器中的内容已经改变,会造成主程序中对16位寄存器的读写失误。采用C等高级语言编写程序则可以直接对16位的寄存器进行操作,因为这些高级语言的编译系统会根据16位寄存器的操作步骤生成正确的执行代码。因此我们学习的时候可以不必关心这些。3. 更加强大和完善的PWM功能T/C1配备了2个比较匹配输出单元OC1A、OC1B和比较匹配寄存器OCR1A、OCR1B。同时它的PW

6、M模式,有多种不同的计数器上限(TOP)值可供选择,因此T/C1的PWM功能具备以下特点: 可产生频率、相位均可调整的PWM波。T/C1有15种工作模式,除了常规的计数、CTC模式外,还可以产生频率可调、相位可调、频率相位均可调的多种形式的PWM波。其中频率可调的PWM波利用8位定时计数器是不能实现的。T/C1的频率调整范围可以达到16位的精度,它是通过改变计数器的上限值实现的。 可同时产生2路不同占空比的PWM波由于T/C1配备了2个比较匹配输出单元OC1A、OC1B和比较匹配寄存器OCR1A、OCR1B,因此使用一个计数器就可以得到相同频率,不同占空比的2路PWM输出。2路PWM波的占空比

7、的确定和调整分别由寄存器OCR1A、OCR1B确定,分别在OC1A、OC1B上输出。4输入捕捉功能T/C1的输入捕捉功能是AVR定时计数器的另一个非常有特点的功能。T/C1的输入捕捉单元可应用于精确捕捉一个外部事件的发生,记录事件发生的时间印记(Time-stamp)。捕捉外部事件发生的触发信号由引脚ICP1输入,或模拟比较器的AC0单元的输出信号也可作为外部事件捕获的触发信号。当一个输入捕捉事件发生,如外部引脚ICP1上的逻辑电平变化时,或者模拟比较器输出电平变化(事件发生)时,此时T/C1的计数器TCNT1中的计数值被写入输入捕捉寄存器ICR1中,并置位输入捕获标志位ICF1,并产生中断申

8、请。输入捕捉功能可用于频率和周期的精确测量。置位标志位ICNC将使能对输入捕捉触发信号的噪声抑制功能。噪声抑制电路是一个数字滤波器,它对输入触发信号进行4次采样,当4次采样值相等才确认此触发信号。因此使能输入捕捉触发信号的噪声抑制功能可以对输入的触发信号的噪声实现抑制,但确认触发信号比真实的触发信号延时了4个系统时钟周期。噪声抑制功能是通过寄存器TCCR1B中的输入捕捉噪声抑制位(ICNC)来使能。如果使能了输入噪声抑制功能,捕捉输入信号的变化到ICR1寄存器的更新延迟四个时钟周期。噪声抑制功能使用的系统时钟,与预分频器无关。输入捕捉信号触发方式的选择由寄存器TCCR1B中的第6位ICES1决

9、定。当ICES1设置为“0”时,输入信号的下降沿将触发输入捕捉动作;当ICES1为“1”时,输入信号的上升沿将触发输入捕捉动作。一旦一个输入捕捉信号的逻辑电平变化触发了输入捕捉动作时,T/C1计数器TCNT1中的计数值被写入输入捕获寄存器ICR1中,并置位输入捕获标志位ICF1,申请中断处理。寄存器ICR1由两个8位寄存器ICR1H、ICR1L组成,当T/C1工作在输入捕捉模式时,一旦外部引脚ICP1或模拟比较器有输入捕捉触发信号产生,计数器的TCNT1中的计数值写入寄存器ICR1中。T/C1工作在其它模式时,如PWM模式,ICR1的设定值可作为计数器计数上限(TOP)值。此时ICP1引脚与计

10、数器脱离,将禁止输入捕获功能。输入捕捉事件发生后产生的中断申请标志ICF1,以及相应的中断屏蔽控制位TICIE1可以在定时计数器中断标志寄存器TIFR和定时器中断屏蔽寄存器TIMSK中找到。2、定时/计数器1的寄存器定时/计数器1有这些寄存器: 计数器寄存器TCNT1、输出比较寄存器OCR1A、OCR1B和输入捕捉寄存器ICR1,这几个寄存器都是16位的寄存器。 定时计数器中断标志寄存器TIFR。 定时器中断屏蔽寄存器TIMSK。 T/C1控制寄存器TCCR1A、TCCR1B,为2个8位寄存器。3、T/C1的输入捕捉功能描述T/C1的输入捕捉功能可以应用于精确捕捉一个外部事件的发生,记录事件发

11、生的时间印记(Time-stamp)。当一个输入捕捉事件发生,如外部引脚ICP1上的逻辑电平变化时,T/C1计数器TCNT1中的计数值被实时的写入到输入捕捉寄存器ICR1中,并置位输入捕获标志位ICF1,产生中断申请。因此,利用输入捕捉功能可以实现对周期的精确测量。采用输入捕捉功能进行精确周期测量的基本原理比较简单,实际上就是将被测信号作为ICP1的输入,被测信号的上升(下降)沿作为输入捕捉的触发信号。T/C1工作在常规计数器方式,对设定的已知系统时钟脉冲进行计数。在计数器正常工作过程中,一旦ICP1上的输入信号由高变低(假定下降沿触发输入捕捉事件)时,TCNT1的计数值被同步复制到了寄存器I

12、CR1中。换句话将,当每一次ICP1输入信号由高变低时,TCNT1的计数值都会再次同步复制到ICR1中。如果能及时的将两次连续的ICR1中数据记录下来,那么2次ICR1的差值乘上已知的计数器计数脉冲的周期就是输入信号一个周期的时间。由于在整个过程中,计数器的计数工作没有受到任何影响,捕捉事件发生的时间印记也是由硬件自动同步复制到ICR1中的,因此所得到的周期值是非常精确的。4、T/C1实现输入捕捉功能的寄存器设置T/C1的寄存器在不同工作方式下的设置是不同的,将不同设置放在一起介绍会很复杂,同时也容易引起混乱,在这里我们将这些设置分开来,在某一特定功能中,只介绍与本功能有关的寄存器以及相应设置

13、,另外在用C语言进行单片机内部寄存器设置时,一般可以不考虑寄存器的地址,所以在这里我们把有关寄存器内容的介绍简化。(1) T/C1计数寄存器TCNT1位76543210读/写R/WR/WR/WR/WR/WR/WR/WR/W初始化值00000000TCNT1是T/C1的计数值寄存器,该寄存器可以直接被MCU读写访问。写TCNT1寄存器将在下一个定时器时钟周期中阻塞比较匹配。因此,在计数器运行期间修改TCNT1的内容,有可能将丢失一次TCNT1与OCR1的匹配比较操作。(2) 定时计数器中断屏蔽寄存器TIMSK位76543210TICIE1读/写R/W初始化值00000000 Bit 5 TICI

14、E1: T/C1 输入捕捉中断使能当该位被设为 1”,且状态寄存器中的 I 位被设为 1” 时, T/C1 的输入捕捉中断使能。一旦TIFR的 ICF1置位,CPU即开始执行T/C1 输入捕捉中断服务程序(3)定时计数器中断标志寄存器TIFR位76543210ICF1读/写R/WR/WR/WR/WR/WR/WR/WR/W初始化值00000000 Bit 5 ICF1: T/C1 输入捕捉标志位外部引脚 ICP1 出现捕捉事件时 ICF1置位。此外,当 ICR1 作为计数器的 TOP值时,一旦计数器值达到 TOP, ICF1 也置位。执行输入捕捉中断服务程序时ICF1自动清零。也可以对其写入逻辑

15、1”来清除该标志位。(4)T/C1控制寄存器TCCR1B位76543210$33($0053)ICNC1 ICES1WGM13 WGM12CS12CS11CS10读/写R/WR/WR/WR/WR/WR/WR/WR/W初始化值00000000 8位寄存器TCCR1B是T/C1 的控制寄存器,它用于选择计数器的计数源,工作模式和比较输出的方式等。 Bit 7 ICNC1: 入捕捉噪声抑制器置位 ICNC1 将使能输入捕捉噪声抑制功能。此时外部引脚 ICP1 的输入被滤波。其作用是从 ICP1 引脚连续进行 4 次采样。如果 4 个采样值都相等,那么信号送入边沿检测器。因此使能该功能使得输入捕捉被延

16、迟了 4 个时钟周期。 Bit 6 ICES1: 输入捕捉触发沿选择该位选择使用 ICP1 上的哪个边沿触发捕获事件。 ICES 为 0” 选择的是下降沿触发输入捕捉; ICES1 为 1” 选择的是逻辑电平的上升沿触发输入捕捉。按照 ICES1 的设置捕获到一个事件后,计数器的数值被复制到 ICR1 寄存器。捕获事件还会置为 ICF1。如果此时中断使能,输入捕捉事件即被触发。当ICR1用作TOP值(见TCCR1A与TCCR1B寄存器中WGM13:0位的描述)时,ICP1与输入捕捉功能脱开,从而输入捕捉功能被禁用。 Bit 4:3 WGM13:2: 波形发生模式见 TCCR1A寄存器中的描述。

17、 Bit 2:0 CS12:0: 时钟选择这 3 位用于选择 T/C 的时钟源,见表4.1.1。在本实例中我们使用预分频器1024分频,即CS02:0=5.表3.1.2 T/C0的时钟源选择CS02CS01CS00说 明000无时钟源(停止T/C0)001clkT0S(不经过分频器)010clkT0S/8(来自预分频器)011clkT0S/64(来自预分频器)100clkT0S/256(来自预分频器)101clkT0S/1024(来自预分频器)110外部T0脚,下降沿驱动111外部T0脚,上升沿驱动(5)T/C1控制寄存器TCCR1A位76543210$33($0053)COM1A1COM1A

18、0COM1B1COM1B0FOC1AFOC1BWGM11WGM10读/写R/WR/WR/WR/WR/WR/WR/WR/W初始化值00000000 8位寄存器TCCR1AB是T/C1的控制寄存器,它用于选择计数器的比较输出模式,工作模式等,在本实例中暂时用不到,可以不必理会。3.1.3、电路本实例的电路包含按键检测电路和LED亮灭控制电路。按键检测电路和LED亮灭控制电路在前面的实例中已经做过介绍,在此不再给出电路图,请参阅前面相关实例。1、电路原理在本实例中利用按键K3产生外部输入捕捉信号,单片机根据按键状态控制PB0口上连接的LED的亮灭,并通过控制PB7口上连接的LED的亮灭指示两次按键按

19、下的间隔时间。2、电路连接按键K3连接单片机的PD6口,PD6口正是定时/计数器1的输入捕捉端口,从而我们就可以正常捕捉外部输入事件。单片机的PB0、PB7口连接两个LED。3.1.4、程序设计1、程序功能程序的功能是使用定时/计数器1的输入捕捉功能检测外部按键的按下,并计算两次按键按下的时间间隔。当按键按下后,记录一次外部输入事件,并控制PB0口连接的LED的亮灭翻转一次,当按键再次按下后,计算两次按键按下的时间间隔,如果间隔大于2S,则控制PB7口连接的LED的亮灭翻转一次。 单片机定时计数器1输入捕捉中断的编程在本例中,使用单片机的定时/计数器1的外部事件输入捕捉端口PD6(ICP1)检

20、测外部输入事件,每出现一次电平的下降沿变化,定时计数器1(TCNT1)的计数值加1,并送到输入捕捉寄存器ICR1。所以在程序中需要对相应的寄存器进行设置,并且编写中断服务程序。关于中断函数的编写,可以参考WINAVR(GCC)的库函数手册里面的中断库函数介绍里面找到使用例子。本实例用到的是定时/计数器1的输入捕捉中断,对应中断向量名称为:TIMER1_CAPT_vect,则中断服务函数应写为:ISR(TIMER1_CAPT_vect ) 控制LED的显示在中断服务程序中,当按键K3按下一次,LED1的状态翻转一次(由亮到灭或由灭到亮),如果两次按键按下的时间间隔大于2S,则LED1的状态翻转一

21、次(由亮到灭或由灭到亮)。2、主要变量和函数说明 本例中需要编写中断函数,函数的功能是:当有外部发生一次下降沿信号时,定时计数器1(TCNT1)的计数值加1,并送到输入捕捉寄存器ICR1,LED1的状态翻转一次。然后判断两次按键按下的时间间隔是否大于2S,如果大于2S,则LED7的状态翻转一次(由亮到灭或由灭到亮)。 3、使用WINAVR开发环境,makefile文件同前面的例子,直接复制到本实例程序的文件夹中即可。 4、程序代码#include #include #include /中断函数头文件int main(void) PORTB = 0X00; / DDRB = 0Xff; / LE

22、D灯接口,设为输出 PORTD = 0X40; /使能PD6的内部上拉电阻,平时该口为高电平 DDRD = 0Xbf; /PD6(ICP1)口为定时/计数器1的输入捕捉口,设为输入口 TCCR1B |= (1 ICNC1) | (1 CS10) | (1 CS12); /开启输入捕捉口的噪声抑制器, /时钟1024分频,下降沿捕捉 TIMSK |= (1 TICIE1); /输入捕捉使能 sei(); /使能全局中断 while(1) /定时/计数器1的输入捕捉中断服务程序,输入捕捉端口有下降沿电平,则触发中断ISR(TIMER1_CAPT_vect ) TCNT1 = 0; / 清零计数寄存

23、器,下一次仍从0开始计数 PORTB = (1 2000) /判断两次按键间隔时间大于2S吗 ICR1 = 0; /如果大于2S,清零输入捕捉寄存器 PORTB = (1 PB7); /LED8状态翻转 3.2 定时/计数器1的快速PWM实验3.2.1、实例功能在上一个实例中,我们已经了解了定时/计数器1的主要功能。并且学习了其中的一个增强功能:外部事件输入捕捉功能。在本实例中,我们讲学习定时/计数器1的另一个增强功能:双通道比较匹配功能。在快速PWM模式下,利用双通道比较匹配功能在PD4(OC1A),PD5(OC1B)两个端口上同时实现两个LED的渐明渐暗效果。本实例共有3个功能模块,分别描

24、述如下: 单片机系统:使用定时/计数器的8位快速PWM模式,实现两路LED的渐明渐暗变化。 外围电路: LED显示控制电路。 软件程序:熟悉掌握ATmega16单片机的定时/计数器1的8位快速PWM功能程序的编写。3.2.2、器件和原理本实例首先介绍ATmega16单片机的定时/计数器1的双通道输出比较匹配功能,然后详细介绍如何利用定时/计数器1的8位快速PWM功能在两个端口上获得不同占空比的脉冲。最后通过一个程序来实现这一功能。1、ATmega16单片机的定时/计数器1的双通道比较匹配功能介绍T/C1配备了2个比较匹配输出单元OC1A、OC1B和比较匹配寄存器OCR1A、OCR1B。同时它的

25、PWM模式,有多种不同的计数器上限(TOP)值可供选择, 由于T/C1配备了2个比较匹配输出单元OC1A、OC1B和比较匹配寄存器OCR1A、OCR1B,因此使用一个计数器就可以得到相同频率,不同占空比的2路PWM输出。2路PWM波的占空比的确定和调整分别由寄存器OCR1A、OCR1B确定,分别在OC1A、OC1B上输出。2、T/C1实现输入捕捉功能的寄存器设置T/C1的寄存器在不同工作方式下的设置是不同的,将不同设置放在一起介绍会很复杂,同时也容易引起混乱,在这里我们将这些设置分开来,在某一特定功能中,只介绍与本功能有关的寄存器以及相应设置,另外在用C语言进行单片机内部寄存器设置时,一般可以

26、不考虑寄存器的地址,所以在这里我们把有关寄存器内容的介绍简化。(1)T/C1计数寄存器TCNT1位76543210读/写R/WR/WR/WR/WR/WR/WR/WR/W初始化值00000000TCNT1是T/C1的计数值寄存器,该寄存器可以直接被MCU读写访问。写TCNT1寄存器将在下一个定时器时钟周期中阻塞比较匹配。因此,在计数器运行期间修改TCNT1的内容,有可能将丢失一次TCNT1与OCR1的匹配比较操作。(2) 定时计数器中断屏蔽寄存器TIMSK位76543210TICIE1OCIE1AOCIE1BTOIE1读/写R/W初始化值00000000 Bit 5 TICIE1: T/C1 输

27、入捕捉中断使能当该位被设为 1”,且状态寄存器中的 I 位被设为 1” 时, T/C1 的输入捕捉中断使能。一旦TIFR的 ICF1置位,CPU即开始执行T/C1 输入捕捉中断服务程序,在本例中我们可以不必设置输入捕捉中断使能。 Bit 4 OCIE1A: 输出比较 A 匹配中断使能当该位被设为 1”,且状态寄存器中的 I 位被设为1” 时,T/C1 的输出比较 A 匹配中断使能。一旦 TIFR 上的 OCF1A 置位,CPU 即开始执行 T/C1 输出比较 A 匹配中断服务程序。 Bit 3 OCIE1B: T/C1输出比较 B 匹配中断使能当该位被设为 1”,且状态寄存器中的 I 位被设为

28、 1” 时,使能 T/C1 的输出比较 B匹配中断使能。一旦 TIFR 上的 OCF1B 置位,CPU 即开始执行 T/C1 输出比较 B 匹配中断服务程序。 Bit 2 TOIE1: T/C1 溢出中断使能当该位被设为 1”,且状态寄存器中的 I 位被设为 ”1” 时, T/C1 的溢出中断使能。一旦TIFR 上的 TOV1 置位, CPU 即开始执行 T/C1 溢出中断服务程序。 在本例中我们没有使用任何中断,所以该寄存器可以不必进行设置。(3)定时计数器中断标志寄存器TIFR位76543210ICF1 OCF1AOCF1BTOV1读/写R/WR/WR/WR/WR/WR/WR/WR/W初始化值00000000该寄存器用于保存相应中断产生时的中断标志位,如果使用中断服务程序,则在进入中断服务程序后,硬件将会自动将相应中断标志位清零。如果使用软件查询的方法代替中断服务程序,则需要在软件中将相应标志位清零(4)T/C1控制寄存器TCCR1B位76543210$33($0053)WGM13 WGM12CS12CS11CS10读/写R/WR/WR

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1