求教[马老师讲义第8章例8.3]:使用定时器0中断实现N分频的原理是什么?
马老师好:我在做您编写的讲义第8章《8位计数器的应用》上的例8.3“N分频系统设计”时遇到了不明白的地方,特向您请教。
该例程采用定时器0的普通方式和CTC(比较匹配时清零定时器)方式结合的办法来对外部输入的脉冲进行任意频率的分频(当然分频也是有范围的)。
要求是进行5分频,程序中有如下一段定义:
TCNT0=0xFB; //设置T/R寄存器值
OCR0=0xFD; //设置OCR0的比较值,>TCNT0 的初始值,<0xFF
我的理解是在外部脉冲作用下,TCNT0加1,直到和OCR0相等,则进入比较匹配中断服务程序;而后TCNT0继续在外部脉冲条件下加1,直到加到0x00时进入溢出中断服务程序。(在中断服务程序中设置输出电平高低以控制输出波形)。
我的疑问是:当TCNT0和OCR0相匹配时,按照器件手册上的说法,似乎应该是将TCNT0清0了,如果确实是这样,那在执行完比较匹配中断服务程序后TCNT0又怎么能够溢出呢?程序不是永远执行不了溢出中断服务程序了吗?
这个疑问百思不得其解,望老师赐教!不胜感激! 你还没有彻底了解T/C0的工作方式。
在例8.3中采用的是T/C0工作方式为普通模式(不可能同时还工作在CTC方式的),结合比较匹配中断实现的。
当TCNT0与与OCR0相等时,T/C0不会清另(不是CTC方式),但会进入比较匹配中断服务的。
理解了这个例子,就容易知道利用T/C如何实现PWM了。
下面是T/C0的初始化代码,你怎么要漏掉一句呢?
// T/C0 初始化
TCCR0=0x07; // T/C0工作于普通模式,T0上升沿触发
TCNT0=0xFB;
OCR0=0xFD; // 设置OCR0的比较值,>TCNT0的初始值,<0xFF 呵呵,太谢谢马老师了。我对T/C0的工作方式确实没有真正理解。
一语值千金啊,让我茅塞顿开:)
再次诚挚感谢马老师的悉心指导*_*
-----此内容被yorkwilliam于2006-11-27,23:44:14编辑过 马老师你好,我还是不明白你怎么计算出是5分频的,谢谢
页:
[1]