以下是一段代码,求解释一下
1.main 函数执行顺序
2.中断标志位ADC12IFG是如何确定的
//*************************************************************************
// ADC初始化程序,用于配置ADC相关寄存器
//*************************************************************************
void ADC_Init()
{
P6SEL|=0x01; //选择ADC通道,设置对应IO口的功能模式
ADC12CTL0|= ADC12ON + SHT0_2 + REFON +REF2_5V ; //ADC电源控制开,16个CLK,内部基准2.5V
ADC12CTL1|= ADC12SSEL1 + ADC12SSEL0; //SMCLK做时钟源
ADC12MCTL0= SREF1 + INCH_0; //参考控制位及通道选择
ADC12IE |= 0x01; //中断允许
ADC12CTL0|= ENC; //使能转换器
}
//*************************************************************************
// ADC中断服务程序
//*************************************************************************
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void)
{
uchar j;
while((ADC12CTL0 &0x01)==0); //如果ADC忙,则等待,否则读取ADC转换数值
Flag = 1 ;
TEMP = ADC12MEM0; //读取ADC转换值
Data_do(TEMP); //处理ADC值,用于显示
for(j=0;j<50;j++)
{
Display(A1,A2,A3,A4); //显示ADC的数据
}
}
//***********************************************************************
// 主程序
//***********************************************************************
void main(void)
{
WDT_Init(); //看门狗初始化
Clock_Init(); //时钟初始化
Port_Init(); //端口初始化,用于控制IO口输入或输出
Close_LED(); //LED数码管先关闭
ADC_Init(); //初始化ADC配置
_EINT(); //使能中断
Flag=1; //标志位先置1
while(1)
{
while(Flag==1)
{
ADC12CTL0 |= ADC12SC; //开-启转换
ADC12CTL0 &= ~ADC12SC; //清零
Flag=0; //清零标志位
}
}
}