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转换结果,主程序中通过串口发送结果。
“main、c”主程序与中断程序:
/*********************************************************
程序功能:将ADC对P6、0端口电压的转换结果按转换数据与对应的模拟电压的形式通过串口发送到PC机屏幕上显示
----------------------------------------------------------- 通信格式:N、8、1, 9600
----------------------------------------------------------- 测试说明:打开串口调试精灵,正确设置通信格式,观察接收数据
**********************************************************/ #include
#include "allfunc、h"
#include "UART0_Func、c"
#include "ADC_Func、c"
#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中断服务函数,在这里用多次平均的
计算P6、0口的模拟电压数值
参数:无
返回值 :无
********************************************/
#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];
}