怎样用外部中断触发ADC?

2019-03-24 13:19发布

怎样用外部中断触发ADC?有做过的么?求指教!谢谢

[ 本帖最后由 popofxk 于 2012-10-24 10:13 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
popofxk
2019-03-24 22:33
你好 版主大人,我用的是F149
#include  <msp430x14x.h>
#include  "Uart.h"
//typedef unsigned char uchar;
//typedef unsigned int  uint;

uint sum;
void Trans_val(uint Hex_Val);

/************************主函数****************************/
void main(void)
{
  WDTCTL = WDTPW+WDTHOLD;                   //关闭看门狗
  P6DIR |= BIT2;P6OUT |= BIT2;              //关闭电平转换
  P4DIR |= 0x01;
  P6SEL |= BIT0;                           // 将P6_0,p6_1作为外围功能使用,使能ADC通道
  P3SEL |= 0xC0;                            // P3_4,5,p3_5选择为UART收发端口
  P1IE |= BIT5;                             //端口P1.5中断
  P1SEL |= BIT5;                            //设置P1.5为外围功能模块
  
  ADC12CTL0 = ADC12ON+SHT0_8+MSC;           // 打开ADC,设置采样时间,参考电压为默认值VCC
  ADC12CTL1 = SHP;                 // 使用采样定时器
   ADC12CTL0 |= ENC;                         // 使能转换
  _EINT();                                  //全局中断
  _BIS_SR(GIE);                             //开总中断
  LPM0;                                     //低功耗模式0,在此模式下,仅仅关闭MCLK主时钟,其他时钟正常
  while(1);
}

/*******************************************
函数名称:Trans_val
功    能:将16进制ADC转换数据变换成三位10进制
          真实的模拟电压数据
参    数:Hex_Val--16进制数据
          n--变换时的分母等于2的n次方      
返回值  :无
********************************************/
void Trans_val(uint Hex_Val)
{   
    unsigned long caltmp;
    uint Curr_Volt;
    uchar n = 5;
    uchar str[5];
    caltmp = Hex_Val;
    Curr_Volt=(caltmp*3300)/4095;      //计算十进制的电压值
    str[0]=Curr_Volt/1000;            
    str[2]=Curr_Volt%1000/100;
    str[3]=Curr_Volt%100/10;
    str[4]=Curr_Volt%10;
    str[1] = 0x2e;                                //对应符号"."
    Uart1_Init();
    Uart1_send(str,n);
    Delays();
}
/*******************************************
函数名称:PORT1_ISR
功    能:检测输入到P1.5口有上升沿时
          启动AD转换     
参    数:     
返回值  :
********************************************/
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR (void)
{
  P1IE &= ~BIT5;
  if((P1IFG&BIT5)==BIT5)
  P4OUT = 0x00;
  ADC12CTL0 |= ADC12SC;                  
  sum = ADC12MEM0;
  Trans_val(sum);
  P1IFG &= ~BIT5;
  P1IE |= BIT5;
}  
  现在的问题是P1.5口没信号时就进中断,而且进去后就跳不出中断,麻烦楼主帮忙~谢谢~~~

[ 本帖最后由 popofxk 于 2012-10-24 16:18 编辑 ]

一周热门 更多>

相关问题

    相关文章