main() { WDTCTL = WDTPW + WDTHOLD; //停止看门狗定时器 P5DIR |= 0xff; //设P1.0 为输出 CCTL0 = CCIE; //CCR0开中断允许 CCR0 = 1000-1; //向CCR0捕获/比较寄存器装入初值,用于比较 TACTL = TASSEL_1 + MC_1; //选ACLK为定时器A时钟源, 增计数模式 P6SEL = 0x0F; // 打开A0-A3 A/D通道输入 P5DIR=0XFF; ADC12CTL0 = ADC12ON+MSC+SHT0_10; //开ADC12模块+采样信号由SHI仅首次触发 //+采集定时器分频系数n=64, ADC12CTL1 = SHP+CONSEQ_3; // 使用采样定时器输出作采集/转换信号SAMPCON // 重复序列采样模式 ADC12MCTL0 = INCH_0; // 参考电压ref+=AVcc, 输入通道选择为A0 ADC12MCTL1 = INCH_1; // 参考电压ref+=AVcc, 输入通道选择为A1 ADC12MCTL2 = INCH_2; // 参考电压ref+=AVcc, 输入通道选择为A2 ADC12MCTL3 = INCH_3+EOS; // 参考电压ref+=AVcc, 输入通道选择为A3 //+由此通道产生序列结束控制位 ADC12IE = 0x08; // A3通道开中断ADC12IFG.3 ADC12CTL0 |= ENC; // 允许转换 ADC12CTL0 |= ADC12SC; // 启动转换 _EINT(); } // Timer A0中断服务程序 #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) { P5OUT ^= 0x05; //反转P1.0 }
#pragma vector=ADC_VECTOR //ADC中断服务程序 __interrupt void ADC12ISR (void) { _EINT(); static unsigned int index = 0; //中断服务程序中的静态变量 A0results[index] = ADC12MEM0; //移动A0结果往数组,此操作的同时清除ADC12FIG.0 A1results[index] = ADC12MEM1; //移动A1结果往数组,此操作的同时清除ADC12FIG.1 A2results[index] = ADC12MEM2; //移动A2结果往数组,此操作的同时清除ADC12FIG.2 A3results[index] = ADC12MEM3; //移动A3结果往局数组,此操作的同时清除ADC12FIG.3 }
中断嵌套不了。想实现的功能是定时器是不断的中断的,ad也是不断中断的
|