ADuC7023具有3个通用定时器/计数器:定时器0、定时器1和定时器2(或看门狗定时器)。
这3个定时器可以在自由模式或周期模式下工作。
这3个定时器可以在自由模式或周期模式下工作。
在自由模式下,计数器将从最大值递减计数一直到零,并且在达到最小值后重新递增计数。(它也可以从最小值开始递增计数直到满量程并且在达到最大值后重新开始递减计数。)
在周期模式下,计数器以装载寄存器(TxLD寄存器)中的值为起始值,开始递减/递增计数至0或满量程,然后再以该寄存器中的值为起始值,重新开始计数。(即一旦打开定时器,会一直周期循环不停的计数,如果在定时器中断处理程序中没有及早的关闭定时器,则可能会导致中断混乱,这次中断未处理完,下次中断来临。因此很有必要添加这几句:
T1CON=0x40; //关闭定时器,就不会产生中断
T1CLRI = 0; // Clear Timer IRQ
//处理中断代码
//T1CON=0xC0; //处理完毕后如果还需要采用刚才的装载寄存器装载的值进行定时的话可以再开启中断。
)
通过对某一定时器的控制寄存器(TxCON)进行写操作,可以启动相应的定时器。
①在正常模式下,当递减计数时,每一次计数器的值达到0时就会产生一个IRQ中断。当递增计数时,每一次计数器的值达到满量程值时也会产生一个IRQ中断。向某一定时器(TxCLRI)的清除寄存器内写入任一数据,可以清除IRQ中断。
②当使用异步的时钟定时器时,取消定时器模块内的中断所占用的时间要比执行中断程序中的代码所占用的时间长。在退出中断服务程序