use loop for PWM output

This commit is contained in:
Olaf Rempel 2006-05-27 16:51:19 +02:00
parent 85264166c8
commit 02b6e08279
1 changed files with 9 additions and 25 deletions

View File

@ -51,44 +51,28 @@ ISR(SIG_OVERFLOW1)
/*
* Timer 1 Compare Match (every 40us)
* - schedule next compare match in 40us
* - set PWM Outputs (PORTB)
*/
ISR(SIG_OUTPUT_COMPARE1A)
{
OCR1A = pwm_load;
pwm_load += TIMER1_STEP;
uint8_t *tmp = chan;
uint8_t out = PORTB;
cnt--;
uint8_t out = PORTB;
if (cnt == 0xFF)
out = 0x00;
if (*tmp++ >= cnt)
out |= (1<<PORTB0);
uint8_t i, shift = 1;
uint8_t *tmp = chan;
if (*tmp++ >= cnt)
out |= (1<<PORTB1);
if (*tmp++ >= cnt)
out |= (1<<PORTB2);
if (*tmp++ >= cnt)
out |= (1<<PORTB3);
if (*tmp++ >= cnt)
out |= (1<<PORTB4);
if (*tmp++ >= cnt)
out |= (1<<PORTB5);
if (*tmp++ >= cnt)
out |= (1<<PORTB6);
if (*tmp++ >= cnt)
out |= (1<<PORTB7);
for (i = 0; i < 8; i++) {
if (*tmp++ >= cnt)
out |= shift;
shift <<= 1;
}
PORTB = out;
}