请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430F5359 工具/软件:Code Composer Studio
大家好、我在调光效果的同时尝试使 LED 亮度增加。 因此、我将使用延迟周期。 但代码在 获得中断时停留在_DELAY_CYCLES ()处。 以下是代码:可能是什么问题?
#include "msp430.h" unsigned int time_period、step、x、y、z; typedef enum { green = BIT2、red = BIT3、blue = BIT4、white = BIT2 | BIT3 | BIT4 }colors_e; volatile colors_e currColor = RED; volatile unsigned int SW1、SW3;//计数 器 void PWMCLK (void) { TA0CCR0 = 512;// PWM period = TACTL1;TA0CL1 = TCCTL1 //绿色 LED TA0CCTL2 = OUTMOD_7 | CLLD_1;//红色 LED TA0CCTL3 = OUTMOD_7 | CLLD_1;//蓝色 LED TA0CTL = tassel_2 | MC_1 | TACLR;// ACLK、向上计数模式、清除 } void LED (Brightness_0 =无符号时间);按钮0 =无符号色带0; TA0CCR1 = 0; TA0CCR2 = 0; TA0CCR3 = 0; P1SEL &=~(BIT2 | BIT3 | BIT4); } 如果(BrightnessButton = 1) { Time_Period = 128; step = 1; } 否则(BrightnessButton = 2) { Time_Period = 256; step = 2; } 否则(BrightnessButton = 3) { Time_Period = 384; Step = 3; } 否则、如果(BrightnessButton = 4) { Time_Period = 512; step = 5; } if (LEDcolorchange = 1) { currColor =(colors_e)(P1SEL & white); switch (currColor) { case blue: for (y = 0;y < time_period;y = y + step) { TA0CCR2 = y = y; P2000 cycles;delay }(pSEL = y) 对于(y = time_period;y > 0;y = y - step) { TA0CCR2 = y; __delay_cycles (2000); } break; case RED: 对于(z = 0;z < time_period;z = z + step) { TA0CCR3 = z; P1SEL = blue; __delay_cycles (2000); z = 0;z = time period;z = 0;z = z = 0;z = time;z = time (z = 0); z = z - step) { TA0CCR3 = z; __DELAY_CYCLES (2000); } break; 默认值: P1SEL =蓝色; break; } 否则(LEDcolorchange = 2) { currColor =(colors_e)(P1SEL 和白色); switch (currColor) { case blue: for (x = 0;x < time_period; x = x + STEP) { TA0CCR1 = x; P1SEL =绿色; __DELAY_CYLES (2000); } for (x = TIME_PERIOD;x > 0;x = x - STEP) { TA0CCR1 = x; __DELAY_CYLES (2000); } break; case 绿色: for (z = 0;z < TIME_PERIOD; z = z + step) { TA0CCR3 = z; P1SEL =蓝色; __DELAY_CYCLES (2000); } for (z = TIME_PERIOD;z > 0;z = z - STEP) { TA0CCR3 = z; __DELAY_CYCLES (2000); } break; 默认值: P1SEL =蓝色; break; } } 否则、如果(LEDcolorchange == 3) { currColor =(colors_e)(P1SEL 和白色); 开关(currColor) { case RED: for (x = 0;x < time_period;x = x + step) { TA0CCR1 = x; P1SEL = green; __delay_cycles (2000); } for (x = 100 > time_period;}则为(x = x = x + time_period;); x = x - STEP) { TA0CCR1 = x; __DELAY_CYCLES (2000); } break; case green: for (y = 0;y < TIME_PERIOD;y = y + STEP) { TA0CCR2 = y; P1SEL = RED; __DELAY_CYLES (2000); } for (y = TIME_PERIOD;y > 0; y = y - step) { TA0CCR2 = y; __DELAY_CYCLES (2000); } break; 默认值: P1SEL =红色; break; } 否则(LEDcolorchange = 4) { currColor =(colors_e)(P1SEL 和白色); switch (currColor) { case RED: for (x = 0;x <_time_period; x = x + STEP) { TA0CCR1 = x; P1SEL =绿色; __DELAY_CYLES (2000); } for (x = TIME_PERIOD;x > 0;x = x - STEP) { TA0CCR1 = x; __DELAY_CYLES (2000); } break; case 蓝色: for (y = 0;y < TIME_PERIOD; y = y + STEP) { TA0CCR2 = y; P1SEL =红色; __DELAY_CYLES (2000); } for (y = TIME_PERIOD;y > 0;y = y - STEP) { TA0CCR2 = y; __DELAY_CYLES (2000); } break; case 绿色: for (z = 0;z < TIME_PERIOD; z = z + STEP) { TA0CCR3 = z; P1SEL =蓝色; __DELAY_CYCLLES (2000); } for (z = TIME_PERIOD;z > 0;z = z - STEP) { TA0CCR3 = z; __DELAY_CYCLKS(2000); } break; 默认值: P1SEL =蓝色; break; } }}}}TA1CCTL0 = void (CC0);{TACC0 = void (void) // CCR0中断使能 TA1CCR0 = 50000; TA1CTL = tassel_1 | MC_1;// SMCLK、countmode、clear TAR // bis_SR_register (LPM0_bits | GIE);// Enter LPM0、启用中断 //_ no_operation ();clear TAR /_bis_SR = 0 | WDTTRD = 0 | WITTDIO = 0 | WITL 0 = 0 = 0 | WITL 0 = 0 = 0 = 0 = 0;// WIT3 | WDT3 | WITL 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 // P1.2、P1.3和 P1.4输出 P1SEL &=~(BIT2 | BIT3 | BIT4);// P1.2和 P1.3选项选择 P3REN |=(BIT1 + BIT2 + BIT3);//在按钮引脚 P3OUT |=(BIT1 + BIT2 + BIT2)上启用电阻器-拉拔器;//在按钮引脚 P3OUT |=(BIT1 + BIT2 + BIT2) //将"1"写入 portpin,将电阻器拉上 P3IES|=(BIT1 + BIT2 + BIT3);//按下按钮时触发::选择一个... P3IFG &=~(BIT1 + BIT2 + BIT3);//释放按钮时的触发器::...或选择其他 P3IE |=(BIT1 + BIT2 + BIT3);//启用选择器掩码,以便在相关引脚 PWMCLK ()上生成中断; INTERRUPT_CLK ()(SW1 );//启用中断(全局中断);(SW1);//启用中断(SW1) } #pragma vector=PORT3_vector __interrupt void Port_3 (void) { switch (_even_in_range (P3IV、0x10)) { case 0x00://None break; case 0x02://Pin0 break; case 0x04: //bri { if (SW1 < 4) }{ SW1++; }案例0x08 :/BIT1 ~ :} = 0x08;case = 0xBIF1;case = 0x08;case = 0xBIF1;case = 0xBIF1;case = 0x00;case = 0xBIF1; case = 0xBIF1;case = 0x00;case = 0xBIF1 //ALTcolor { if (SW3 < 4) { SW3++; } else { SW3 = 1; } P3IFG &=~BIT3; } break; case 0x0A: //pin4 break; case 0x0C: //pin5 break; case 0x0E: //pin6 break; case 0x10: //pin7 break ;} } #pragma vector=Timer1_A0_vector __interrupt void Timer1_A0_ISR (void) { if (currColor == blue) { currColor =green; } 否则(currColor =green) { currColor =RED; } 否则(currColor =RED) { currColor =blue; }