Also ich teste gerade an der Hardware, und bei mir funktionierts nicht immer! Schon der zweite "zufällig" generierte Text "16:9:9:3" wird zu "16:9:15:18" ! Ich weiß aber nicht, worans liegt...
Gruß
Chris
Also ich teste gerade an der Hardware, und bei mir funktionierts nicht immer! Schon der zweite "zufällig" generierte Text "16:9:9:3" wird zu "16:9:15:18" ! Ich weiß aber nicht, worans liegt...
Gruß
Chris
Hier mein Testcode:
Code:$regfile = "m32def.dat" $crystal = 16000000 $framesize = 80 $hwstack = 80 $swstack = 80 $sim 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) ; " " Print "Ausg: " ; 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) ; " " Print "Chiff: " ; 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) ; " " Print "Dechiff: " ; Ar_out(1) ; ":" ; Ar_out(2) ; ":" ; Ar_out(3) ; ":" ; Ar_out(4) ; " " Print 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() Local Cell_1 As Byte Cell_1 = Walze_1(1) For Pointer_1 = 1 To 26 Tmp = Pointer_1 + 1 If Tmp = 27 Then Walze_1(pointer_1) = Cell_1 Else Walze_1(pointer_1) = Walze_1(tmp) End If Walze_1_inv(walze_1(pointer_1)) = Pointer_1 Next Pointer_1 End Sub ') Sub Walze_drehen() Local Tmp2 As Byte Tmp2 = Walze_1(1) For Pointer_1 = 1 To 26 Tmp = Pointer_1 + 1 If Tmp = 27 Then Tmp = 1 Walze_1(pointer_1) = Walze_1(tmp) If Pointer_1 = 26 Then Walze_1(26) = Tmp2 End If 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 = 1 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
Hm, also dein Code funktioniert bei mir auch! Mittlerweile habe ich über 5000 Durchläufe ohne auch nur einen FehlerVielen vielen Dank
ABER: Wo ist der Unterschied?
Hier ist mein momentaner Code (funktioniert nicht):
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 Tmp2 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 1000 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 1000 Loop Sub Walze_drehen() Tmp2 = Walze_1(1) For Pointer_1 = 1 To 26 Tmp = Pointer_1 + 1 If Tmp = 27 Then Tmp = 1 Walze_1(pointer_1) = Walze_1(tmp) If Pointer_1 = 26 Then Walze_1(26) = Tmp2 End If 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_in = Reflektor_in + 1 If Reflektor_in = 27 Then Reflektor_in = 1 Else Reflektor_in = Reflektor_in - 1 If Reflektor_in = 0 Then Reflektor_in = 26 End If Reflektor = Reflektor_in 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
Geändert von Che Guevara (13.09.2011 um 12:25 Uhr)
Ja, auf echter HardwareATMEGA32 aufm RN-Control. Funktioniert einwandfrei
Nur mein Code funktioniert nicht, obwohls fast der gleiche ist?! ...
Gruß
Chris
Oh, jetzt sehe ich es auch... Danke!
Dann werde ich jetzt mal am Projekt weiterbasteln![]()
Vielen Dank & Gruß
Chris
Lesezeichen