MSP430单片机ADDC12电压采集程序

MSP430单片机ADDC12电压采集程序,第1张

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

*功能:单通道采样一次,选用内部的参考电压2.5V

*入口参数:channel:选择的采样通道 0~7

*出口参数:采样得到的数字值

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

unsigned int sample1(int channel)

{

switch(channel)

{ case 0: P6SEL |= BIT0break//A0

case 1: P6SEL |= BIT1break//A1

case 2: P6SEL |= BIT2break

case 3: P6SEL |= BIT3break

case 4: P6SEL |= BIT4break

case 5: P6SEL |= BIT5break

case 6: P6SEL |= BIT6break

case 7: P6SEL |= BIT7break//A7

default:P6SEL |= BIT0

}

ADC12CTL0 = ADC12ON + SHT0_2 +REF2_5V//2.5V内部参考电压

ADC12CTL1 = SHP //采样信号来源采样定时器

ADC12MCTL0 =(unsigned char)channel//VR+=VREF+,VR-=AVss

ADC12CTL0 |= ENC //使能

ADC12CTL0 |= ADC12SC //开始采样转换

while((ADC12IFG &BIT0)==0)

return (unsigned int)(ADC12MEM0)

}

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

*功能:单通道采样一次,选用外部参考电压2.5V

*入口参数:channel:选择的采样通道 0~7

*出口参数:采样得到的数字值

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

unsigned int sample2(int channel)

{

switch(channel)

{ case 0: P6SEL |= BIT0break//A0

case 1: P6SEL |= BIT1break//A1

case 2: P6SEL |= BIT2break

case 3: P6SEL |= BIT3break

case 4: P6SEL |= BIT4break

case 5: P6SEL |= BIT5break

case 6: P6SEL |= BIT6break

case 7: P6SEL |= BIT7break//A7

default:P6SEL |= BIT0

}

ADC12CTL0 = ADC12ON + SHT0_2 +REF2_5V//2.5V内部参考电压

ADC12CTL1 = SHP //采样信号来源采样定时器

ADC12MCTL0 =SREF_2+(unsigned char)channel//Vr+=VeEF+,Vr-=AVss

ADC12CTL0 |= ENC //使能

ADC12CTL0 |= ADC12SC //开始采样转换

while((ADC12IFG &BIT0)==0)

return (unsigned int)(ADC12MEM0)

}

#include <msp430x44x.h>

#include "ADC12.c"

void main(void)

{

WDTCTL = WDTPW + WDTHOLD// Stop WDT

P5DIR |= 0x02 // P5.1 output

for ()

{

if(sample1(1)<120)

P5OUT &= ~0x02

else P5OUT |= 0x02

}

}

// ADC12 interrupt service routine

#pragma vector=ADC12_VECTOR

__interrupt void ADC12_ISR (void)

{

if (ADC12MEM0 <120)

P5OUT &= ~0x02 // Clear P5.1 LED off

else

P5OUT |= 0x02 // Set P5.1 LED on

_BIC_SR_IRQ(CPUOFF) // Clear CPUOFF bit from 0(SR)

}

这么久了,还请采纳,俺可是付出的啊

我做的和你的基本一样 其实28335和2812基本差不多 只是多了个浮点功能 在28335中 EPWM模块用于生成PWM波 每次只要对比较寄存器进行赋值就可以了 其他的设置和2812是一样的 建议你看一些28335的例程 至于AD采样 你可以用EPWM模块来触发 也可以通过外部引脚触发 先将电流信号转换成电压信号 注意:这个电压信号要在0--3V范围之内 然后DSP就可以对其进行读数了


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8157387.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存