MSP430:AD10
使用的MSP430G2553,为AD10,正常有8路输出,P1.0-P1.7为A0-A7
有七个寄存器,

参考电压可以是VCC或者内部参考电压1.5V或者2.5V
参考时钟可以是内部ADC10OSC
最高转换速率达200ksps
转换方式四种:单通道单次,序列通道单次,单通道多次,序列通道多次。多次转换时候会用到DTC功能防止数据还没被取出就被覆盖
单通道的实例程序,开启的为通道5,也就是P1.5
void AD_Channel5_Config(void)
{
/* Configure ADC Channel */
ADC10CTL1 = INCH_5 + ADC10DIV_0 ; // Channel 5, ADC10CLK ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON + ADC10IE + REF2_5V;
//SREF_1+REFON +REF2_5V 表示使用内部参考电压 2.5v
ADC10AE0 |= BIT5; //P1.5 ADC option }
单通道单次
每次开始转换需要给寄存器置位,写了个小函数
void AD_Start(void)
{
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion
}
开始转换
转换后的数据处理
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR (void)
{
int data ;
float shuju,c;
char a[];
data = ADC10MEM;
shuju = ((double)data/)*2.5;
c =shuju;
a[]= ((int)c%+0x30);
a[]= 0x2e;
a[]= ((int)(c*)%+0x30);
a[]= ((int)(c*)%+0x30); uart_send_str(a);
__delay_cycles();
uart_send_huiche();
// uart_send_ch((char)(ADC10MEM*25/1024));
}
中断处理数据
多通道的也调通了,几点说明
首先要在ADC10CTL0中开始MSC位
然后 ADC10CTL1 = CONSEQ_3 + INCH_7; CONSEQ选择转换方式此时为多通道多次,后面的INCH位最高通道位,因为我使用4-7四个通道所以最高INCH_7
数据传送控制寄存器0 ADC10DTC0设置为默认模式:单传送块模式,单块传送完停止。这里不做操作即可
ADC10DTC1 = 0x04;设置转换次数,这里我只转换一遍即停止,因为四个通道所以为4,转换次数=通道数*每个通道转换次数
ADC10AE0 |= BIT7+BIT6+BIT5+BIT4; 使能这四个通道
ADC10SA =(unsigned int) adc_result; //数据传送开始地址寄存器 设置DTC的开始地址 Data buffer start
这里值得注意需要传入数组首地址。之前写的ADC10SA adc_result;编译不通过,加了前面的(unsigned int)就OK了,不明白这里。
因为我的定义unsigned int adc_result[];
总之这里改好后程序就OK了。
下面给出代码
void AD_MultiChannel_4_Config(unsigned int adc_result[])
{
ADC10CTL1 = CONSEQ_3 + INCH_7; // 多通道多次转换, 最大转换通道为A1 ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + ADC10IE + REF2_5V+ REFON + SREF_1; // ADC10ON, interrupt enabl //采样保持时间为16 x ADC10CLKs,ADC内核开,中断使能 MSC多次转换选择开 //如果MSC置位,则第一次开始转换时需要触发源触发一次,以后的转换会自动进行 中断使能 //使用DTC时,当一个块传送结束,产生中断 //数据传送控制寄存器0 ADC10DTC0设置为默认模式:单传送块模式,单块传送完停止 ADC10DTC1 = 0x04; //数据传送控制寄存器1 4 conversions 定义在每块的传送数目 一共采样4次所以单块传送4次 //以后就停止了传送 因为是两通道的,所以是每个通道采样数据传送2次 ADC10AE0 |= BIT7+BIT6+BIT5+BIT4; // P1.0 P1.1 ADC option select 使能模拟输入脚A0 A1 //不知道为什么,当P10 P11都悬空时,采样值不同,用电压表测得悬空电压不同,但是当都接上采样源的时候, //采样是相同的 while (ADC10CTL1 & BUSY);
ADC10SA =(unsigned int) adc_result; //数据传送开始地址寄存器 设置DTC的开始地址 Data buffer start //设置数据开始传送的地址为数组adc_sample[]的首地址,因为寄存器ADC10SA和转换结果都是16位的,所以要把 //地址强制转换为16位的int或unsigned int //应该也可以用指针直接访问DTC的存储区,还没试过 }
多通道设置
启动AD代码与前面一样
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR (void)
{
int data ;
float shuju,c;
char a[];
/* data = ADC10MEM;
shuju = ((double)data/1024)*2.5;
c =shuju;
a[0]= ((int)c%10+0x30);
a[1]= 0x2e;
a[2]= ((int)(c*10)%10+0x30);
a[3]= ((int)(c*100)%10+0x30); uart_send_str(a);
__delay_cycles(5);
uart_send_huiche();
*/
for(data=;data<;data++)
{ shuju = ((double)adc_result[data]/)*2.5;
c =shuju;
a[]= ((int)c%+0x30);
a[]= 0x2e;
a[]= ((int)(c*)%+0x30);
a[]= ((int)(c*)%+0x30); uart_send_ch((char)data+0x30);
uart_send_ch(' ');
uart_send_str(a);
__delay_cycles();
uart_send_huiche();
__delay_cycles(); }
中断数据处理
这里 unsigned int adc_result[8];
测试基本OK,还需要多做一些测试,目前手头资源有限
MSP430:AD10的更多相关文章
- MSP430 IO 使用
MSP430内部上拉下拉使用注意——IO口测高低电平 MSP430单片机IO口用来检测高低电平时,是不需要外部上拉下拉的,因为其内部有上拉和下拉.在用作高低电平检测时,需要开启上拉或下拉. ...
- MSP430单片机的两种SPI总线实现方式
MSP430单片机上的SPI总线的实现方式分为两种:硬件实现和软件实现. 二者的抽象层次不同,硬件实现方式下程序员只需要完成总线协议的寄存器层,即一字节(char,8位二进制)数据,而软件实现方式下程 ...
- MSP430单片机的位操作
MSP430单片机属于RISC(Reduced Instruction Set Computer)型处理器.与普通的51单片机的复杂指令集相区别.普通51单片机执行一条指令最少需要12个时钟周期,而R ...
- zju(11)在IAR中移植ucos到msp430
准备材料 1.在TI官网上下载430的固件库,我用的是msp430f5528的板子,下载的是F5xx_F6xx_Core_Lib 地址http://www.ti.com/tool/msp-exp430 ...
- MSP430精准配置高速串口波特率的方法
引言 在实际项目大批量生产调试设备时,笔者发现同样版本的程序在不同设备上运行时效果不一致,一部分设备串口通信正常,另外一部分串口通信不正常.通过示波器对多个设备的串口波特率及系统时钟频率测试, ...
- 【转载】芯片级拆解51、AVR、MSP430、凌阳61、PIC,5种单片机,多张显微照片
先秀一张解剖照,放大裁剪,小米1S微距拍摄,800万像素摄像头很给力!今天等待被拆的是5个单片机芯片:(1)凌阳16位单片机SPCE061A ,这是我接触的第一个单片机,最高主频49MHz,32KB的 ...
- (原创)基于MCU的频率可调,占空比可调的PWM实现(MCU,MCS-51/MSP430)
1.Abstract 做这个是受朋友之邀,用在控制电机转动的方面.他刚好在一家好的单位实习,手头工作比较多,无暇分身,所以找我帮忙做个模型.要求很明晰,PWM的频率在0~1KHz范围内,占空比 ...
- 对MSP430单片机__delay_cycles精确延时的说明及改正
在这里, 我来讨论一下关于MSP430单片机使用__delay_cycles延时的问题. IAR for MSP430编译器提供了一个编译器内联的精确延时函数(并非真正的函数)以提供用户精确延时使用, ...
- msp430 问题及解决记录
----------------------------- 2015.4.28 问题:开发板串口显示的内容为乱码 解决:使用的是原先产品主板的15200的波特率设置,但看来或者是开发板不支持11520 ...
随机推荐
- Eigen库笔记整理(一)
首先熟悉Eigen库的用途,自行百度. 引入头文件: // Eigen 部分 #include <Eigen/Core> // 稠密矩阵的代数运算(逆,特征值等) #include < ...
- Windows下运行jekyll,编码已不再是问题
很久没更新jekyll了,所以好奇着去官网看了下更新记录,发现如下更新条目(版本1.3.0/2013-11-04发布): Add encoding configuration option (#144 ...
- 关于MD5解密网站。www.cmd5.com
第一次听说这个网站,本人的名字居然也能够被解密,而且还是需要付费取得明文! 大家知道,md5加密是我们常用的加密方式,这个加密方式的好处在于不可逆.而且任何环境下算出的密文应该都是相同的,所以在大家登 ...
- Java垃圾回收简介
Java关键术语 JavaAPI:一系列帮助开发者创建Java应用程序的封装好的库. Java 开发工具包 (JDK):一系列工具帮助开发者创建Java应用程序.JDK包含工具编译.运行.打包.分发和 ...
- 访问请求参数request.getParameter()
访问请求参数request.getParameter() 制作人:全心全意 getParameter() 例: 传递参数页: <%@ page language="java" ...
- python输出带颜色字体详解
在python开发的过程中,经常会遇到需要打印各种信息.海量的信息堆砌在控制台中,就会导致信息都混在一起,降低了重要信息的可读性.这时候,如果能给重要的信息加上字体颜色,那么就会更加方便用户阅读了. ...
- Python条件控制语句
条件控制语句 if语句 if条件加表达式 if-else语句 if-elif-else语句 if 表达式1: 语句1 elif 表达式2: 语句2 elif 表达式3: 语句3 else: 语句e 逻 ...
- 数据分布vs聚类-数据预处理技巧-对数变换
对于原始数据分布倾斜 利用统计或数学变换来减轻数据分布倾斜的影响.使原本密集的区间的值尽可能的分散, 原本分散的区间的值尽量的聚合. Log变换通常用来创建单调的数据变换.它的主要作用在于帮助稳定方差 ...
- 07.C语言:结构体、共用体、枚举
一.结构体 是一种复合的数据类型,由多个不同类型的数据(为结构体的成员)组成的集合. 在c语言中没有给出结构体这种类型具体的形式(名称),但是给出类定义该结构体类型的方法(格式). 在使用结构体类型时 ...
- Ubuntu16.04再次装机记
个人的吐槽 整个国庆假期(9天),基本上都在搭建PHP环境中耗费了. 是这样的——来大学报到前,想着大学里用个Dev-C++应该够了,于是把Ubuntu删了,腾出了100G的空间.到了CSU,加了团委 ...