Hallo Leute, ich habe ein (für mich) mächtiges Problem. Ich soll das aufleuchten einer LED mit einer pseudozufälligen Position (0..15) erzeugen. Der Ansatz wäre hier über ein rückgekoppeltes Schieberegister (mein Ansatz wäre über rol) zu machen. Also linksschieben in einem 16 bit Register (und die 12 höchsten Bits löschen, dann erhalte ich die Zahlenwerte 0..15). Nach dem Linksschieben Abfrage der Bit Nr. 1 und 15 (nicht 0 u. 14). Bei gleichheit der beiden Bit das Bit 0 setzen. Bei n=15 ergeben die Abgriffe k1=14 und k2=0). Wie kann ich das lösen? Unten könnt ihe mein altes Programm sehen, in dem die einzelnen LED's von links nach recht laufen. Vielen Dank für eure Hilfe all_out equ 0ffffh ; Steuerwort für Ausgaberichtung t2iniw equ 1000$0010b ; T2: Timer, f_z = 1,25kHz, rückwärts, Stop tkonst equ 10000000/1600-1 ; Zählwert für 10 ms: 10E7 ns / 1600 ns - 1 ;tkonst equ startbk equ 0010$0000$0010$0000b ; Startbitkombination zwr equ 14 ; Bit ist zu weit nach rechts geschoben zwl equ 8 ; Bit ist zu weit nach links geschoben fang_asm section code 'ncode' ; Programm: fangbi proc interrupt reset=0 ; Generierung des Starteinsprunges, !!!!!!! DIES UNTER KEINEN UMSTAENDEN VERAENDERN !!!!!! start: or syscon,#3eH ; 1 Waits, !!!!!!! DIES UNTER KEINEN UMSTAENDEN VERAENDERN !!!!!! diswdt ; Watchdog aus, !!!!!!!! DIES UNTER KEINEN UMSTAENDEN VERAENDERN !!!!!!! mov dp2,#all_out mov t2con,#t2iniw mov r4,#startbk mov v1,r4 ; nur zum Testen ; Rechtsschiebe-Schleife: loopr1: ror r4,#1 loopr: ror r4,#1 ; jb r4.zwr,loopl1 ; wenn zu weit rechts, zur Linksschiebe-Schleife mov p2,r4 mov rl2,p5 ; Eingabe N calla cc_nz verzoe ; Aufruf des Unterprogramms jmpr cc_uc,loopr ; Linksschiebe-Schleife: loopl1: rol r4,#1 loopl: rol r4,#1 ;jb r4.zwl,loopr1 mov p2,r4 mov rl2,p5 cmp p5,#0 calla cc_nz verzoe ; Aufruf des Unterprogramms jmpr cc_uc,loopl fangbi endp ; hier endet Prozedur fangbi verzoe proc ; hier fängt Prozedur verzoe an push r4 mov rl4,p5 tloopo1: mov t2,#tkonst bclr t2ir ; Fertigmeldungrücksetzen bset t2r ; Zählfreigabe Timer T2 tloopi1: jnb t2ir,tloopi1 ; auf T2-Null-Unterschreitung warten subb rl4,#1 jmpr cc_nz,tloopo1 bclr t2r ; Zählsperre Timer T2, stoppen bclr t2ir ; Interrupt-Meldung T2 löschen pop r4 ret verzoe endp ; hier endet Prozedur verzoe fang_asm ends
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.