ATEMAGE16中断初值计算方法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ATEMAGE16中断初值计算方法.doc

AVR?定时器中断初值计算方法? 使用芯片?AT?Mega16?????外部晶振?4.00MHz 定时器1???(16位定时器)寄存器?TCCR1B?=?0x04?设定?256预分频 要利用定时器定时1秒 1,4000000?/?256?=?15625????说明定时器每当?1/15625?秒?就会触发一次中断 2,65535?-?15625?=?49910????计算出要累加多少次才能在1秒后出发定时器1的溢出中断 3,49910?==?C2?F6???????????将计算后的值换算成16进制 4,?TCNT1H?=?0xC2?;?????????????对寄存器赋值 ???????TCNT1L?=?0xF6?; ================================================= 例如用16位定时器TIMER1,4MHZ晶振,256分频,100ms定时,如何求得初值赋给TCNT1? 65536-(4M/256)*0.1=63973.5 其中,4M是晶体频率,0.1是定时时长单位秒。 对于8位的定时器 T=(2^8-计数初值)*晶振周期*分频数=(2^8-计数初值)/晶振频率*分频数计数初值=2^8-T/晶振周期/分频数=2^8-T*晶振频率/分频数 因为AVR一指令?一周期 ? IAR?For?AVR?精确延时 ? C语言中,想使用精确的延时程序并不容易。IAR?中有这样的一个函数?__delay_cycles(),该函数在头文件intrinsics.h中定义,函数的作用就是延时N个指令周期。根据这个函数就可以实现精确的延时函数了(但不能做到100%精确度)。 实现的方法: 建立一个delay.h的头文件: #ifndef?__IAR_DELAY_H #define?__IAR_DELAY_H #include?intrinsics.h #define?XTAL?8?//可定义为你所用的晶振频率(单位Mhz)? #define?delay_us(x)?__delay_cycles?(?(unsigned?long)(x?*?XTAL)?)? #define?delay_ms(x)?__delay_cycles?(?(unsigned?long)(x?*?XTAL*1000)?) #define?delay_s(x)?__delay_cycles?(?(unsigned?long)(x?*?XTAL*1000000)?) #endif? 注意:?__delay_cycles(x),x必须是常量或则是常量表达式,如果是变量则编译报错! ? 关于溢出中断不管是哪个单片机都是不断累加,使其寄存器溢出触发中断,然后跳转到中断函数处执行中断服务程序。对于定时器初值的设定可以加深对定时器的工作原理的理解。 ???????ATMega16?里面有8位和16位两种定时器,他们何时会溢出这个是固定的,也就是到达他们的计数范围的最大值就会产生中断,8位的定时器的最大计数范围是0~256(2的8次方),就是累加到256后他就会产生中断,16位的定时器最大计数范围是0~65536(2的16次方),累加到65536时他就会产生中断。 ?????而我们所谓的计数初值是就是要设定定时器在什么地方开始计数,以8位定时器为例比如:初值为100,所以定时器从100开始累加,累加了156次,加到256后产生中断,这就是中间消耗的时间和指令周期就是我们要去设定的时间;再比如:初值是200,所以定时器从200开始累加,累加了56次,加到256后产生中断,可以看到第一定时要累加156次才会中断而第二次只要累加56次就会产生中断,显然第一次设定的时间要比第二次的长。 ??????定时器不仅可以定时,而且我们用到定时器的时候往往是需要精确定时的时候。我们可以计算出我们设定的初值会在多长时间后进入中断。 实验平台:ATMega16???? 晶振:??????11.0592?MHz 对初值的计算: ?????????????????????1/?1024?=?10800???????????设定为1024倍分频?,得到每1秒需要进行多少次累加 ?????????????????????2,10800?/?100?=?108?????????????????????????得到10ms?的定时需要进行多少次累加?。 ?????????????????????3,256?-?108?=?148?????????????????????????????计算范围最大值减去要累加的时间,得到初值,即从哪里开始累加才能在溢出时为10ms的时间。???????? ?????????????????????4,148?==?0x94????

文档评论(0)

xingkongwd + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档