以下是一段代码,求解释一下
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; //清零标志位 } } }
|