Etual 的学习笔记 https://bbs.21ic.com/?289322 [收藏] [复制] [RSS]

日志

TIMER0 1 的设置,产生中断

已有 830 次阅读2012-1-8 04:09 |个人分类:C8051F单片机|系统分类:单片机

上电的时候默认是 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
{
}


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)