MSP430单片机AD转换实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

A/D转换实验

一、转换原理

MSP430F149的A/D转换器原理请参考相关书籍。

实验板上与AD相关的硬件电路:

编程工作实际就是对以下寄存器的操作:

寄存器类型寄存器缩写寄存器的含义

转换控制寄存器ADC12CTL0转换控制寄存器0 ADC12CTL1转换控制寄存器1

中断控制寄存器ADC12IFG中断标志寄存器ADC12IE中断使能寄存器ADC12IV中断向量寄存器

存储及其

控制寄存器ADC12MCTL0 ~ ADC12MCTL15存储控制寄存器0~15 ADC12MEM0 ~

ADC12MEM15

存储寄存器0~15

设计主程序和中断服务程序。

二、转换程序

1、程序1:转换结果发送到PC

主程序中进行A/D初始化,中断服务程序读A/D转换结果,主程序中通过串口发送结果。

“”主程序与中断程序:

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

程序功能:将ADC对端口电压的转换结果按转换数据和对应的

模拟电压的形式通过串口发送到PC机屏幕上显示

-----------------------------------------------------------

通信格式: 9600

-----------------------------------------------------------

测试说明:打开串口调试精灵,正确设置通信格式,观察接收数据

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

#include <>

#include ""

#include ""

#include ""

#define Num_of_Results 32

uint results[Num_of_Results]; //保存ADC转换结果的数组

uint average;

uchar tcnt = 0;

/***********************主函数***********************/

void main( void )

{

uchar i;

uchar buffer[5];

WDTCTL = WDTPW + WDTHOLD; //关狗

/*下面六行程序关闭所有的IO口*/

P1DIR = 0XFF;P1OUT = 0XFF;

P2DIR = 0XFF;P2OUT = 0XFF;

P3DIR = 0XFF;P3OUT = 0XFF;

P4DIR = 0XFF;P4OUT = 0XFF;

P5DIR = 0XFF;P5OUT = 0XFF;

P6DIR = 0XFF;P6OUT = 0XFF;

P6DIR |= BIT2;P6OUT |= BIT2; //关闭电平转换

P6DIR|=BIT6;P6OUT&=~BIT6; //关闭数码管显示

InitUART();

Init_ADC();

_EINT();

buffer[4] = '\0';

while(1)

{

LPM1;

Hex2Dec(average,buffer);

for(i = 0; i < 4; i++)

buffer[i] += 0x30;

PutString0("The digital value is: ");

PutString(buffer);

Trans_val(average,buffer);

buffer[3] = buffer[2];

buffer[2] = buffer[1];

buffer[1] = 0x2e - 0x30;

for(i = 0; i < 4; i++)

buffer[i] += 0x30;

PutString0("The analog value is: ");

PutString(buffer);

}

}

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

函数名称:ADC12ISR

功能:ADC中断服务函数,在这里用多次平均的

计算口的模拟电压数值

参数:无

返回值:无

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

#pragma vector=ADC_VECTOR

__interrupt void ADC12ISR (void)

{

static uchar index = 0;

results[index++] = ADC12MEM0; // Move results if(index == Num_of_Results)

{

uchar i;

average = 0;

for(i = 0; i < Num_of_Results; i++)

{

average += results[i];

}

average >>= 5; //除以32

index = 0;

tcnt++;

if(tcnt == 250) //主要是降低串口发送速度

{

LPM1_EXIT;

tcnt = 0;

}

}

}

“” A/D转换相关程序:

#include <>

typedef unsigned int uint;

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

函数名称:Init_ADC

功能:初始化ADC

参数:无

返回值:无

相关文档
最新文档