有人能不能给我必须要做的事情下个灯...下面是代码... pwrDetect = 1 ...我正在使用示波器来监控 LED 和 A/D 输入(在采样时、我可以在此引脚上看到电压下降)。 在 TIMERA0_Vector 中的任何情况下、如果我移除了...LPM3行、我似乎每5秒看到一次样本、如果我在该行中有一个样本、那么我每2秒得到一次样本?? 有人能不能告诉我为什么我每秒都得不到样片… 我的 A/D 时钟频率为1MHz、采样周期为/64。 该计时器脱离 VLO 时钟运行、在引脚上测量 VLO 时、我设置了大约1秒的周期。
#include #include "Lipo.h" volatile unsigned int ledSw = 0; volatile unsigned int pwrDetect = 0; unsigned int startup = 1; volatile unsigned int * pBattVolt; void main (void) { 结构 PWM_F201x PWM; mcuwatchdogOff; MCU_clk_setup; CONFIGIO; ad_Config(); pBattVolt =&ADC10MEM; PWM.PERIOD = 11600;PWM.OnTime = 9400;PWM.MODE = RESET;PWM.CYCLE = UP; PWM_CONFIG (&PWM); TACCTL0 |= CCIE; ADC10CTL0 |= ENC + ADC10SC; while (1){ _bis_SR_register (LPM3_bits + GIE); //将 PWM 设置为闪存或不取决于抛出的开关 如果(pwrDetect = 1){//电源连接的 LED 脱离计时器工作 P1OUT &=~(BIT2 | BIT6);//LED 关闭 P1OUT |= BIT7;//MOSFET 导通 //根据模拟电压,P1SEL 将选择哪个 LED 闪烁的计时器 //********* if (* pBattVolt < red_limit){ P1SEL =((P1SEL 和~黄色)|红色); } 否则、如果(* pBattVolt > green_limit_CHG){ P1SEL =((P1SEL 和~黄色)|绿色); } 否则{ P1SEL |=黄色; } TACCTL1 = OUTMOD_3; } 否则{//电源未连接 LED 关闭开关而不是计时器 P1OUT &=~BIT4;//MOSFET 关闭 if ((ledSw)==1){//led 开关被抛出 P1SEL = 0; if (* pBattVolt < red_limit){ P1OUT &=~黄色; P1OUT |=红色; } 否则、如果(* pBattVolt > green_limit){ P1OUT &=~黄色; P1OUT |=绿色; } 否则{ P1OUT |=黄色; } TACCTL1 = OUTMOD_1; } 否则、如果((P1IN & BIT0)= 0){ P1OUT &=~(BIT6 | BIT2); P1SEL = 0; } } } #pragma vector=TIMERA0_vector __interrupt void PWM_Output_Control (void) { ADC10CTL0 |= ENC + REFON + ADC10ON + ADC10SC;//针对采样的//ARM ADC //__BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);//唤醒并运行 main! } #pragma vector=ADC10_Vector __interrupt void BatteryVoltage (void) { ADC10CTL0 &=~(ENC + REFON + ADC10ON);//禁用 ADC *pBattVolt = ADC10MEM; if (启动){ P1IFG |= BIT5;//强制中断获取电源状态 P1IFG |= BIT0;//强制中断以获取 LED 开关 } __BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);//唤醒并运行 main! } #pragma vector=Port1_vector __interrupt void LED_Switch (void) { IF (P1IFG & BIT0){ ledSw = P1IN 和 BIT0; P1IFG &=~BIT0; P1IES ^= BIT0; } IF (P1IFG & BIT5){ pwrDetect =(P1IN & BIT5)>> 5; P1IFG &=~BIT4; P1IES ^= BIT5; } 启动= 0; _BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);//唤醒并运行 main! }
函数定义
void ad_Config (void)//定义 { ADC10CTL0 = SREF_1 + REF2_5V + ADC10SHT_3 + REFON + ADC10IE + ADC10ON; ADC10CTL1 = INCH_1 + SHS_0 + ADC10DIV_0 + ADC10SSEL_2;//通道1、clk (3.7MHz - 6.3MHz)、将 clk 除以8以保证用 HiZ 输入、TA1源 S/H 建立 ADC10AE0 = BIT1; } void PWM_CONFIG (struct PWM_F201x* p)//定义 { TACCR0 =(p ->周期); //周期(以秒为单位 TACCR1 =(p -> OnTime); //以秒为单位的导通时间 如果(p -> MODE = NORMAL) TACCTL1 |= OUTMOD_3; 否则、如果(p -> MODE =反相) TACCTL1 |= OUTMOD_7; 否则、如果(p -> MODE = RESET) TACCTL1 |= OUTMOD_5; 其他 TACCTL1 |= OUTMOD_3; 如果(p -> cycle = up) TACTL |= MC_1; 其他 TACTL |= MC_2; TACTL |= tassel_1; }
BCSCTL3 |= 0x20; BCSCTL1 = CALBC1_1MHz; DCOCTL = CALDCO_1MHz;
谢谢