msp430中断定时的问题,该怎么算啊,如图P1.1多长时间去翻一次啊啊,该怎么计算

 我来答
运新一
2014-09-06 · TA获得超过201个赞
知道小有建树答主
回答量:150
采纳率:100%
帮助的人:125万
展开全部
定时器部分代码的解析如下:

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实际的翻转速度。
谢谢,祝好运!
追问
请问:
连续计数模式情况下,如果设置了CCRO=5000的话,TAR计数到CCR0=5000的时候就会触发中断进入相应的程序,如果不设置CCRO=5000的话,就是TAR计数到FFFFH,才会触发中断,进入相应的中断段程序么?这个点我有点不明白
谢谢
追答

首先,能够触发中断的条件包含两个:

1. 是有相关的FLAG被Set起来;

2. 是中断要被使能。

这两者都满足CPU才会响应此中断。

但是从你的代码来看的话,你使能了CCR0的中断(CCTL0 = CCIE;),如果你没设置CCRO=5000的话,那么CCR0就是默认值0,这时当你的TAR计数到0的时候会产生中断,这一点要清楚。另外,你说的TAR计数到FFFFh会触发中断是不对的,从触发中断的条件1来看,当TAR从FFFFh计数到0时TAIFG会置位,如果使能了TAIE,也就是你上面的一句代码换成“TACTL = TASSEL_2 +  MC_2 + TAIE;”后才会触发一个中断,具体看一下下面的图片。

补充点:

一、TimerA有两个中断Flag,

        1是CCIFG,由CCR0置位

        2是TAIFG,由CCR1、CCR2和Overflow置位。

二、中断向量入口

        1. CCIFG的入口是:            

            #pragma vector=TIMERA0_VECTOR

            __interrupt void Timer_A0 (void)

            {

            }

        2. TAIFG的入口是:           

           #pragma vector=TIMERA1_VECTOR

           __interrupt void Timer_A1(void)

            {

            }

            因为TAIFG有三个中断源,所以进入这个中断服务程序后要去判断是CCR1、CCR2和                        Overflow中的哪个触发的,具体参考一下附件中的代码:




艾普斯
2024-07-18 广告
稳频稳压电源哪家好?艾普斯电源(苏州)有限公司开始专业研发、制造及营销交流稳压电源,满足全球电子及信息业对电源设备日益蓬勃的市场需求。迄今为止,业已发展成为交流不间断电源、稳压电源、变频电源、中频航空- 军事专用电源、直流电源、逆变电源等产... 点击进入详情页
本回答由艾普斯提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式