С помощью ма-а-а-ааленькой таблички в ЕПРОМ.
Кстати с ЕПРОМовской таблицей на 256 - самый быстрый вaриант, реверса бит, имхо.
Ну совсем без таблички туго :)
А тут как говорится, "немножко беременная".
Таблица зашивается в ЕПРОМ программатором при зашивке основной программы (эта фраза лишняя, все знают как :) )
Не ругайте. Обещаю больше не касаться этой темы. Это просто послеобеденный пароксизьм :(
//////////////////////////////
PUBLIC Reverse10
;--- (R16 - INPUT-OUTPUT)
////////////
RSEG CODE
////////////
Reverse10:
LDI R17,16 ; 1
MUL R16, R17 ; 2
OUT EEAR, R1 ; 3
SBI EECR, EERE ; 4
IN R16, EEDR ; 5
SWAP R0 ; 6
OUT EEAR, R0 ; 7
SBI EECR, EERE ; 8
IN R17, EEDR ; 9
SWAP R17 ; 10
OR R16, R17 ; 11 end!
;---------------------------
ret ; output to C
;---------------------------
////////////
RSEG EEPROM_I
////////////
DB 0x00, 0x08, 0x04, 0x0c
DB 0x02, 0x0a, 0x06, 0x0e
DB 0x01, 0x09, 0x05, 0x0d
DB 0x03, 0x0b, 0x07, 0x0f
/////////////////////////////