5734|3

4

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

怎样用外部中断触发ADC? [复制链接]

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

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

最新回复

版主,您好,能通过短消息给您提问吗?  详情 回复 发表于 2012-10-24 14:33
 
点赞 关注

回复
举报

1万

帖子

139

TA的资源

版主

沙发
 
先看看器件手册,看你用的型号是否带有硬件支持,没有的话,自己在外中断程序中启动ADC就是了,几条语句而已。

点评

你好 版主大人,我用的是F149 #include #include \"Uart.h\" //typedef unsigned char uchar; //typedef unsigned int uint; uint sum; void Trans_val(uint Hex_Val); /************************主  详情 回复 发表于 2012-10-24 14:55
版主,您好,能通过短消息给您提问吗?  详情 回复 发表于 2012-10-24 14:33
 
 

回复

248

帖子

0

TA的资源

纯净的硅(初级)

板凳
 

回复 沙发 chunyang 的帖子

版主,您好,能通过短消息给您提问吗?
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

4
 

回复 沙发 chunyang 的帖子

你好 版主大人,我用的是F149
#include  
#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 编辑 ]
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

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