MSP430F149定时数据采集程序

发布者:pengbinyyy最新更新时间:2016-08-19 来源: eefocus关键字:MSP430F149  定时数据  采集程序 手机看文章 扫描二维码
随时随地手机看文章
#include

#define RS_H        P5OUT |=BIT3         //Data Register is selected
#define RS_L        P5OUT &=~BIT3        //Instruction Register is selected
#define READ        P5OUT |= BIT2        //读LCD
#define WRITE       P5OUT &= ~BIT2       //写LCD
#define EN_H        P5OUT |= BIT1        //Enable  Read/Write Operation 
#define EN_L        P5OUT &=~BIT1        //Disable Read/Write Operation

unsigned char a[]="AD&DA change!"; 
int AD_result;
void Init_CLK(void);   //时钟初始化函数
void Init_ADC(void);   //AD转换函数
void Init_TimerA(void); 
void DATransfer(unsigned DA_data);//DA转换子函数
void Init_Port()
{
    P3SEL=0x00;    //LCD所需端口设置
    P3DIR=0xFF;
    P3OUT&=~BIT5;   //74HC245的DIR为低电平,输入方向由B端到A端
  
    P5SEL=0x00;     //P5输出
    P5DIR=0xFF;
    P5OUT=0x00;
  
    P4SEL=0x00;     //P4输出
    P4DIR=0xFF;
    P4OUT=0x00;
    
    P6SEL=0xF0;     //P6.4-p6.5作为AD输入通道,P6.0-P6.3作为一般的IO口
    P6DIR=0xFF;     
    P6OUT=0x00;
}

void Delay(unsigned int i)  //延时子程序
{                
  while(i--);               //延时时间为i*5+6个时钟周期
}

