|
程序在下面,AD采样的电压通过串口往上位机传,但是每次串口调试助手里面只接收到
row:1 column:0
Volt = 0.31
就是说,row和column还有volt的值不会变,一直就是这个数,按道理来说应该是变化的。不知道为什么,盼望着那位高手帮我指点改改,在下先谢啦!
#include "msp430x12x2.h"
//#include "string.h"
#define NUM 10
unsigned int T;
float Result[8],volt;
unsigned char chln;
unsigned char row,column,row2,column2;
void delay(int t)
{
int i;
for(i=t;i>0;i--);
}row:1 column:0
Volt = 0.31
void init( void )
{
// i/o
P1DIR |=BIT0;
P1DIR |=BIT1;
P2DIR |=BIT4;
P2SEL |=BIT3;
P3SEL |=BIT6;
P3SEL |=BIT7;
P3SEL |=BIT0;
P2SEL |=BIT2;
P2SEL |=BIT1;
P2SEL |=BIT0;
//adc
ADC10CTL0 &= ~ENC;
ADC10CTL0 |= 0x20F0; //Vr+ = Vref+ Vr- = ××ss
//MSC = 1 2.5V ON ADC10 ON
ADC10CTL1 |= ADC10SSEL_0 + INCH_0;
ADC10DTC0 |= 0X0000;
}
//UART
void init_uart0(void)
{
UCTL0|=SWRST; //UTCTL0 = SSEL1;
UTCTL0 |= SSEL0; // UCLK = ACLK
UBR00 = 0x03; // 32k/9600 - 3.41
UBR10 = 0x00;
UMCTL0 = 0x4A; // Modulation
UCTL0 =CHAR; //8位数据位,1位停止位,无校验
ME2 |= UTXE0 + URXE0; // Ena××e USART0 TXD/RXD
IE2 |= URXIE0; // Ena××e USART0 RX interrupt
UCTL0 &= ~SWRST; // Initialize USART state machine
P3SEL |= 0x30; // P2.4,5 = USART0 TXD/RXD
P3DIR |= 0x10; // P2.4 output direction
_EINT();
}
void set_channel(unsigned char i)
{
switch(i)
{
// p2.4 --> c
// p1.0 --> b
// p1.1 --> a
case 0: P2OUT &= ~BIT4;
P1OUT &= ~BIT0;
P1OUT &= ~BIT1;
break;
case 1: P2OUT &= ~BIT4;
P1OUT &= ~BIT0;
P1OUT |= BIT1;
break;
case 2: P2OUT &= ~BIT4;
P1OUT |= BIT0;
P1OUT &= ~BIT1;
break;
case 3: P2OUT &= ~BIT4;
P1OUT |= BIT0;
P1OUT |= BIT1;
break;
case 4: P2OUT |= BIT4;
P1OUT &= ~BIT0;
P1OUT &= ~BIT1;
break;
case 5: P2OUT |= BIT4;
P1OUT &= ~BIT0;
P1OUT |= BIT1;
break;
case 6: P2OUT |= BIT4;
P1OUT |= BIT0;
P1OUT &= ~BIT1;
break;
case 7: P2OUT |= BIT4;
P1OUT |= BIT0;
P1OUT |= BIT1;
break;
default: break;
}
}
void send_state()
{
unsigned int vbuf;
char buf[20],i=0,b1,b2,b3;
vbuf = (int)(volt*100);
b1=vbuf/100;
b2=(vbuf%100)/10;
b3=vbuf%10;
for(i=0;i<20;i++) buf[i]=0;
i=0;
sprintf(buf,"ROW:%d COLUMN:%d \n",row2,column2);
do
{
TXBUF0 = buf[i]; //发送数据
while((UTCTL0&0X01)==0);
i++;
}while(buf[i]!=0);
for(i=0;i<20;i++) buf[i]=0;
i=0;
sprintf(buf,"Volt = %d.%d%d\n\n",b1,b2,b3);
do
{
TXBUF0 =buf[i]; //发送数据
while((UTCTL0&0X01)==0);
i++;
}while(buf[i]!=0);
}
void main(void)
{
int buf;
WDTCTL=WDTPW+WDTHOLD;
delay(1000);
init();
init_uart0();
while(1)
{
for(column=0;column<8;column++) // A0 to A7 selcet
{
ADC10CTL0 &= ~ENC;
buf=column;
buf*=4096;
ADC10CTL1 &= ~0xF000; //buf是缓存器,4096是左移12位
ADC10CTL1 |= buf;
for(row=0;row<8;row++) //模拟开关1-8的通道
{
set_channel(row);
ADC10CTL0 |= ENC;
ADC10CTL0 |= ADC10SC;
while(ADC10CTL0 && ADC10IFG == 0);
ADC10CTL0 &=~ENC;
volt=((float)(ADC10MEM)/1024.0) *2.5;
row2=row;
column2=column;
send_state();
}
}
}
}
|
|