专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
MSP430F149定时器计数
2019-03-24 11:39
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
10695
2
1435
输入信号为占空比50%的方波,怎么使用芯片的定时器A/B对脉冲进行计数 此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
小呸
1楼-- · 2019-03-24 16:40
本来毫无头绪,现在在百度上了找了个说发,还不错
1.一开始让430的内部定时器跑起来,你要做的就是设置定时器的时钟,是否分频,是否中断,计数模式这些。要是用到捕获模式测频率就要选择成捕获模式,还有上升沿或者下降沿捕获这些。
2.之后的过程是这样的,当单片机的特殊引脚检测到你设定的触发信号之后就会立刻把当前时刻的TAR(定时器的16位计数器)中的数据记录到CCR中(也是一个16位计数器)。然后就跳进一个中断,如果你要测频的话就记录下此刻的CCR值,挑出中断,随后在下一个触发信号到来时再记录一次CCR的值,两次数据之差就是再除以定时器时钟频率就得到了被测信号一个方波的时间了。
3.关于特殊引脚,就是一个复用的脚,可以作为一般IO口,也可以作为捕获信号入口,就像msp430F449中P2.0还可以作为定时器A,CCR2的信号捕获口。
4.如果你要测的信号频率太低还需要一个溢出中断,溢出的话就是一个62256,最后溢出了几个就加上几个62256即可。
自己看了看说明书,有了比较大的进步,欢迎讨论
加载中...
狗蛋蛋他爹
2楼-- · 2019-03-24 18:26
< :TI_MSP430_内容页_SA7 --> 我在前面找的一个例子,讲的是捕获
P1DIR &= ~BIT2; // P1.2 = (InputDirection + TA0.1) = CCIxA.1 --> CCR1
P1SEL|=BIT2;
TACCTL1 = CAP + CCIS_0 + CM_3 + CCIE; // Capture CCIxA, both edge, interrupt enable.
TACTL = TASSEL_1 + MC_2; // ACLK, continuous mode.
_EINT();
volatile unsigned int CCRx = 0;
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TAIV_ISR(void)
{
unsigned int interval;
if(TACCTL1 & CCIFG)
{
TACCTL1 &=~ CCIFG;
P1OUT ^= BIT0;
interval=CCR1-CCRx;
CCRx=CCR1;
}
}
加载中...
一周热门
更多
>
相关问题
相关文章
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
1.一开始让430的内部定时器跑起来,你要做的就是设置定时器的时钟,是否分频,是否中断,计数模式这些。要是用到捕获模式测频率就要选择成捕获模式,还有上升沿或者下降沿捕获这些。
2.之后的过程是这样的,当单片机的特殊引脚检测到你设定的触发信号之后就会立刻把当前时刻的TAR(定时器的16位计数器)中的数据记录到CCR中(也是一个16位计数器)。然后就跳进一个中断,如果你要测频的话就记录下此刻的CCR值,挑出中断,随后在下一个触发信号到来时再记录一次CCR的值,两次数据之差就是再除以定时器时钟频率就得到了被测信号一个方波的时间了。
3.关于特殊引脚,就是一个复用的脚,可以作为一般IO口,也可以作为捕获信号入口,就像msp430F449中P2.0还可以作为定时器A,CCR2的信号捕获口。
4.如果你要测的信号频率太低还需要一个溢出中断,溢出的话就是一个62256,最后溢出了几个就加上几个62256即可。
自己看了看说明书,有了比较大的进步,欢迎讨论
P1DIR &= ~BIT2; // P1.2 = (InputDirection + TA0.1) = CCIxA.1 --> CCR1
P1SEL|=BIT2;
TACCTL1 = CAP + CCIS_0 + CM_3 + CCIE; // Capture CCIxA, both edge, interrupt enable.
TACTL = TASSEL_1 + MC_2; // ACLK, continuous mode.
_EINT();
volatile unsigned int CCRx = 0;
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TAIV_ISR(void)
{
unsigned int interval;
if(TACCTL1 & CCIFG)
{
TACCTL1 &=~ CCIFG;
P1OUT ^= BIT0;
interval=CCR1-CCRx;
CCRx=CCR1;
}
}
一周热门 更多>