|
请教用Time_B为触发信号源怎么弄,不使用中断的那种。
下面是我写的,设计采样频率为15Hz,但采样频率不对。我用中断写的就可以。哪位高手帮忙看看
/*******************************************
ADC12初始化
*******************************************/
void ADC_Init()
{
P6SEL|=BIT0; //选择ADC通道,设置对应IO口的功能模式
ADC12CTL0 &= ~ENC;
ADC12CTL0|= ADC12ON + REFON+MSC+REF2_5V; //ADC电源控制开,16个CLK,内部基准
//采用中断
// ADC12CTL1|=SHP+CONSEQ_1 ; //SMCLK做时钟源
//不采用中断
ADC12CTL1|=SHP+SHS_3+ADC12SSEL_3; //SMCLK做时钟源
ADC12IE|= 0x01; //中断允许
}
TBCTL=TBSSEL_1+MC_1+TBCLR;
TBCCTL1=OUTMOD_3;
TBCCR0=2184;
TBCCR1=1092;
while(1)
{
ADC12CTL0|=ENC+ADC12SC;
while((ADC12IFG&BIT0)==0);
_NOP();
ADC12CTL0 &= ~ENC;
TEMP1=ADC12MEM0;
if(TEMP1>4096)TEMP1=4095;
if(x
{
//i是用来标记保存5个原始数据,之后做平滑处理,
uint a;
a=TEMP1/16;
if(a<=0) a=0;
if(a>=200) a=200; //等到采集到第5个点的时候在做运算,之后显示
B=a;
i++;
if(i>4) i=0;
for(uint j=0;j<5;j++)
{
sum+=B[j];
}
// a=sum/5;
if(x
{
GUI_Line(x-1,A[0],x,a,GREEN);
A[0]=a;
GUI_RLine(x+1,0,200,GRAY1);
GUI_RLine(x+2,0,200,GRAY1);
x++;//x增加是使坐标判断前移
}
else
{
x=10;
GUI_RLine(9,0,200,GRAY1);
GUI_RLine(10,0,200,GRAY1);
}
}
}
|
|