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