该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
查了一晚上资料,总算大概了解了arduino定时器的大概用法了,总结一下(请指正):
1. mega2560好像有6个定时器(但应该都是统一的16MHz晶振作为时钟)。其中,第0号,默认用于delay();第1~5号,默认用于PWM。(上面那位兄弟提醒delaymicroseconds不使用定时器,谢谢)。开发者可以根据自己的需要,调整或改变定时器的默认用法,但可能会造成一些影响。比如:改变了定时器0,delay()可能就不能像预期的那样延时了。
2. 所有的定时器,都是通过相应的一组寄存器来控制的。包括:
TCCRx:Timer/Counter x – Control Register
TCNTx:Timer Counter x – Counter
OCRx:Timer/Counter x – Output Compare Register
ICRx:Timer/Counter x – Input Capture Register
其中x为0~5的数字。第0号是8位定时器,第1~5号是16位定时器。所以它们的寄存器数量也不同,通过后缀来区分。比如:T/C0只有OCR0A、OCR0B两个8-bit输出比较寄存器;而T/C1有OCR1AH、OCR1AL、OCR1BH、OCR1BL、OCR1CH、OCR1CL,共6个8-bit输出比较进村器。
3. 定时器设置步骤:
a. 通过SREG寄存器,暂时屏蔽中断机制,避免干扰。
b. 通过TCCRx寄存器,设置定时器的时间源分频模式、工作模式、中断