[an error occurred while processing this directive]
|
Сразу скажу, что для авра последний раз писал что-то года три назад, детали подзабылись.
Используем список изменений состояний.
inc pwm
breq cycle_startcp pwm, r0
sbrc sreg, z
out porta, r1
cp pwm, r2
sbrc sreg, z
out portb, r3
cp pwm, r4
sbrc sreg, z
out portc, r5cp pwm, r0
brne m0
ld r0, x+
ld r1, x+
m0:
cp pwm, r2
brne m1
ld r2, x+
ld r3, x+
m1:
cp pwm, r4
brne m2
ld r4, x+
ld r5, x+
m2:
; return from interruptcycle_start:
mov xl, table
ld r0, x+
out porta, r0
ld r0, x+
out portb, r0
ld r0, x+
out portc, r0ld r0, x+
ld r1, x+
ld r2, x+
ld r3, x+
ld r4, x+
ld r5, x+
; return from interrupt
За период шима можно спокойно построить новую таблицу и заменить указатель.
Потребуется еще 24*2 байт ОЗУ для поддержки упорядоченного списка счетчиков.