micro-dev.de Alles zum Mikrocontroller im Netz. Arduino, Raspberry Pi und Co.
Schnell ein Byte umdrehen - Druckversion

+- micro-dev.de Alles zum Mikrocontroller im Netz. Arduino, Raspberry Pi und Co. (https://micro-dev.de)
+-- Forum: Programmierung (https://micro-dev.de/forumdisplay.php?fid=33)
+--- Forum: Assembler (https://micro-dev.de/forumdisplay.php?fid=36)
+---- Forum: Z80-Assembler (https://micro-dev.de/forumdisplay.php?fid=45)
+---- Thema: Schnell ein Byte umdrehen (/showthread.php?tid=401)



Schnell ein Byte umdrehen - Unilein - 15.05.2021

Hallo zusammen,

nach längerer Abstinenz mal wieder ein kleines Stückchen Assembler. Aktuell arbeite ich an einer SPI-Schnittstelle für meinen Z80Ardu (SPI kennt man ja von der AVR-Reihe und anderen Microcontrollern).

Das SPI-Protokoll benötigt, wenn ich das richtig interpretiere, auf der MOSI-Leitung (Master Out / Slave In) die Daten mit dem höchstwertigen Bit (MSB) zuerst. Wenn man aber Parallel-zu_Seriell Schieberegister wie das 74HC165 nutzt, kommt zuerst das niederwertigste Bit zuerst auf dem seriellen Ausgang an.

Also dreht man das Byte, bevor man es sendet, einfach um:

 
; Bit im Register A drehen
; 8 Bytes / 206 Takte
 
     ld b,8
     ld l,a
loop:
     rl l
     rra
     djnz loop
 
 

Das geht allerdings auch erheblich schneller. Zwar ist das Programm länger, aber für die höhere Geschwindigkeit ist das durchaus lohnenswert:

 
; 17 Byte, 66 Takte
                   ld l,a    ; a = 76543210
                   rlca
                   rlca      ; a = 54321076
                   xor l
                   and 0xAA
                   xor l     ; a = 56341270
                   ld l,a
                   rlca
                   rlca
                   rlca      ; a = 41270563
                   rrc l     ; l = 05634127
                   xor l
                   and 0x66
                   xor l     ; a = 01234567