5697|1

3

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

MSP430F149中ADC模块两通道电压采集的问题 [复制链接]

根据示例程序修改的 ADC模块两通道电压采集的程序
现在的情况是两路结果均为0.00 读数也不跳动,
请大神指导。。。。。

//********************************************************************/

#include
#include "Config.h"                     //开发板配置头文件,主要配置IO端口信息
#include "Ascii_8x16.h"                 //8x16大小字符
#include "GB2424.h"                     //24x24像素大小的汉字
#include "Chinese.h"                    //16x16像素大小的汉字
#include "TFT28.h"                      //TFT头文件
#include "TFT28.c"                      //TFT操作初始化及函数

//**************声明外部函数和变量********************
unsigned int Device_code;               //TFT控制IC型号,2.8寸为ILI9320
extern void delayms(unsigned int count);

static uchar Flag=0;                    //标志变量
uint TEMP=0;                            //ADC值暂存变量
uint TRY=0;  
uchar    temp,B5,B6,B7,A5,A6,A7;      //定义的变量,显示数据处理
/********************************************************************
        初始化IO口子程序,设置TFT数据口和控制口属性
********************************************************************/
void Port_Init()
{
  P4SEL = 0x00;
  P4DIR = 0xFF;
  P5SEL = 0x00;
  P5DIR|= BIT0 + BIT1 + BIT3 + BIT5 + BIT6 + BIT7;
}

/********************************************************************
        LED闪烁一次,可在需要查看程序执行位置时灵活设置,类似断点
********************************************************************/
void LED_Light()
{
    LED8=0x00;                    //点亮LED
    delay_ms(500);
    LED8=0xff;                    //熄灭LED
    delay_ms(500);
}


//*************************************************************************
//                电压数据显示处理函数
//*************************************************************************
void xian_shi(void)
{
    int i,j;
    uint temp_1,temp_2;
    ulong temp_3,temp_d;

  temp_3=(ulong)(TEMP)*250;            //转换公式,ADC数字量转换为电压大小,注意数据类型
  temp_d=temp_3/4095;                    //12位精度,除以4095

  A5=temp_d/100;                        //分出百,十,和个位
  temp_1=temp_d%100;
  A6=temp_1/10;
  temp_2=temp_1%10;
  A7=temp_2;
  LCD_PutString(0,0,"The ADC0 Voltage is : ",White,Black);
    for(i=0;i<10;i++)
    {
      delay_ms(10);
      LCD_PutChar(169,0,A5+0x30,White,Black);
  LCD_PutChar(177,0,'.',White,Black);
  LCD_PutChar(185,0,A6+0x30,White,Black);
  LCD_PutChar(193,0,A7+0x30,White,Black);
  LCD_PutChar(201,0,'V',White,Black); }
  temp_3=(ulong)(TRY)*250;            //转换公式,ADC数字量转换为电压大小,注意数据类型
  temp_d=temp_3/4095;                    //12位精度,除以4095

  B5=temp_d/100;                        //分出百,十,和个位
  temp_1=temp_d%100;
  B6=temp_1/10;
  temp_2=temp_1%10;
  B7=temp_2;
  LCD_PutString(0,50,"The ADC1 Voltage is : ",White,Black);
    for(j=0;j<10;j++)
    {
      delay_ms(10);
      LCD_PutChar(169,50,B5+0x30,White,Black);
  LCD_PutChar(177,50,'.',White,Black);
  LCD_PutChar(185,50,B6+0x30,White,Black);
  LCD_PutChar(193,50,B7+0x30,White,Black);
  LCD_PutChar(201,50,'V',White,Black); }   
  }
//********************************************************************
//        ADC初始化程序,用于配置ADC相关寄存器
//*************************************************************************
void ADC_Init()
{
  P6SEL|=0x03;                                    //选择ADC通道
  ADC12CTL0|= ADC12ON + SHT0_15 + REF2_5V + REFON+MSC; //ADC电源控制开,16个CLK,内部基准2.5V
  ADC12CTL1|= SHP+CONSEQ_3;            //SMCLK做时钟源
  ADC12MCTL0= SREF0+INCH_0;                     //参考控制位及通道选择,这里选择通道0
  ADC12MCTL1 = INCH_1+EOS;;
  ADC12IE|= 0x03;                                 //中断允许
  ADC12CTL0|= ENC+ADC12SC;                                //使能转换器
}
//*************************************************************************
//        ADC中断服务程序
//*************************************************************************
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void)
{
  while((ADC12CTL1&0x01)==1);           //如果ADC忙,则等待,否则读取ADC转换数值
  Flag = 1 ;
  TEMP = ADC12MEM0;                     //读取ADC转换值
  TRY = ADC12MEM1;  
}

//***********************************************************************
//            主程序
//***********************************************************************
void main(void)
{
  WDT_Init();                        //看门狗设置
  Clock_Init();                      //系统时钟设置
  ADC_Init();                         //初始化ADC配置
  delay_ms(100);                      //延时100ms
  Port_Init();                       //系统初始化,设置IO口属性
  LED_Light();                       //LED点亮一次,如有现象,说明单片机初始化成功   
  Device_code=0x9320;                //TFT控制IC型号
  TFT_Initial();                     //初始化LCD         

  CLR_Screen(Black);               //用背景色清屏
  LCD_PutString24(35,140,"Applied Electromagnetic",Yellow,Black); //欢迎界面,24x24大小汉字,字模软件隶书小二号
  delay_ms(500);   
  LCD_PutString24(83,170,"欢",Yellow,Black);
  delay_ms(300);
  LCD_PutString24(107,170,"迎",Yellow,Black);
  delay_ms(300);
  LCD_PutString24(131,170,"您",Yellow,Black);
  delay_ms(300);
  LCD_PutString(69,300,"www.nuist.com",White,Black);  //字符显示官方网站
  delay_ms(300);

  CLR_Screen(Black);                                     //用背景色清屏
  xian_shi();
  _EINT();                            //使能中断
  Flag=1;                             //标志位先置1

  while(1)
  {   

    while(Flag==1)
    {
      ADC12CTL0 |= ADC12SC;           //开启转换
      ADC12CTL0 &= ~ADC12SC;          //清零
      Flag=0;                         //清零标志位
    }
  }
}

最新回复

估计是串口位置没有选对  详情 回复 发表于 2015-11-25 20:44
 
点赞 关注

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
估计是串口位置没有选对
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

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