通过ADC12 SHSx 采样触发信号控制 采样频率
1、在使用定时器 控制采样频率的时候,‘01’、‘10’、‘11’是否与TA0、TA1、TB 一一对应;
2、执行下列代码:
[CODE]
//******************************************************************************
# include <msp430x54x.h>
# define Num_of_Results 8
# include "lcd12864.h"
# define _SAMPING_FREQ (50*64)
# define _ACLK 32768
# define ROOT2 (1.1515926)
volatile unsigned int results[Num_of_Results];
void init(void)
{ InitLCD(); // P1SEL |= 0x40; //Timer_A.OUT1,从P1.6引脚输出(可选) // P1DIR = 0x02+0x40; //P1.1&P1.6输出 //ADC12初始化---------------------- //单通道,单次采样模式 P6SEL |= BIT0; //使能A/D通道 A0 ADC12CTL0 |= ~ADC12ENC; ADC12CTL0 |= ADC12ON + ADC12SHT01+ADC12MSC; //开ADC12内核和设置SHIT0=2(N=4)/采样定时器触发 ADC12CTL1 |= ADC12SHP+ADC12CONSEQ_3+ADC12MSC; //SAMPCON信号选择为采样定时器输出,采样模式(单通道多次采样)/ ADC12CTL1 &= ~(ADC12DIV0+ADC12DIV1+ADC12DIV2); ADC12CTL2 |= ADC12PDIF0; ADC12CTL1 |= ADC12CSTARTADD_0+ADC12SHS_3+ADC12SSEL_1; //定义转换地址首地址;定时器TA0 输出1控制采样转换;内核时钟选择MCLK ADC12MCTL0 |= ADC12INCH_0+ ADC12SREF_0; //使用外Vr+ = AVcc Vr-=AVss 通道0 ADC12CTL0 |= ADC12ENC; //ADC转换允许 //Timer_A初始化-------------------- //TA1CTL = TASSEL_2+MC_1+TACLR ; //timerA CLK=ACLK,增计数模式 //TA1CCTL1 |= OUTMOD_7; //timer_A.out1输出为PWM翻位/复位模式 //TA1CCR0 = 200; //选择ACLK约30us,CCR0在增计数模式,周期约50ms //TA1CCR1 = 10; TBCCR0 = 312; TBCCR1 = 13; TBCTL |= TBSSEL_2 + MC_1 + TBCLR ; //选择增模式,清TAR , //TBCTL &= ~TAIFG; //清TAIFG // TB0CTL |= TAIE; //使能TAIE TBCCTL1 |= OUTMOD_7; //PWM模式选择 //Timer_A0初始化-------------------- TA0CTL = TASSEL_2+MC_1+TACLR ; //timerA CLK=ACLK,增计数模式 TA0CCTL1 |= OUTMOD_7; //timer_A.out1输出为PWM翻位/复位模式 TA0CCR0 = 312; //选择ACLK约30us,CCR0在增计数模式,周期约50ms TA0CCR1 = 13; }
//------------------------------------------------------------------------------
void main(void)
{ WDTCTL=WDTPW+WDTHOLD; //停止WDT init(); ShowString86(0,1, title0); ShowString86(2,0, title1); ShowString86(4,3, title2); ShowString86(6,2, title3); ReverseLinChar(0,0,21); while(1) { ADC12CTL0 |= ADC12SC+ADC12ENC; //ADC转换允许,开始转换 while((ADC12IFG & BIT0)==0); ADC12CTL0 &=~ADC12ENC; _NOP(); LED(); value=ADC12MEM0; // 读取结果 conv(value,ADVAL); //数据转换调用 ShowString86(6,11,ADVAL); }
}
[/CODE]
在ADC12SHSH 控制位下,ADC12SHSH_0(软件软件触发转换),程序运行后,有显示结果;ADC12SHSH_3(定时器触发转换),程序中设置TIMERB,程序运行后,有结果显示;ADC12SHSH_2/ADC12SHSH_1(定时器触发转换),程序分别尝试设置TA0和1TA,运行程序后,执行到while((ADC12IFG & BIT0)==0);停止,无显示结果;
为什么? |