msp430中断中定时器计数吗

2025-04-28 02:54:54
推荐回答(1个)
回答1:

定时器部分代码的解析如下:

TACTL = TASSEL_2 + MC_2;//TASSEL_2表示选择SMCLK作为定时器的时钟源,MC_2表示计数方式选择为连续计数模式(Continuous mode),此句配好后,SMCLK每一个周期都会使定时器模块中的TAR寄存器以连续的方式加1。
CCR0 = 50000;//此句用于初始化CCR0寄存器的值。
CCTL0 = CCIE;// 此句是使能CCR0的中断,也就是当上面提到的TAR等于CCR0时会触发一个中断而使程序进入相应的中断服务程序中,从而翻转P1.1。因为最初的TAR为0,所以相当于经过50000个SMCLK后翻转一下P1.1。而中断服务程序中的CCR0 += 50000;则是告诉定时器经过50000个SMCLK后再产生中断,也就是翻转P1.1,这样就实现了每隔50000个SMCLK会将P1.1翻转一次,倘若没有这句代码CCR0 += 50000;那么P1.1将会每隔0xFFFF个SMCLK完成一次翻转,这里理解稍微有点绕,不过不算复杂,看看SPEC就懂了。
总结:你贴的代码可以实现P1.1每50000个SMCLK翻转一次,如果你的SMCLK为1MHz的话,则表示P1.1每50毫秒翻转一次。但是从你的代码当中可以看出你未配置时钟模块,所以使用的是默认的时钟源,查一查SPEC,看看默认时的SMCLK是多少,这样就可以算出P1.1实际的翻转速度。