void Write_Command(unsigned char command )        
{
  P4OUT=command;
  RS_L;   //选择程序寄存器
  WRITE;  //允许写操作
  EN_H;   //液晶使能
  Delay(50);//延时
  EN_L;   //液晶读写操作禁止
  Delay(50);


void Write_Data(unsigned char data )         
{  
  P4OUT=data;
  RS_H;   //选择数据寄存器
  WRITE;  //允许写操作
  EN_H;   //液晶使能
  Delay(50); //延时
  EN_L ;  //液晶读写操作禁止
  Delay(50);
}

void Clear_Second_Line()    //用于删除2*16字符液的晶第二行的函数
{
  int i=16;
  Write_Command(0xC0);    //设置DDRAM的初始地址
  while(i--)
  {
  P4OUT=0x20;
  RS_H;   //选择数据寄存器
  WRITE;  //允许写操作
  EN_H;   //液晶使能
  Delay(50); //延时
  EN_L ;  //液晶读写操作禁止
  Delay(50);
  }
}

void Init_LCD(void)
{
  
  Write_Command( 0x38  );//8位总线接口,双行显示,5*7点阵型
  Delay(100);
  Write_Command(0x0F);//开显示,开光标,光标闪烁
  Delay(100);
  Write_Command(0x01);//清屏,将空格字符ASCII码20H写入到所有的DDRAM单元
  Delay(2500);
  Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
  Delay(100);
  Write_Command(0x80);//设置DDRAM的初始地址
  
}

void Init_ADC(void)
{
    //P6SEL = BIT7;               //设置P6.7为模拟输入A7                 
    ADC12CTL0 &= ~(ENC);        //设置ENC为0,从而可以修改ADC12寄存器的值        
    ADC12CTL0 += ADC12ON+MSH;   //开A/D转换,允许多次采样
    ADC12MCTL7 = EOS+INCH_7;//ADC12MCTL7的输入通道为A7,参考电压分别为AVSS和AVCC         
    ADC12CTL1 = 0X00;           //转换的起始地址为:ADCMEM7
    ADC12CTL1 = CSTARTADD0+CSTARTADD1+CSTARTADD2;
    ADC12CTL1 += SHP;              //采样脉冲来自采样定时器
    ADC12CTL1 += CONSEQ_2;      //单通道多次转换
    ADC12CTL1 += ADC12SSEL0;    //ADC12内核时钟源为ACLK

    ADC12IE = 0x00;             //关闭各个通道的转换中断                   
    
    ADC12CTL0 |= ENC;              //使能ADC转换            
    return;
}

void Init_TimerA(void)
{
     
    TACTL = TASSEL0 + TACLR;    // 选择ACLK:32K,清除TAR
     
    TACTL +=ID1;                // 1/8 SMCLK                  
    TACTL +=ID0;      
    CCTL0 = CCIE;               // CCR0 中断允许
     
    CCR0 = 2000;                // 时间间隔为 0.5S
     
    TACTL |= MC0;              // 增记数模式            
    return;
}
void Init_CLK(void)
{
    unsigned int i;
    BCSCTL1 = 0X00;             //将寄存器的内容清零
                        //XT2震荡器开启
                        //LFTX1工作在低频模式
                        //ACLK的分频因子为1
                             
    do 
    {
     IFG1 &= ~OFIFG;                       // 清除OSCFault标志
     for (i = 0x20; i > 0; i--);                
    }
    while ((IFG1 & OFIFG) == OFIFG);          // 如果OSCFault =1   
                             
     BCSCTL2 = 0X00;            //将寄存器的内容清零
     BCSCTL2 += SELM1;            //MCLK的时钟源为TX2CLK,分频因子为1
     BCSCTL2 += SELS;            //SMCLK的时钟源为TX2CLK,分频因子为1
}

#pragma vector=TIMERA0_VECTOR    //定时器A0的中断函数
__interrupt  void TimerA_ISR(void)
{                  
    float AD_data;
    char a;
    char b;
    int m;
    int n;
    // 读出转换结果
    P5OUT^=BIT6;
    while((ADC12IFG & BIT7)==0)  ; //判断有没有转换结束
    _NOP();
    ADC12CTL0 &= ~ENC;            // 关闭转换
    P5OUT^=BIT5;    
    AD_result = ADC12MEM7;        //读到AD转换的12位二进制数
    DATransfer(AD_result);
    if((ADC12IFG & BIT7)==0)      
    {P5OUT^=BIT4;}
    AD_data=AD_result*3.3/4095;   //将读到的12位二进制数转化为对应的电压
    m=(int)AD_data;
    n=(int)(AD_data*10-m*10);
    a=48+m;                       //将符点型的电压值转化为字符数,便于液晶显示 
    b=48+n;
    Clear_Second_Line();          //删除16*2字符液晶的第二行数据
    Write_Command(0x06); // 设置液晶进入方式,DDRAM自增,整个显示右移
    Delay(100);          
    Write_Command(0xC0); //设置液晶DDRAM的初始地址  
    Write_Data(a); 
    Delay(100);
    Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
    Write_Data('.');   
    Delay(100);
    Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
    Delay(100);
    Write_Data(b);    
    ADC12CTL0 |= ENC;           // 允许AD转换
    ADC12CTL0|=ADC12SC;         //开始新的转换            
}

void DATransfer(unsigned DA_data)    //DAC转换子程序
{
  int i;
  unsigned int da_data;
  P6OUT&=~BIT0;                 //CS为低电平
  for(i=0;i<16;i++)
  {
    P6OUT&=~BIT2;              //SCLK为低电平
    P6OUT&=~BIT1;
    da_data=0x3000+(DA_data&0x0fff);  //送入待转换的数字量,并选中A通道输出
    da_data=((da_data>>(15-i))&0x0001)<<1;
    P6OUT|=da_data ;           //输出一位二进制数    
    Delay(10);
    P6OUT|=BIT2;                //SCLK为高电平
    Delay(10);      
  }
   P6OUT&=~BIT2;                //SCLK为低电平                               
   P6OUT|=BIT0;                 //CS为高电平,开始转换数据
   Delay(10);
}


void main(void)

  WDTCTL = WDTPW + WDTHOLD;    // 关闭看门狗
  _DINT();                     // 关闭中断      
  Delay(50000);
  Init_Port();
  Init_LCD();
  Init_CLK();                 // 初始化
  Init_ADC();
  Init_TimerA();
  _EINT();                    // 打开中断
 
  for(unsigned int i=0;a!='\0';i++)
    {
        Write_Data(a);     
    }
  P5OUT|=BIT7;
  ADC12CTL0 |=ADC12SC; 
  
  while(1)
    {   }
}
关键字:MSP430F149  定时数据  采集程序 引用地址:MSP430F149定时数据采集程序

上一篇:关于中断时的堆栈溢出
下一篇:MSP430F149与1602LCD模块程序

推荐阅读最新更新时间:2024-03-16 15:06

