这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » TIMER0 1 的设置,产生中断

共1条 1/1 1 跳转至

TIMER0 1 的设置,产生中断

助工
2014-11-13 19:28:31     打赏

上电的时候默认是 IHRC 12MHZ,然后 SYSCLK 是有这个分频出来的,默认是 /8 ,分别是 1/8 ,/4 ,/2 ,/1 根据需要得到分频


TIMER0 1是兼容标准51的,但是添加了一个预分频器 CKCON 里面的 SCA 1 0 决定分频,T0M T1M 决定是否使用这个分频器,分频为


12,4,48,8。默认是 12分频,而默认就是使用这个分频器的,可以社会自 T0M T1M 选择直接使用 SYSCLK 而不用分频器。
其他的设置跟普通 51 是一样的。


定时时间的计算,首先内部RC 是 12MHZ,如果选择的分频为 /1,那么SYSCLK 就是 1/12M 所以一个指令为 0.0833 us ,如果 CKCON


里面设置不使用分频器,则直接进入TIMER的计数,选择模式2的8位计数器,那么自由溢出 256 的时间为 21.33us ,示波器实测的结


果吻合
如果OSC 8分频,则相应的时间为 170.66 us
如果CKCON设置分频为 12,则相应时间为 2048,分频48 的话则为 8191.68 us


以下是 silicon labs 的官方例子


void main (void)
{
   PCA0MD &= ~0x40;                    // WDTE disable
   OSCICN |= 0x03;
   Timer0_Init ();                     // Initialize the Timer0
   Port_Init ();                       // Init Ports
   EA = 1;                             // Enable global interrupts


   while (1);                          // Loop forever
}


void Timer0_Init(void)
{
   TH0 = 0;           // Init Timer0 High register
   TL0 = TH0;                          // Set the intial Timer0 value


   TMOD = 0x02;                        // Timer0 in 8-bit reload mode
   CKCON = 0x02;                       // Timer0 uses a 1:48 prescaler
   ET0=1;                              // Timer0 interrupt enabled
   TCON = 0x10;                        // Timer0 ON
}



void Port_Init (void)
{
   XBR1 = 0x40;                        // Enable crossbar
   P2MDOUT = 0x0C;                     // Set LEDs
}


void Timer0_ISR (void) interrupt 1
{
}


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]