2453|0

35

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

430的捕获模式 [复制链接]

小弟想用430的捕获模式采集ICL7135的电压值,程序如下,但是结果一直不对,请教大侠给点儿指导
//AD采样
void AD7135(unsigned char n)
{       
        Choose_0_sin();
        delay(50000);delay(50000);delay(50000);delay(50000);
        //开关变换等待转换信号稳定,大约25ms昨右。
        //如果换成100nF的电容这个延时可以小一些
        UpFlag = 0;
        DownFlag = 0;
        OverFlow = 0;
        while((UpFlag == 1)||(DownFlag == 1));//等待产生捕获完成
        width = end-start-10001+65535*OverFlow;
        if(n)
        {               
                          a = width;
                          if(~POL)//极性
                        a = -a;
                       
        }
        else
        {
                        c = width;
                          if(~POL)
                        c = -c;
        }

        Choose_90_sin();
        delay(50000);delay(50000);delay(50000);delay(50000);
        UpFlag = 0;
        DownFlag = 0;
        OverFlow = 0;
        while((UpFlag == 1)||(DownFlag == 1));
        width = end-start-10001+65535*OverFlow;
        if(n)
        {
                        b= width;
                          if(~POL)
                        b = -b;
        }
        else
        {
                        d= width;
                          if(~POL)
                        d = -d;
        }
}

#pragma vector=TIMERA1_VECTOR //==定时器A中断处理==
__interrupt void timer_a(void)
{
switch(TAIV) //==向量查询==
  { case 2: //==捕获中断==
       if(CCTL1&CM0) //==捕获到上升沿==
         {
           CCTL1=(CCTL1&(~CM0))|CM1; //==更变设置为下降沿触发==
           start=TAR; //==记录初始时间==
                        UpFlag = 1;           
         }

       else if (CCTL1&CM1) //==捕获到下降沿==
        {
           CCTL1=(CCTL1&(~CM1))|CM0; //==更变设置为上升沿触发==
                   if(1 == UpFlag)
                   {
           end=TAR; //==用start,end,overflow计算脉冲宽度==  
                   DownFlag = 1;
                   }
        }
       break;
  case 0x0a:if(1 == UpFlag)OverFlow++;
    default:
       break;
  }
}

void init_timerA()//用捕获功能,捕获AD7135的busy线
{
    TACTL = TASSEL_2+TACLR+TAIE+MC1+ID_2;
    P1DIR&=~BIT2;
    P1SEL = BIT2; //设置P1.2端口为功能模块使用,即:做捕获源
    CCTL1 = CM_1+SCS+CAP+CCIE; //输入上升沿捕获,CCI0A为捕获信号源   
}

void init_timerB()
{
        TBCCTL0 = CCIE;                           // CCR0 interrupt enabled
        TBCCR0 = 5;
        TBCTL = TBSSEL_2 + MC_2;                  // SMCLK, contmode
                //为连续模式,并且使能中断  
}
 
点赞 关注

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表