msp430频率测量问题

[复制链接]
查看11 | 回复1 | 2011-8-6 19:02:49 | 显示全部楼层 |阅读模式
我要检测占空比为百分数之五十方波频率,子主系统时钟均是8M,但是液晶总是显示65535,这是怎么回事啊?请高手帮忙调试或指导一下,非常感谢。。。
#include "msp430x14x.h"
#include "cry1602.h"
uint start,end;
uint width; //==用于存放脉宽==
uint period; //==用于存放周期==
uint frequency; //==用于存放频率==
uint fy[]; //==用于存放频率显示数据==
uchar pinlv[]={"Frequency:"};
uchar hz[]={"HZ "};
void process(void); //==函数声明==
void Initclk();
//==初始化时钟==
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; //==关狗==

Initclk(); //==初始化时钟,SMCLK,MCLK均为8M==

P1DIR&=~BIT2;
P1SEL |= BIT2; //==设置P1.2端口为功能模块使用,即:做捕获源==
TACTL = TASSEL_2+ID_3+TACLR+TAIE+MC1;//==定时器A时钟信号选择SMCLK,8分频,同时设置定时器A计数模式为连续计数模式==

CCTL1 = CM_1+CCIS_0+SCS+CAP+CCIE; //==输入上升沿捕获,CCI0A为捕获信号源==
_EINT(); //==开全局中断允许==
process();
LcdReset();
//初始化LCD
DispStr(3,0,pinlv);
DispStr(13,1,hz);

for(int i=0;istart

width = end-start; //==实际脉冲宽度的计算==

period = 2* width;

frequency=1000000/period;
fy[0]=frequency%1000000/100000;//显示十万位
fy[1]=frequency%100000/10000;//显示万位
fy[2]=frequency%10000/1000;
//显示千位
fy[3]=frequency%1000/100;
//显示百位
fy[4]=frequency%100/10;
//显示十位
fy[5]=frequency%10;
//显示个位

}
/*******************************************************************
中断处理函数
*******************************************************************/
#pragma vector=TIMERA1_VECTOR //==定时器A中断处理==
__interrupt void timer_a(void)
{
switch(TAIV) //==向量查询==
{ case 2: //==捕获中断==

if(CCTL1&CM0) //==捕获到上升沿==

{

CCTL1=(CCTL1&(~CM0))|CM1; //==更变设置为下降沿触发==

start=TAR; //==记录初始时间==


}



else if (CCTL1&CM1) //==捕获到下降沿==

{

CCTL1=(CCTL1&(~CM1))|CM0; //==更变设置为上升沿触发==

end=TAR; //==用start,end,overflow计算脉冲宽度==



}

break;



default:

break;
}
}

回复

使用道具 举报

千问 | 2011-8-6 19:02:49 | 显示全部楼层
可以把系统时钟配置成8M 不用分频然后用外部中断进行频率测量我试过 可以测到200+kHZ...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行