Atmega16的定时器time0.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文档。上传文档
查看更多
Atmega16的定时器time0

Atmega16的定时器time0 分类: AVR 2007-09-01 05:04 3180人阅读 评论(2) 收藏 举报 AVR使用范例--定时器应用范例/avr_examples/timer.html。使用ICC application builder快速配置定时器后生成的代码如下: //ICC-AVR application builder : 2007-8-28 0:55:55 // Target : M16 // Crystal: 7.3728Mhz #include iom16v.h #include macros.h void port_init(void) { PORTA = 0x00; DDRA = 0x00; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x00; DDRD = 0x00; } TIMER0 initialize - prescale:1024 /*定时器预分频,预分频由TCCRn的CS02,CS01,CS00确定,详情查看数据手册*/ // WGM: Normal/*定时器,也由TCCRn确定*/ // desired value: 20mSec/*定时器期望设定时间*/ // actual value: 19.861mSec (0.7%)/*定时器实际定时时间,误差比例*/ void timer0_init(void) { /*定时器停止,TCCR0寄存器完全控制timer0的运行情况,详细可参考数据手册。*/ TCCR0 = 0x00; //stop TCNT0 = 0x71; //set count /*定时器寄存器开始值*/ OCR0 = 0x8F; //set compare /*定时器比较值*/ TCCR0 = 0x05; //start timer /*定时器开始*/ } #pragma interrupt_handler timer0_comp_isr:20 void timer0_comp_isr(void) { //compare occured TCNT0=OCR0 } #pragma interrupt_handler timer0_ovf_isr:10 void timer0_ovf_isr(void) { TCNT0 = 0x71; //reload counter value } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); timer0_init(); MCUCR = 0x00; GICR = 0x00; TIMSK = 0x03; //timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } 下面我们一步一步按顺序来分析。 init_devices()函数首先调用port_init(),初始化端口端口I/O,这个在这里不重要,所以不讨论。然后init_devices()调用timer0_init(), 这里我们就应该仔细分析了。主要是各个寄存器的作用。岔开主题,我们所谓的写嵌入式程序,人家说主要就是写寄存器。其实还真是,所以,我们学习嵌入式的时 候,就是遇到寄存器的时候,多查数据手册,数据手册才是你找到答案的源泉,再辅以网络的资源,比方说一些比较白话的解释,让你了解得正深刻。现在。我们回 到timer0_init()函数中来。 ? 一.Timer/Counter Contro Register – TCCR0 p83 ??? 1.??? Bit 7 – FOC0: Force Output Compare 2.??? Bit 3, 6 – WGM01:0: Waveform Generation Mode 3.??? Bit 5:4 – COM01:0: Compare Match Output Mode, OC0 连接到物理引脚上时,COM01:0的功能依赖于 WGM01:0 的设置.其中有几个模式表,具体见数据手册。 4.??? Bit 2:0 – CS02:0: Clock Select ? 函数timer0_init()中 TCCR0 = 0

文档评论(0)

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

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

1亿VIP精品文档

相关文档