我要检测占空比为百分数之五十方波频率,子主系统时钟均是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;
}
}
|