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也是不断中断的
此帖出自
小平头技术问答
一周热门 更多>