MSP430单片机AD转换实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
参数:无
返回值:无