+/** Counter for the software PWM */\r
+static volatile uint8_t SoftPWM_Count;\r
+\r
+/** Duty cycle for the first software PWM channel */\r
+static volatile uint8_t SoftPWM_Channel1_Duty;\r
+\r
+/** Duty cycle for the second software PWM channel */\r
+static volatile uint8_t SoftPWM_Channel2_Duty;\r
+\r
+/** Duty cycle for the third software PWM channel */\r
+static volatile uint8_t SoftPWM_Channel3_Duty;\r
+\r
+\r
+/** Interrupt handler for managing the software PWM channels for the LEDs */\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
+{\r
+ uint8_t LEDMask = LEDS_ALL_LEDS;\r
+\r
+ if (++SoftPWM_Count == 0x1F)\r
+ SoftPWM_Count = 0;\r
+\r
+ if (SoftPWM_Count >= SoftPWM_Channel1_Duty)\r
+ LEDMask &= ~LEDS_LED1;\r
+\r
+ if (SoftPWM_Count >= SoftPWM_Channel2_Duty)\r
+ LEDMask &= ~LEDS_LED2;\r
+\r
+ if (SoftPWM_Count >= SoftPWM_Channel3_Duty)\r
+ LEDMask &= ~LEDS_LED3;\r
+ \r
+ LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r