当前位置:首页 > 单片机 > 单片机
[导读]>>定时器比较值、计数值比较缓存寄存器TCMPBn、TCNTBn,这两个寄存器用于存储定时器的比较值和计数初始值。>>定时器比较值、计数值比较寄存器TCMPn、TCNTn,这两个寄存器是定时器的内部寄存器,用户无需进行操作。1.

>>定时器比较值、计数值比较缓存寄存器TCMPBn、TCNTBn,这两个寄存器用于存储定时器的比较值和计数初始值。

>>定时器比较值、计数值比较寄存器TCMPn、TCNTn,这两个寄存器是定时器的内部寄存器,用户无需进行操作。


1. 需要配置成定时器模式时使用以下的初始化函数,并且计数值到0时产生中断。

//****************定时器中断服务函数*****************

void __irq Timer0_isr()

{

//send_str((unsigned char *)"Timer0 interrupt is started!rn");

Led_on(0);Led_off(1);Led_off(2);Led_off(3);

dely(350);

Led_off(0);Led_on(1);Led_off(2);Led_off(3);

dely(350);

Led_off(0);Led_off(1);Led_on(2);Led_off(3);

dely(350);

Led_off(0);Led_off(1);Led_off(2);Led_on(3);

dely(350);

rSRCPND |= 1<<10;

rINTPND |= 1<<10;

//send_str((unsigned char *)"Timer0 interrupt is end!rn");

}

void Init_timer0()

{

rTCFG0 &= ~(0xff);

rTCFG0 |= 99;

rTCFG1 &= ~(0xf);

rTCFG1 |= 0x02;

rTCNTB0 =62500;//1s中断一次

rTCON |= 1<<1;

rTCON = 0x09;

//使能定时器中断

rINTMSK = ~(1<<10);

pISR_TIMER0= (unsigned int)Timer0_isr;

}

2. 若需要配置成PWM使用如下的初始化函数,不需要中断处理函数,并且有外部引脚提供输出。此情况下,输出电平变化两次,一次是比较值相等时,另一次是计数器减到0时,所以一下初始化程序产生的PWM方波的频率是62500Hz。

void Init_PWM0()

{

rGPBCON &= ~(0x03); //GPB0进行清零

rGPBCON |= 1<<1; //设置为TOUT0输出

rTCFG0 &= ~(0xff);

rTCFG0 |= 99; //第一级分频器的分频系数是100

rTCFG1 &= ~(0xf);

rTCFG1 |= 0x02;//第二级分频器的分频系数是8

rTCNTB0 =62;//0.001s中断一次

rTCMPB0 = rTCNTB0/2; //占空比为50%

rTCON |= 1<<1; //加载计数值和比较值分别到各自的缓存寄存器

rTCON = 0x0d;//0位开启定时器,2位当TCNT0和TCMP0相等时翻转电平,3位当TCNT0中的值减到0时,TCNTB0的值自动加载到TCNT0中计数。

}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