Hallo,
ich möchte eine Enigma, vorerst mit nur einer Walze, auf einem MEGA32 programmieren. Das ganze funktioniert auch schon, bis auf eine Kleinigkeit: Wenn ich ein "a" irgendwo in den zu verschlüsselnden Text schreibe, passiert irgendwo ein Fehler, d.h. der verschlüsselte und anschließend entschlüßelte Text stimmt an dieser Stelle nicht. Nach einiger Fehlersuche komme ich einfach nicht mehr weiter, wahrscheinlich ist es nur ein Leichtsinnsfehler, aber ich komme nicht drauf... Evtl. könnte jemand von euch ja mal drübersehen und mir helfen.
Hier der Code:
Vielen Dank & GrußCode:$regfile = "m32def.dat" $crystal = 16000000 $framesize = 80 $hwstack = 80 $swstack = 80 Declare Sub Init_system() Declare Function Tastatur() As Byte Declare Sub Walze_drehen() Declare Function Codieren(byval Codieren_in As Byte) As Byte Declare Function Reflektor(byval Reflektor_in As Byte) As Byte Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5 Config Lcdbus = 4 Initlcd Cls Cursor Off Noblink Deflcdchar 0 , 32 , 32 , 1 , 18 , 20 , 24 , 16 , 32 Dim Walze_1(26) As Byte Dim Walze_1_inv(26) As Byte Dim Pointer_1 As Byte Dim Ar_out(4) As Byte Dim Ar_out_old(4) As Byte Dim Tmp As Byte Dim I As Byte Dim _out As Byte 'ascii-wert (skaliert auf 1-26) Dim _in As Byte 'ascii-wert (skaliert auf 1-26) Const _a = 1 Const _b = 2 Const _c = 3 Const _d = 4 Const _e = 5 Const _f = 6 Const _g = 7 Const _h = 8 Const _i = 9 Const _j = 10 Const _k = 11 Const _l = 12 Const _m = 13 Const _n = 14 Const _o = 15 Const _p = 16 Const _q = 17 Const _r = 18 Const _s = 19 Const _t = 20 Const _u = 21 Const _v = 22 Const _w = 23 Const _x = 24 Const _y = 25 Const _z = 26 Call Init_system() Do Ar_out(1) = Tastatur() Ar_out(2) = Tastatur() Ar_out(3) = Tastatur() Ar_out(4) = Tastatur() Locate 1 , 1 Lcd "AUSGANGSSTELLUNG" Locate 2 , 1 Lcd Ar_out(1) ; ":" ; Ar_out(2) ; ":" ; Ar_out(3) ; ":" ; Ar_out(4) ; " " Locate 2 , 16 Lcd " " Waitms 500 Cls Locate 1 , 1 Lcd "CHIFFRIERT:" Locate 2 , 1 Lcd "DECHIFFRIERT:" Waitms 500 Cls Ar_out_old(1) = Ar_out(1) Ar_out_old(2) = Ar_out(2) Ar_out_old(3) = Ar_out(3) Ar_out_old(4) = Ar_out(4) Call Init_system() Ar_out(1) = Codieren(ar_out(1)) Ar_out(2) = Codieren(ar_out(2)) Ar_out(3) = Codieren(ar_out(3)) Ar_out(4) = Codieren(ar_out(4)) Locate 1 , 1 Lcd Ar_out(1) ; ":" ; Ar_out(2) ; ":" ; Ar_out(3) ; ":" ; Ar_out(4) ; " " Call Init_system() Ar_out(1) = Codieren(ar_out(1)) Ar_out(2) = Codieren(ar_out(2)) Ar_out(3) = Codieren(ar_out(3)) Ar_out(4) = Codieren(ar_out(4)) Locate 2 , 1 Lcd Ar_out(1) ; ":" ; Ar_out(2) ; ":" ; Ar_out(3) ; ":" ; Ar_out(4) ; " " If Ar_out_old(1) = Ar_out(1) And Ar_out_old(2) = Ar_out(2) And Ar_out_old(3) = Ar_out(3) And Ar_out_old(4) = Ar_out(4) Then Locate 2 , 16 Lcd Chr(0) Else Locate 2 , 16 Lcd " " End If Waitms 500 Loop Sub Walze_drehen() For Pointer_1 = 1 To 26 Tmp = Pointer_1 + 1 If Tmp = 27 Then Tmp = 1 Walze_1(pointer_1) = Walze_1(tmp) Walze_1_inv(walze_1(pointer_1)) = Pointer_1 Next Pointer_1 End Sub Function Tastatur() As Byte Tastatur = Rnd(25) + 1 End Function Function Codieren(byval Codieren_in As Byte) As Byte Tmp = Walze_1(codieren_in) Tmp = Reflektor(tmp) Codieren = Walze_1_inv(tmp) Call Walze_drehen() End Function Function Reflektor(byval Reflektor_in As Byte) As Byte If Reflektor_in.0 = 0 Then Reflektor = Reflektor_in + 1 If Reflektor = 27 Then Reflektor = 0 Else Reflektor = Reflektor_in - 1 If Reflektor = 0 Then Reflektor = 26 End If End Function Sub Init_system() Walze_1(1) = 23 Walze_1(2) = 15 Walze_1(3) = 9 Walze_1(4) = 24 Walze_1(5) = 7 Walze_1(6) = 1 Walze_1(7) = 22 Walze_1(8) = 17 Walze_1(9) = 12 Walze_1(10) = 13 Walze_1(11) = 26 Walze_1(12) = 2 Walze_1(13) = 5 Walze_1(14) = 21 Walze_1(15) = 14 Walze_1(16) = 25 Walze_1(17) = 11 Walze_1(18) = 6 Walze_1(19) = 16 Walze_1(20) = 8 Walze_1(21) = 3 Walze_1(22) = 18 Walze_1(23) = 4 Walze_1(24) = 19 Walze_1(25) = 10 Walze_1(26) = 20 Walze_1_inv(23) = 1 Walze_1_inv(15) = 2 Walze_1_inv(9) = 3 Walze_1_inv(24) = 4 Walze_1_inv(7) = 5 Walze_1_inv(1) = 6 Walze_1_inv(22) = 7 Walze_1_inv(17) = 8 Walze_1_inv(12) = 9 Walze_1_inv(13) = 10 Walze_1_inv(26) = 11 Walze_1_inv(2) = 12 Walze_1_inv(5) = 13 Walze_1_inv(21) = 14 Walze_1_inv(14) = 15 Walze_1_inv(25) = 16 Walze_1_inv(11) = 17 Walze_1_inv(6) = 18 Walze_1_inv(16) = 19 Walze_1_inv(8) = 20 Walze_1_inv(3) = 21 Walze_1_inv(18) = 22 Walze_1_inv(4) = 23 Walze_1_inv(19) = 24 Walze_1_inv(10) = 25 Walze_1_inv(20) = 26 End Sub End
Chris







Zitieren

Lesezeichen