Пример для AVR
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Bill 27 июля 2004 г. 15:15
В ответ на: Прошу прощения, пропустил :) Но упростить все равно можно. отправлено Bill 27 июля 2004 г. 15:07


1 char bitrvrs(char v)
2 {
3 v = ((v >> 1) & 0x55) | ((v << 1) & ~0x55); // swap odd and even bits
\ __nearfunc char bitrvrs(char);
\ bitrvrs:
\ 00000000 2F10 MOV R17,R16
\ 00000002 9516 LSR R17
\ 00000004 7515 ANDI R17,0x55
\ 00000006 0F00 LSL R16
\ 00000008 7A0A ANDI R16,0xAA
\ 0000000A 2B01 OR R16,R17
4 v = ((v >> 2) & 0x33) | ((v << 2) & ~0x33); // swap consecutive pairs
\ 0000000C 2F10 MOV R17,R16
\ 0000000E 9516 LSR R17
\ 00000010 9516 LSR R17
\ 00000012 7313 ANDI R17,0x33
\ 00000014 0F00 LSL R16
\ 00000016 0F00 LSL R16
\ 00000018 7C0C ANDI R16,0xCC
\ 0000001A 2B01 OR R16,R17
5 v = ((v >> 4) & 0x0F) | ((v << 4) & ~0x0F); // swap nibbles
6 return v;
\ 0000001C 2F10 MOV R17,R16
\ 0000001E 9512 SWAP R17
\ 00000020 701F ANDI R17,0x0F
\ 00000022 9502 SWAP R16
\ 00000024 7F00 ANDI R16,0xF0
\ 00000026 2B01 OR R16,R17
\ 00000028 9508 RET
7 }

42 bytes of CODE memory


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru