2521|3

4

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

430g2553测频率和幅度 [复制链接]

运用了定时器中断测一方波频率,ad10中断测一直流信号的幅度,并在12864上显示
可以得到较准的结果,但是频率/幅度改变时在12864上不能实时改变显示,必须reset之后才能
频率和幅度分别一个程序时都能做到实时改变
觉得是中断的问题,但不知道···430的中断呀,理解无能
主程序如下:
void main()
{
WDTCTL = WDTPW + WDTHOLD;
   P1DIR |= BIT7;                            // P1.0 output
   P1DIR |= BIT0;
  if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
   {
     while(1);                               // If calibration constants erased
                                             // do not load, trap CPU!!
   }
  //1Mhz
   BCSCTL1 = CALBC1_1MHZ;                    // Set range
   DCOCTL = CALDCO_1MHZ;                     // Set DCO step + modulation */

LCD_Init();
Init_In();
Init_Timer();
ShowInit();
ADC10CTL0 =SREF_1+ ADC10SHT_2 + ADC10ON + REFON + REF2_5V + ADC10IE; // ADC10ON, interrupt enabled
  ADC10CTL1 = INCH_2;                       // input A1
  ADC10AE0 |= 0x04;                         // PA.1 ADC option select
  P1DIR |= 0x04;
  while(1)
  {


     ShowF();
     ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
         __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit
         vol=(ADC10MEM*2.5)/1023;
         vol=vol*10;
         int temp=(int)vol;
         c=temp/10;
         b=temp%10;
         Write_Pos(2,4);
         Write_Data(tab[c]);
         Write_Data('.');
         Write_Data(tab);
     _EINT();
}
}
#pragma vector=PORT1_VECTOR
__interrupt void port_1()
{
if(P1IFG & BIT1)
{
  port_i++;
  if(port_i>=100)
  {
   P1OUT ^= BIT6;
   port_i = 0;
   F =(unsigned long int)((1000000*100.0)/((TA_overflow*65536)+TAR));
   TA_overflow = 0;
   TACTL |= TACLR;
  }
  P1IFG &= ~BIT1;
}
_EINT();
}
#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer_A1()
{
switch(TA0IV)
{
  case 2:break;
  case 4:break;
  case 10:TA_overflow++;break;
}
}
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
  //__bic_SR_register_on_exit(CPUOFF);        // Clear CPUOFF bit from 0(SR)
  _EINT();
}

求帮助!!!!!!!!!!1谢谢!!!!!!!!!

最新回复

是不是没有实时刷新12864?  详情 回复 发表于 2013-8-29 10:53
 
点赞 关注

回复
举报

52

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
是不是没有实时刷新12864?

点评

应该不是12864的问题,单独测频率或幅度用12864显示是可以实时显示的~~  详情 回复 发表于 2013-8-29 16:09
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发Li-ion 的帖子

应该不是12864的问题,单独测频率或幅度用12864显示是可以实时显示的~~
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

4
 
发现只要把原来的程序中
while(1)中的
   __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit
去掉就行,其余都不用改,那些中断中的啥_EINT();都可以去掉

不太清楚原因,求帮忙解释

附注:单独测电压时AD中断还有while(1)中的程序都是那样的,但可以实时显示
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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