Atmega16定时器(dhl).ppt

  1. 1、本文档共73页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Atmega16定时器(dhl)

知识回顾与新课引入; AVR定时器/计数器;定时与计数原理;0xF5; 计数器原理框图如图所示。; 当外部发送来一个有效脉冲时,在S1闭合的情况下,计数器会加1,即表示计数器记录了一次外部事件。当外部脉冲为连续的脉冲时,计数器将不断地加1,直到计数器溢出(如8位计数器从00到FFH就溢出)。计数器溢出时计数器自动回“0”,同时向溢出标志TF进位,计数器又从“0”开始继续计数。;当S2合上并且TF=1时,可向CPU请求中断; 溢出标志TF的作用有两个:一是向CPU申请中断,二是当中断屏蔽时供CPU查询。一个8位的计数器从0开始到发出溢出中断请求,要记录256个脉冲。当它从初值156开始到发出溢出中断请求,则要记录100个脉冲。所以可在初值寄存器中设定不同的计数器初值,来确定每中断一次记录的脉冲数。; 其中的“初值寄存器”、“S1”、“S2‘’就是为编程应用而设置的。 初值寄存器的值是每次溢出后由此值开始计数,例如初值寄存器的值设为156,则每次溢出后都从156开始计数,所以每计100数后就到256,产生一次溢出。 S1闭合启动计数器工作,否则禁止计数器工作。 S2闭合允许计数器溢出中断,否则禁止溢出中断。 在对计数器编程时,这些寄存器、相应控制位等必须根据需要进行设置,以便计数器按预定要求正常工作。;0xFD;定时原理; 定时功能实质上也是通过计数器的计数来实现的。当计数器的输入脉冲频率恒定时,计数器所记录的数值就代表了时间的概念。频率恒定的脉冲可以来自外部晶振,也可以来自内部RC电路。 ;内部时钟源; 可见,当计数器的计数频率恒定时( l μ s ),可以根据计数器的“计数值”计算出定时时间。反过来也可按定时时间要求计算出计数器的预置初值。若要定时100微秒,则要记录100个数,计数器的预置值应该设置为156,即9CH。 ;事件捕获原理;PWM输出原理与方法; PWM原理框图如下图所示:;定时器/计数器以一定的频率上、下计数,即计数器从00H~FFH(假设定时器/计数器为8位)进行计数,然后计数器反向从FFH~00H进行计数,如此反复。当计数器中的数值与比较寄存器中的数值相等时,比较器的输出按PWM预定的规律输出一系列的脉冲波,如图 所示。 ; ATmega16的定时器/计数器资源 定时器/计数器2应用举例 T/C1的应用举例 看门狗定时器; 定时计数器概述; 硬件定时:用RC电路或逻辑部件定时如555电路,该方式除额外增加硬件资源外,使用起来灵活性也较差;; 采用单片机定时/计数器定时:为了使用方便,解决上述两种方式的弊端并增加单片机的控制功能,把定时计数逻辑电路集成在单片机芯片中,称之为定时计数器。 ;外引脚、内部RC振荡器、熔丝配置位、分频器、计数器、中断系统、控制寄存器等组成。;;;0;比较匹配输出使能位;;1 熔丝选择位的内部RC振荡设置(0001-0100);CKLEL3; 3 定时计数器的预分频器 ATmegal6的T/CO和T/C1由一个10位的预定比例分频器提供时钟源。该预分频器将系统时钟按设定的比例进行分频,以产生不同周期的时钟clkT0、clkTl,分别作为时钟源提供给T/CO和T/C1使用。图6—7为T/CO、T/C1的预定比例分频器示意图。T/CO和T/C1的时钟源可来自芯片内部,也可来自外部引脚T0(PB0)和T1(PBl)。当选择外部引脚的输入信号为时钟源时,预分频器不对外部引脚的输入信号进行预分频。当选择芯片内部时钟时,通过设置预分频器可选择4种不同的分频比例,它们是8、64、256、1024分频。;;T0/T2控制寄存器TCCR0/TCCR2:;1; 定时计数器应用举例;//例1程序清单: #include mega16.h //器件文件头 void main(void) //主程序 { //端口初始化 DDRD = 0xff; //设定PD口为输出。 TCCR1B=6; //用下降沿计数 TCNT1=0; //计数器初值; while (1) { PORTD=~TCNT1;//将计数结果取反后送D口显示。 } }; //例2程序清单: #include mega16.h //器件文件头 void main(void) //主程序 { //端口初始化 DDRD = 0xff; //设定PD口为输出。 TCCR0=6; //用下降沿计数 TCNT0=251; //计数器初值; while (1

文档评论(0)

ddf55855 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档