MSP430F149单片机在目标指示器设计中的应用
针对目前我军侦察分队和射击指挥分队野外训练时,各种目标设置、显示费时费力、安全隐患大等诸多问题,本文提出基于MSP430F149单片机设计目标指示器,以满足部队野外训练时快速设置目标,并能根据不同的战术需要灵活显示目标和根据不同的射击法则显示炸点等,较好地解决部队野外训练的急需。 目标指示器的功能 根据需要,目标指示器以灯光、烟火等方式显示目标或炸点。每个指示器可以模拟显示如机枪火力点、坦克火力点、炮阵地等n类性质的目标,同时带有m个炸点显示器。目标指示器主要完成GPS模块的数据采集、执行灯光显示和烟火显示等任务。 目标指示器硬件设计 硬件设计方案 目标指示器的设计是以单片机为核心的,集灯光显示、烟火显示、目标位置显示等
[单片机]
<font color='red'>MSP430F149</font>单片机在目标指示器设计中的应用
MSP430F149;一、TIMEA
定时器A的逻辑图 由下图可以知道定时器有大致两部分: 时钟模块: 捕获比较 定时器模式说明 00:计数器停止 01:计数器从0到taccr0;taccro是手动设定的值 10:计数器从0到0xFFFF(2^16=65536)然后到0再从0到65535,一直循环; 11:计数器从0到taccr0再到0;然后,从0到taccr0再到0;循环0到taccr0再到0;(taccro是手动设定的值) 用到的寄存器介绍 用到的寄存器说明 主要是:时钟源选择;输入时钟分频(比如之前时钟源分频得到的时钟信号,在这里可以再分频,得到需要的震荡频率);时钟模式控制,上面说过的;中断使能和中断标志; 这个就是用来计数的,一个
[单片机]
<font color='red'>MSP430F149</font>;一、TIMEA
基于MSP430F149的无线环境监测传感器系统设计
引言   传感器技术与通信技术、计算机技术相结合构成的智能传感器以其较高的精度、良好的可靠性、功能的多样性等特点在过程控制以及信号监测中得到人们的关注, 已成为当今国内外研究的一大热点。本文设计了一种用于对环境信息进行实时监测的无线传感器系统, 在实际应用中能够对环境参数进行准确的测量并可靠传输, 体现了传感器系统数字化、智能化、无线化的优点。   该系统以MSP430F149 超低功耗微控制器为核心, 配置新式的微型低功耗传感器, 可实时地对所测环境的温度、湿度、光照强度、有害气体浓度等参数进行测量处理。采用电池供电,无线传输, 避免了布线的烦琐, 而且具有良好的便携性。 系统硬件设计   整个传感器系统包括微处理器模块
[单片机]
基于<font color='red'>MSP430F149</font>的无线环境监测传感器系统设计
基于MSP430F149单片机的实时多任务操作系统
1 RTOS的基本概念 实时多任务操作系统(RTOS-Real Time Operating System)是根据操作系统的工作特性而言的。实时是指物理进程的真实时间。实时操作系统是指具有实时性,能支持实时控制系 统工作的操作系统。首要任务是调度一切可利用的资源完成实时控制任务,重要特点是要满足对时间的限制和要求。 实时操作系统中的任务(Task)有四种状态:运行(Executing),就绪(Ready),挂起(Suspended),休眠(Dormant)。 运行:获得CPU控制权。 就绪:进入任务等待队列。通过调度转为运行状态。 挂起:任务发生阻塞,移出任务等待队列,等待系统实时事件的发生而唤醒。从而转为就
[单片机]
MSP430F149 TIMER_A(二)——比较模式
MSP430F149的TIMER_A的比较模式主要用来做PWM发生器,可产生两路独立的PWM波形(TA1,TA2)。只要管脚第二功能为TA1或TA2都可配置成输出。我看了下datasheet,用增计数配合PWM方式6(即toggle/set)比较简单和灵活,可以做到周期和占空比可变,能满足日常应用。在这种配置下,PWM周期即CCR0,占空比(用时间表示)即CCR1或CCR2的值。 由上图可知,在模式6中,当TAR中的值等于TACCR1中的值时,输出管脚会变为低电平,当TAR的值记到TACCR0时,输出管脚又变为高电平,而中断只在记数到CCR0时发生,且中断标志为TAIFG。注意改变占空比的间隔最好稍微长点,波形比
[单片机]
MSP430F149单片机的光电编码器位置检测方案
简介:本文介绍的方案简化了外围模块的设计,大大提升了系统的可靠性和稳定性。系统工作稳定,收到了良好的效果,具有很好的实用价值。 1、光电编码器原理 光电编码器是集光、机、电技术于一体的数字化传感器,其基本原理就是在特制的码盘上按一定规律编排光栅图案,将这些图案用光电头读取,转变为高低有序排列的电平信号。光电编码器输出信号为A , B , Z 3 个信号,其中A , B 为相位差90°的方波信号, Z 为过零脉冲信号。如图1所示,光电编码器每旋转一周,A、B 相输出同样数量的脉冲, Z相输出一个脉冲,脉冲的个数和电机旋转角度,电机的运行距离成正比关系。 A相、B相都是光电编码器产生的,这两个信号的前沿和后沿都对应着光电
[单片机]
<font color='red'>MSP430F149</font>单片机的光电编码器位置检测方案
基于MSP430F149的无线遥控教鞭设计方案
  传统教学中, 教师以黑板和粉笔为最主要的教学用具, 这种教学手段单一, 课堂效率低, 不能激起学生学习的兴趣。多媒体辅助教学模式的兴起, 弥补了传统教学的不足, 在实际操作中教师在进行多媒体演示时, 要不时地进行鼠标操作, 使之不得不中断与学生的互动。无线遥控教鞭是一个很好的解决方案。   1 系统框架   整个系统由发射电路、接收电路和计算机软件三部分组成。发射部分, 即手持教鞭部分, 以日本NEC 的uPD6121G 为控制核心。首先, 当按下按键后, 扫描键盘得到遥控码, 不同的键值对应不同的编码信息, 此键值信息代表着向计算机中演示的软件PowerPoint 发送的控制命令, 然后将此编码信息经调制后由红外发光管向
[单片机]
基于<font color='red'>MSP430F149</font>的无线遥控教鞭设计方案
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved