[an error occurred while processing this directive]
|
UARTrxISR:
push tmp ;Сохраняем регистр, не сохраняем статус - он не затронется
sbis UCSRB,RXB8 ;Смотрим, что пришло - адрес или данные
rjmp set_data
;set_addr:
in tmp,UDR ;Читаем пришедший адрес из UART, сбрасываем флаг приема
sts PWMaddrL,tmp ;Сохраняем его в ОЗУ
pop tmp ;Восстанавливаем регистр
reti ;19 тактов (0.95 мкс) вместе со входом при приеме номера канала
set_data:
push xl ;Сохраняем регистр
push xh ;Сохраняем регистр
in tmp,UDR ;Читаем пришедшую уставку из UART, сбрасываем флаг приема
lds xl,PWMaddrL ;Загружаем LSB указателя массива ШИМ
ldi xh,PWMaddrH ;Загружаем MSB указателя массива ШИМ
st x,tmp ;Записываем уставку в нужный канал ШИМ
pop xh ;Восстанавливаем регистр
pop xl ;Восстанавливаем регистр
pop tmp ;Восстанавливаем регистр
reti ;31 такт (1.55 мкс) вместе со входом при приеме уставки канала
Написано в лоб и со всеми строгостями, можно и существенно укоротить.
Ответ будет?