实战 msp430:TB 捕获 PWM 波的脉冲宽度[转]
[
复制链接
]
A670521546
94
0
主
题
2207
帖子
1万
积分
积分
18635
�
收听
TA
�
发消息
电梯直达
楼主
发表于 2011-8-8 09:36:13 | 只看该作者
☞ 华强集团 华强 PCB 精工品质 50元起 在线下单
用 TB 捕获脉宽
想用 TBCCRO 捕获脉冲低电平宽度,思路是:tbccr0捕获到下
降沿中断,则记下 tbccro 的值,并改为上升沿触发;捕获到上升沿
中断,则记下 tbccro 的值,改为下降沿触发。
硬件:单片机:MSP430F149
晶振:32K,8M
输入信号:通过无线接收到低电平10ms,高电平7.5ms,
输入口:P4.0(TB0)
要求:捕获低电平的脉宽
软件:
1. 初步思路:通过定时器 TBCCR0作为捕获模块对外部输入信
号进行捕获:先设为下降沿捕获,如果捕获到,马上修改为上升沿
捕获,并马上 TBR 清零开始计数;如果不过到上升沿,马细奈?陆笛
兀?�裈 BCCR0的数据记下来,此即为脉冲低电平宽度。
2. 使用 TI 公司的 c 语言例程稍做修改程序可以运行。
3. 出现问题:程序能捕获到上升下降沿,并且捕获到的 width
总是忽大忽小,毫无规律。
程序改来改去毫无进展,头开始慢慢大了~~~
4.师兄过来看看说,怎么没有开晶振啊?我说没用到8M 的,
也就没专门开晶振~不过既然说起,要不干脆换个晶振试试,于是
加了段程序,并把 TB 改成用 MCLK(8M):
void InitSys()
{ unsigned int iq0;
//使用 XT2振荡器
BCSCTL1&=~XT2OFF; //打开 XT2振荡器
do
{
IFG1 &= ~OFIFG; // 清除振荡器失效标志
for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待 XT2起振
}
while ((IFG1 & OFIFG) != 0); // 判断 XT2是否起振
BCSCTL2 =SELM_2+SELS; //选择 MCLK=SMCLK 为 XT2