1 MSP430之八路ADC单次采集的程序-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MSP430之八路ADC单次采集的程序

算法&编程学院 来源:网络整理 作者:工程师3 2018-04-22 12:45 次阅读

本程序采用的是八路ADC单次采集的模式,根据配置,在单次的模式下转换完成后ADC12SC会自动复位,因此需要在循环中进行ADC12CTL0 |= ADC12SC;操作,而如果配置成连续采集的模式,只需要在程序开始将ADC12SC置位一次就可以,但是就需要注意当进入中断后如果不手动禁止中断会一直停留在循环中,因此在采集到需要的数据后需要将ADC关闭或者中断使能禁止才能重新回到主函数,这一点需要注意。

八路单次采集的程序如下:

[cpp] view plain copy/***************************************

八路AD多路单次采集基亚5110液晶显示

采集模式:多路单次

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

#include 《msp430x14x.h》

#include “LCD5110.h”

#define uint unsigned int

#define uchar unsigned char

unsigned char ad0[]=“1:0.0V”;

unsigned char ad1[]=“2:0.0V”;

unsigned char ad2[]=“3:0.0V”;

unsigned char ad3[]=“4:0.0V”;

unsigned char ad4[]=“5:0.0V”;

unsigned char ad5[]=“6:0.0V”;

unsigned char ad6[]=“7:0.0V”;

unsigned char ad7[]=“8:0.0V”;

uchar flag=1;

uint temp0,temp1,temp2,temp3,temp4,temp5,temp6,temp7;

void Init_Clk()

{

uchar i;

BCSCTL1&=~XT2OFF; //打开XT振荡器

do

{

IFG1 &= ~OFIFG; //清除振荡错误标志

for(i = 0; i 《 100; i++)

_NOP(); //延时等待

}

while ((IFG1 & OFIFG) != 0); //如果标志为1继续循环等待

IFG1&=~OFIFG;

BCSCTL2|=SELM1+SELS;//MCLK 8M and SMCLK 1M

}

void Init_ADC()

{

P6SEL|=0XFF; //信号采集端口选择第二功能

ADC12CTL0 = ADC12ON+SHT0_8+MSC; // 打开ADC+设置采样时间

ADC12CTL1 = SHP+CONSEQ_1; // 使用采样时序电路信号+多路单次模式

//上面的寄存器配置采样保持触发源选择时ADC12SC,采集信号使用采样时序电路产生的信号

// 转换模式为多路单次复转换 上面的设置必须在ENC=0的情况下设置

//设置每个通道的输入端口和参考电压,参考电压默认为AVCC 3.3V

ADC12MCTL0 = INCH_0;

ADC12MCTL1 = INCH_1;

ADC12MCTL2 = INCH_2;

ADC12MCTL3 = INCH_3;

ADC12MCTL4 = INCH_4;

ADC12MCTL5 = INCH_5;

ADC12MCTL6 = INCH_10;

ADC12MCTL7 = INCH_11+EOS; // 最后一个通道

ADC12IE = BIT7; // 最后一个通道转换完成后使能ADC中断

ADC12CTL0 |= ENC; // 使能转换

}

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

函数名称:Trans_val

功 能:将16进制ADC转换数据变换成三位10进制

真实的vwin 电压数据,并在液晶上显示

参 数:Hex_Val--16进制数据

n--变换时的分母等于2的n次方

返回值 :无

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

void Trans_val(uchar ptr[6],uint Hex_Val)

{

unsigned long caltmp;

uint Curr_Volt;

caltmp = Hex_Val;

caltmp = (caltmp 《《 5) + Hex_Val; //caltmp = Hex_Val * 3

Curr_Volt = caltmp 》》 12; //Curr_Volt = caltmp / 2^n

// 参考电压为3.3V,所以计算公式应该为Hex_val*3.3/2^n

// 乘除计算通过移位来进行可以有效的提高程序运行效率

ptr[2] = (Curr_Volt / 10)+0x30; //个位

ptr[4] = (Curr_Volt % 10)+0x30; //小数位

}

void main()

{

Init_Clk();

Init_ADC();

WDTCTL = WDTPW + WDTHOLD;

LCD_init();

LCD_showsh(0, 0, “电压采集:”);

_EINT();//开启全局中断

P5DIR|=BIT5;

P3OUT|=~BIT5;

while (1)

{

ADC12CTL0 |= ADC12SC;

LCD_prints(0,2,ad0);

LCD_prints(8,2,ad1);

LCD_prints(0,3,ad2);

LCD_prints(8,3,ad3);

LCD_prints(0,4,ad4);

LCD_prints(8,4,ad5);

LCD_prints(0,5,ad6);

LCD_prints(8,5,ad7);

}

}

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

函数名称:ADC12ISR

功 能:ADC中断服务函数

参 数:无

返回值 :无

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

#pragma vector=ADC_VECTOR

__interrupt void ADC12ISR (void)

{

temp0 = ADC12MEM0;

Trans_val(ad0,temp0);

temp1 = ADC12MEM1;

Trans_val(ad1,temp1);

temp2 = ADC12MEM2;

Trans_val(ad2,temp2);

temp3 = ADC12MEM3;

Trans_val(ad3,temp3);

temp4 = ADC12MEM4;

Trans_val(ad4,temp4);

temp5 = ADC12MEM5;

Trans_val(ad5,temp5);

temp6 = ADC12MEM6;

Trans_val(ad6,temp6);

temp7 = ADC12MEM7;

Trans_val(ad7,temp7);

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • msp430
    +关注

    关注

    180

    文章

    2403

    浏览量

    229298
  • adc
    adc
    +关注

    关注

    98

    文章

    6495

    浏览量

    544447
收藏 人收藏

    评论

    相关推荐

    AMC1311是真差分输出,还是伪差分输出?可否直接给MSP430ADC采集

    AMC1311是真差分输出,还是伪差分输出?可否直接给MSP430ADC采集?还是必须要转化为端信号提供MSP430
    发表于 08-15 06:40

    MSP430趣谈】系列教程汇总贴

    MSP430第四讲之中断【MSP430趣谈】MSP430第五讲库函数【MSP430趣谈】MSP430
    发表于 02-20 16:48

    ADC0809八路转换

    adc0809怎样进行八路转换,最好有程序,电路图如下
    发表于 04-15 14:22

    sed1335的msp430程序

    sed1335的msp430程序 MSP430子程
    发表于 04-11 09:53 1159次阅读

    msp430的实验程序

    msp430的实验程序代码,共七个基础性的简单实验。
    发表于 04-28 15:35 6次下载

    msp430延时程序设计

    msp430延时程序设计msp430延时程序设计msp430延时程序设计
    发表于 04-29 14:40 0次下载

    msp430内部温度传感器测试程序

    MSP430内部温度传感器测试程序 //MSP430基础实验开发组件 - ADC12内部模块演示程序之内部温度传感器 //时钟设置:
    发表于 06-21 15:39 21次下载

    msp430单片机adc+12864液晶显示菜单程序

    msp430单片机adc+12864液晶显示菜单程序
    发表于 07-20 14:39 11次下载

    MSP430教程14:MSP430单片机ADC12模块

    MSP430教程14:MSP430单片机ADC12模块
    发表于 10-12 09:03 55次下载
    <b class='flag-5'>MSP430</b>教程14:<b class='flag-5'>MSP430</b>单片机<b class='flag-5'>ADC</b>12模块

    基于MSP430功能模块详解系列——ADC12

    基于MSP430功能模块详解系列——ADC12
    发表于 10-12 15:24 4次下载
    基于<b class='flag-5'>MSP430</b>功能模块详解系列<b class='flag-5'>之</b>——<b class='flag-5'>ADC</b>12

    MSP430单片机实践篇MSP430单片机ADC模数转换操作

    MSP430单片机中断编程;ADC(模数转换)的实现;MSP430单片机低功耗控制(休眠)。
    发表于 04-28 10:46 43次下载
    <b class='flag-5'>MSP430</b>单片机实践篇<b class='flag-5'>之</b><b class='flag-5'>MSP430</b>单片机<b class='flag-5'>ADC</b>模数转换操作

    MSP430ADC12模块

    msp430内部含有 ADC12模块,可以完成12位的模数转换,当对精度或其他指标要求不高时,可以选用430单片机内部的 ADC12完成模数转换工作。
    发表于 05-04 09:40 6次下载
    <b class='flag-5'>MSP430</b><b class='flag-5'>之</b><b class='flag-5'>ADC</b>12模块

    MSP430单片机ADC模数转换操作

    学习要点:MSP430单片机中断编程;ADC(模数转换)的实现;MSP430单片机低功耗控制(休眠)。
    发表于 05-08 08:43 45次下载
    <b class='flag-5'>MSP430</b>单片机<b class='flag-5'>ADC</b>模数转换操作

    MSP430单片机教程之MSP430的详细程序示例合集免费下载

    本文档的主要内容详细介绍的是MSP430单片机教程之MSP430的详细程序示例合集免费下载。
    发表于 09-13 08:00 197次下载

    MSP430单片机串口控制5PWM频率变化程序

    MSP430单片机串口控制5PWM频率变化程序
    发表于 11-19 15:51 11次下载
    <b class='flag-5'>MSP430</b>单片机串口控制5<b class='flag-5'>路</b>PWM频率变化<b class='flag-5'>程序</b>