|
MSP430 launchpad 端口控制问题求助
[复制链接]
最近才接触MSP430 launchpad, 有个问题想请教各位大神。
我想用MSP430连续测9个电压值,第一个电压值选用P1.0做通道,同时P1.3输出高电位,P1.1,P1.2,P1.4,P1.5输出低电位。然后依次下去,测量9个电压值时各个端口的状态如下表,我写了一个程序不清楚对不对,想请各位帮忙改下。多谢! 电压输入通道 | 高电位输出 | 低电位输出 | P1.0 | P1.3 | P1.1,P1.2,P1.4,P1.5 | P1.0 | P1.4 | P1.1,P1.2,P1.3,P1.5 | P1.0 | P1.5 | P1.1,P1.2,P1.3,P1.4 | P1.1 | P1.3 | P1.0,P1.2,P1.4,P1.5 | P1.1 | P1.4 | P1.0,P1.2,P1.3,P1.5 | P1.1 | P1.5 | P1.0,P1.2,P1.3,P1.4 | P1.2 | P1.3 | P1.0,P1.1,P1.4,P1.5 | P1.2 | P1.4 | P1.0,P1.1,P1.3,P1.5 | P1.2 | P1.5 | P1.0,P1.1,P1.3,P1.4 |
#include "msp430g2553.h"
unsigned int i;
float a[8];
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
P1OUT=0x00;
ADC10CTL0|=ADC10ON+ADC10IE+REFON+REF2_5V+SREF_1+MSC+ADC10SHT_2;//取内部参考电压2.5V,使采样时间为16xADC10CLK,
//增大采样时间以保证采样的准确性;
P1DIR|=BIT1+BIT2+BIT3+BIT4+BIT5;
ADC10CTL1|=INCH_0;
P1OUT=0x08;
while(1)
{
for(i=0;i<9;i++)
{
ADC10CTL0&=~ENC; //关闭采样使能
while(ADC10CTL1&ADC10BUSY); //判断是否有采样或转换动作
ADC10CTL0|=ADC10SC+ENC; //开始采样
ADC10SA=(unsigned int )a; //将组数a的首地址作为采样的起始地址
__bis_SR_register(LPM0_bits+GIE); //关闭CPU,开启总中断
if(i==0||i==3||i==6)
{P1OUT&=~BIT3;
P1OUT^=~BIT4;}
if(i==1||i==4||i==7)
{ P1OUT&=~BIT4;
P1OUT^=BIT5;}
if(i==2||i==5||i==8)
{P1OUT&=~BIT5;
P1OUT^=BIT3;}
if(i==2)
{ADC10CTL1|=INCH_1;
ADC10AE0 |= 0x02;
P1DIR |=BIT0+BIT2+BIT3+BIT4+BIT5;
P1OUT=0x08;}
if(i==5)
{
ADC10CTL1|=INCH_2;
ADC10AE0 |= 0x04;
P1DIR|=BIT0+BIT1+BIT3+BIT4+BIT5;
P1OUT=0x08;
}
}
}
}
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR (void)
{
__bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)
}
[ 本帖最后由 xxdong 于 2012-8-16 11:19 编辑 ]
|
|