MSP430单片机AD转换实验

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

AD转换实验

一、转换原理

MSP430F149勺A/D转换器原理请参考相关书籍。实验板上与AD相关的硬件电路:

RV3

10K

------------ 3-3\

J6

P61

SI?2

Al)输入电路

RV4

III-10K f > 2 ;

|||

二、转换程序

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];

average >>= 5; // 除以 32

index = 0; tcnt++;

if(tcnt == 250) // 主要就是降低串口发送速度 { LPM1_EXIT; tcnt = 0; } }

}

“ADC_Func 、 c ” A/D 转换相关程序 : #include typedef unsigned int uint; /******************************************** 函数名称 :Init_ADC 功 能: 初始化 ADC 参 数: 无 返回值 : 无

********************************************/ void Init_ADC(void) {

P6SEL |= 0x01; // ADC12CTL0 =

ADC12ON+SHT0_15+MSC; // ADC12CTL1 =

SHP+CONSEQ_2; // ADC12IE = 0x01; // ADC12CTL0 |= ENC; // ADC12CTL0 |= ADC12SC; //

}

/******************************************** 函数名称 :Hex2Dec

功 能:将16进制ADC 专换数据变换成十进制

表示形式

数:Hex_Val--16 进制数据 ptr--

指向存放专换结果的指针

返回值 : 无 ********************************************/ void Hex2Dec(uint Hex_val,uchar *ptr) { ptr[0] = Hex_val / 1000;

ptr[1] = (Hex_val - ptr[0]*1000)/100; ptr[2] = (Hex_val - ptr[0]*1000 - ptr[1]*100)/10;

使能ADC 通道

打开ADC 设置采样时间 使用采样定时器 使能ADC 中断 使能专换 开始专换

相关文档
最新文档