ritior 发表于 2007-12-20 15:42:16

请教马老师一个ATmega128订时器的问题

马老师,您好!我是您的读者,在<高档8位单片机ATmega128原理与开发应用指南>一书的bootloader(Page314)例程里有这样一个地方:
....
//初始化的M128的T/C0,15ms自动重载
OCR0=0xEA;
TCCR0=0x0F;
....
问题:没有定义TCNT0的初值,这个15ms是怎么算的?

这里,16Mhz时钟采用1024进行分频,我这样计算了一下:T=1024/16,000,000s=64000ns
t=T*234=64000*234~=15ms
直接用OCR0寄存器初值进行计算得出是15ms.但是一直觉得有问题.0CR0与TCNT0的不间断的进行比较,匹配时可以用来产生中断.TCNT0没有赋初值怎么增加或者减少来和OCR0比较啊?谢谢您!

machao 发表于 2007-12-20 19:09:16

定时器开始计数,TCNT0不就开始加1吗?从0加到0xEA,与OCR0相等,产生中断,TCNT0自动清零,然后下一个计数脉冲到来,TCNT0又加1......

有什么不清楚?

ritior 发表于 2007-12-21 09:29:10

谢谢马老师!这么说就是TCNTO的初值默认就是0了?我还以为一定要给TCNTO赋初值,然后开始记数后,在这个值的基础上每次加一或者减一,直到和0CR0的值一样.

ritior 发表于 2007-12-21 11:25:46

现在做一个项目的:
模式1: 输出按键+输入按键+控制按键(必须按照这个次序)
模式2: 输出按键+输入按键
模式1下,在控制按键按下前,输出输入可以改变.
一个完整的命令在3秒内完成,否则视为用户取消命令.比如:模式1下,按完输出后开始计时,3秒内没有按下"输入+控制";或者模式2下按完输出按键后开始计时,3秒内无输入按下,也视为用户取消当前命令.
期间,输出可以切换,比如:按下输出1开始计时后(不满3秒),用户又选择输出2,那么就取消原来的计时,从现在开始计时.
如果3秒内全部按键按下,则让定时器取消工作.

我用的是ATmega128,打算16位T/C1.请问:T/C开始工作后,在进入中断前能让它停止工作再重新从0开始计数吗?

machao 发表于 2007-12-21 20:39:04

请问:T/C开始工作后,在进入中断前能让它停止工作再重新从0开始计数吗?

都可以的.请仔细看器件手册,或相关资料说明,真正掌握T/C1的应用.
页: [1]
查看完整版本: 请教马老师一个ATmega128订时器的问题