3091|1

35

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

捕获比较 测量频率 信号周期 [复制链接]

/*****************对应被捕获信号频率有限制**************************/
#include
#include"5110.h"
#define uchar unsigned char
#define uint  unsigned int
unsigned int i,lastCCR0,lastCCR1;
unsigned long j,k;
unsigned int n;
char a[7]={0};
char a1[7]={0};
void Transfer(unsigned long x);
void Transfer1(unsigned long  Y);
void main(void)
{
  WDTCTL=WDTPW+WDTHOLD;
  LCD_init();
  j=0;
  k=0;
  lastCCR0=0;
  lastCCR1=0;
  CCTL2=CCIE;
  CCR2=33340;
  P3DIR|=BIT5;
  P3OUT&=~BIT5;
  P1DIR=0X00;
  P1SEL=0X06;
  P2DIR=0X01;     //P2.0口接入一信号
  P2OUT|=0x00;
  TACTL=TASSEL_2+ID_3+MC_2+TACLR;     //连续计数
  CCTL0=CM_3+CCIS_0+SCS+CAP+CCIE;     //CCI0A,上升下降都捕获P1.1
  CCTL1=CM_1+CCIS_0+SCS+CAP+CCIE;     //CCI1A,上升沿捕获,同步捕获,捕获模式,中断允许P1.2
  _EINT();                            //开启中断允许位
  LCD_write_english_string(0,0,"T:");
  LCD_write_english_string(0,2,"N:");
// LCD_write_english_string(0,4,"N/T:");

  for(;;)
  {
   Transfer(j);
   Transfer1(k);
  }
}
void Transfer(unsigned long x)
{
    a[0]=(long )x/100000+'0';
    a[1]=(long)(x%100000)/10000+'0';
    a[2]=( long )(x%100000)%10000/1000+'0';
    a[3]=(long )(x%100000)%10000%1000/100+'0';
    a[4]=(long )(x%100000)%10000%1000%100/10+'0';
    a[5]=(long )(x%100000)%10000%1000%100%10+'0';
    a[6]='\0';
    LCD_write_english_string(18,0,a);
}
void Transfer1(unsigned long  y)
{
    a1[0]=(long )y/100000+'0';
    a1[1]=(long )(y%100000)/10000+'0';
    a1[2]=(long )(y%100000)%10000/1000+'0';
    a1[3]=(long )(y%100000)%10000%1000/100+'0';
    a1[4]=(long )(y%100000)%10000%1000%100/10+'0';
    a1[5]=(long )(y%100000)%10000%1000%100%10+'0';
    a1[6]='\0';
    LCD_write_english_string(18,2,a1);
}
#pragma vector =TIMERA1_VECTOR                                  //周期,上升沿
__interrupt void TIMER_A(void)         
{
  switch(TAIV)
  {
    case 2:                        //CCR1捕获中断
      j=65536*n+CCR1-lastCCR1;
      lastCCR1=CCR1;
      n=0;
      break;
  case 4:
      P2OUT^=0x01;        //P2.0
      CCR2+=33340;
      break;
  case 10:        //溢出中断
      n++;
      break;
  }
}

#pragma vector=TIMERA0_VECTOR                                        //CCR0捕获中断,高电平时间
__interrupt void TIMER_cc(void)
{

  if(SCCI==0)//程序在这里进不去。。。。
  {
    k=65536*n+CCR0-lastCCR0;
    lastCCR0=CCR0;
    P3OUT^=BIT5;
}
}

这个程序是利用timerA的捕获与比较模块,测量信号的频率,并在5110上显示出来。这个程序里外部信号是由timerA的CCR2的比较在P2.0引脚上产生的方波,便于程序的测量及检验。

希望大虾多多指教!

[ 本帖最后由 麻滴滴 于 2012-7-24 22:10 编辑 ]

最新回复

标记  详情 回复 发表于 2012-8-7 11:13
 
点赞 关注

回复
举报

14

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
标记
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表