这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 嵌入式开发» 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 跳转至

回复

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