www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 80c166 Assembler: Erzeugung von Pseudzahlen


Autor: Assembler-honk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.