今天第一次写adc,出了些问题,希望大神们不吝赐教。
我定义了一个数组ad[2]来储存adc转换过来的数据,用p1.0和p1.1进行
序列连续采样。希望将p1.0的数据储存在ad[0]中,把p1.1的采样数据储存在ad[1]中。
可是结果不是我预想的那样,程序会把p1.0的数据一会存在ad[0]中,一会存在ad[1]中,p1.1也是这样。该如何才能解决?程序如下:
- #include
- #ifndef TIMER0_A1_VECTOR
- #define TIMER0_A1_VECTOR TIMERA1_VECTOR
- #define TIMER0_A0_VECTOR TIMERA0_VECTOR
- #endif
- volatile long tmp;
- volatile unsigned short ad[2];
- int main(void) {
- WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
-
- BCSCTL1 = CALBC1_1MHZ;
- DCOCTL = CALDCO_1MHZ;
- IFG1 &= ~OFIFG;
- BCSCTL2 |= SELM_0 + DIVM_0;
- P1DIR = 0X03;
- P1OUT = 0;
- ADC10CTL1 = ADC10DIV_0 + CONSEQ_3 + INCH_1 + ADC10SSEL_2; //使用MCLK提供时钟信号,不分频,采用多通道连续转换
- ADC10CTL0 = SREF_0 + MSC + ADC10ON + ADC10SC + ENC + ADC10SHT_3; //开启通道连续转换,开启转换,采样率64 x ADC10CLKs,提高准确性
- ADC10AE0 = 0x03; //用p1.0 p1.1作为为采样通道
- ADC10DTC0 = ADC10CT; //连续转换
- ADC10DTC1 = 2; //dtc写两次
- ADC10SA = (unsigned short)ad; //dtc写入地址为ad的地址
- while(1){
- tmp = ADC10MEM; //用ccs可在此处设置断点,断点属性设置动作为refresh all windows可以观测数组ad的变化,发现了上述问题
- }
- return 0;
- }
复制代码
此帖出自
小平头技术问答
(unsigned short)ad; 是否应该定义为 (unsigned long)ad;
一周热门 更多>