Hallo PicNick,
ich habe Deinen sehr interessanten Code mal in den Bascom Simulator eingepasst:
Der Code shiftet nicht über die Bytegrenzen hinweg. Einfach mal im Simulator durch Umschaltung des grünen Kreies für PinB.0 mit 10111.. durchspielen.Code:$regfile = "m8def.dat" $framesize = 32 'Stack $swstack = 32 $hwstack = 64 Dim Array(5) As Byte Dim Dummy(4) As Byte Dim Pointer As Word At Dummy(1) Overlay Dim Bits_ As Byte At Dummy(4) Overlay Dim I As Byte , J As Byte Bits_ = 0 Pointer = Varptr(array(1)) For I = 1 To 40 Gosub Shifter 'hier mit Breakpoint PinB.0 auf 0/1 umschalten For J = 5 To 1 Step -1 Print Bin(array(j)); Next Print Next End Shifter: Loadadr Pointer , Z LDD XL , Z + 0 'low pointer LDD XH , Z + 1 'hig pointer LD R24, X ' aktuelles array-byte CLC ' clear carry SBIC PINB, 0 ' inp-pin Input -pin = 0/1 ? SEC ' set carry ROL r24 ' bit reinschieben ST X, R24 'aktuelles byte speichern LDD R24, Z + 3 ' (Bitcounter) INC R24 ' bitcounter+1 ANDI R24 , 7 ' es gilt nur 0-7 Brne _next_bit '_next_byte: ADIW XL, 1 'pointer+1 STD Z + 0, XL ' neuen low pointer speichern STD Z + 1, XH 'neuen hig pointer speichern _next_bit: STD Z + 3, r24 'Bitcounter in Bits_ speichern Return
Ich denke, beim Kopieren ist der Sprung zu _next_byte untergegangen.
Gruß
Tomas







Zitieren

Lesezeichen