MSP430G2553 测频

hd11192127 2013-03-08 05:58:35
/*#include <msp430G2553.h>
#include "N5110.h"

int ccr1_num[2]={0};
int num=0;
int flag=0;
int ccr1_jian[10]={0};
int sum_flag=0;
int data=0;*/
#include <msp430G2553.h>
#include "N5110.h"


unsigned int str[2]={0}; //记录边沿脉冲来临时的计数值
unsigned int cap[10]={0}; //求出10次检测结果
unsigned int count = 0;
unsigned int temp= 0;
long int Count_sum =0; //十次计数总和以及平均后的结果
unsigned int overflow= 0; //定时器溢出记录
unsigned int m = 0,n =0;
void main()
{
int i=0;
WDTCTL = WDTPW + WDTHOLD;//关闭看门狗0
TACTL|=TASSEL_2+TAIE+MC_2+TACLR;//SMCLK 作为时钟源,开中断,连续计数模式

TACCTL1|=CM_1+SCS+CAP+CCIE+CCIS_0;//上升沿触发,同步捕获,捕获模式,允许中断*/
// TACCTL1 |= CM0 + SCS + CCIS_0 + CAP + CCIE;//上升沿触发,同步模式,使能中断
//TACTL |=TASSEL1 + ID_2 + MC1;//选择4M-SMCLK时钟,4分频
BCSCTL1 &= ~XT2OFF; //打开XT2高频晶体振荡器
do
{
IFG1 &= ~OFIFG; //清除晶振失败标志
for (i = 0xFF; i > 0; i--); //等待8MHz晶体起振
}
while ((IFG1 & OFIFG)); //晶振失效标志仍然存在?
BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK选择高频晶振
N5110_init();
// P2DIR &= ~(BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT7);//捕获通道
// P2SEL |= BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT7;
P1DIR &=~BIT1;
P1SEL |=BIT1;
_EINT();
while(1)
{

// N5110_add_xy(0,1);
// N5110_led_int(data);
}



}
/*#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)//捕获到上升沿,触发中断
{
N5110_add_xy(0,0);
N5110_led_int(22);
// while(1);
ccr1_num[num]=CCR0;
num++;
if(num==2)
{
num=0;
if(ccr1_num[0]<ccr1_num[1])//前一次计数小于后一次计数,未溢出
{
ccr1_jian[flag]=ccr1_num[1]-ccr1_num[0];
}
else // ccr1寄存器溢出
{
ccr1_jian[flag]=(65535-ccr1_num[0])+ccr1_num[1];
}
flag++;
sum_flag+=ccr1_jian[flag];
if(flag==9)
{
flag=0;
data=sum_flag/10;//取十次求平均
}
}

}*/

/*==================================TA的中断服务程序=========================================
函数名称: Timer_AISR
函数功能: 定时器A中断服务子函数,捕获待测信号上升沿
函数参数:
=========================================================================================*/
#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer_A (void)
{
N5110_add_xy(0,0);
N5110_led_int(3);
switch (TAIV) //向量查询
{
case 2: //捕获中断
str[temp]=TACCR1; //记录边沿到来时的定时器计数值
temp++;
if(temp == 2)
{
temp=0;
count =str[1]-str[0]; //计算高电平的宽度
cap[m]=count;
m++;
if(m==10)
{
m=0;
Count_sum=0;
for(n=0;n<10;n++) //利用平均值法减小误差
{

Count_sum += cap[n];

}
Count_sum=Count_sum/10;
Count_sum=(int)(1000000/Count_sum);
N5110_add_xy(0,2);
N5110_led_int(Count_sum);
// Display_freq(Count_sum);

}
}

break;
case 4:
break;
case 10: //定时器溢出中断
overflow++; //溢出次数
break;
default:
break;

}
}

/*#include <msp430G2553.h>
#include "N5110.h"


unsigned int str[2]={0}; //记录边沿脉冲来临时的计数值
unsigned int cap[10]={0}; //求出10次检测结果
unsigned int count = 0;
unsigned int temp= 0;
long int Count_sum =0; //十次计数总和以及平均后的结果
unsigned int overflow= 0; //定时器溢出记录
unsigned int m = 0,n =0;*/

/*==================================TA的初始化设置=========================================
函数名称: void CAP_Init()
函数功能:定时器A捕获设置,用于捕获上升沿
函数参数:
=========================================================================================*/
/*void CAP_Init()
{
TACCTL1 |= CM0 + SCS + CCIS_0 + CAP + CCIE;//上升沿触发,同步模式,使能中断
TACTL |=TASSEL1 + ID_2 + MC1;//选择4M-SMCLK时钟,4分频
}

void main( void )
{
unsigned int i ;
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
BCSCTL1 &= ~XT2OFF; //打开XT2高频晶体振荡器
do
{
IFG1 &= ~OFIFG; //清除晶振失败标志
for (i = 0xFF; i > 0; i--); //等待8MHz晶体起振
}
while ((IFG1 & OFIFG)); //晶振失效标志仍然存在?
BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK选择高频晶振
CAP_Init();
P1DIR &= ~BIT2;
P1SEL |= BIT2;
_EINT();
N5110_init();

while (1)
{
}
// return 0;
}*/

/*==================================TA的中断服务程序=========================================
函数名称: Timer_AISR
函数功能: 定时器A中断服务子函数,捕获待测信号上升沿
函数参数:
=========================================================================================*/
/*#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer_A (void)
{
N5110_add_xy(0,0);
N5110_led_int(3);
switch (TAIV) //向量查询
{
case 2: //捕获中断
str[temp]=TACCR1; //记录边沿到来时的定时器计数值
temp++;
if(temp == 2)
{
temp=0;
count =str[1]-str[0]; //计算高电平的宽度
cap[m]=count;
m++;
if(m==10)
{
m=0;
Count_sum=0;
for(n=0;n<10;n++) //利用平均值法减小误差
{

Count_sum += cap[n];

}
Count_sum=Count_sum/10;
Count_sum=(int)(1000000/Count_sum);
N5110_add_xy(0,2);
N5110_led_int(Count_sum);
// Display_freq(Count_sum);

}
}

break;
case 4:
break;
case 10: //定时器溢出中断
overflow++; //溢出次数
break;
default:
break;

}
}*/
...全文
433 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_18502733 2014-07-27
  • 打赏
  • 举报
回复
430g2553有没有高频晶体振荡吗
介子納须弥 2014-07-17
  • 打赏
  • 举报
回复
求N5110.H头文件
介子納须弥 2014-07-17
  • 打赏
  • 举报
回复
那个头文件呢
shen_wei 2013-09-26
  • 打赏
  • 举报
回复
频率测试到了没有??同样的问题。。。
AnYidan 2013-03-08
  • 打赏
  • 举报
回复
有一个板块叫 “单片机/工控” 看 manual 或去 TI 的网站
whizer 2013-03-08
  • 打赏
  • 举报
回复
什么问题?

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