HomeProjekteMicroprozessorenWürfelplatine mit Assembler 

Würfelplatine

Weitersagen:

Hier werden nach und nach die Programme der Würfelplatine aus der Gruppe Microcontroller für Kids der EBG aufgelistet und beschrieben. Im Moment aber verweise ich noch auf die Website des „Projektleiters”, Hartwig Harm: deutsch mydarc.de/dh2mic/mikroprozessor/

Tongenerator Ton1.asm

Das Programm erzeugt einen Ton (ca. 1,5 kHz)

AVR Assembler-Code: (Klicke auf Befehle, um mehr über sie zu erfahren)
.include "tn13def.inc"

.org $0000
  rjmp Start     ; Jump vom "Reset"-Vektor zum Programmanfang

.org $000A

Start:
  sbi DDRB, 0    ; PB0 ist Ausgang
  cbi PORTB, 0   ; Low Pegel an PB0  Piezo piepst

  rcall Wait     ; halbe Dauer des 0-Pegels
  rcall Wait

  sbi PORTB, 0   ; High Pegel an PB0  Piezo wieder leise

  rcall Wait
  rcall Wait

  rjmp Start     ; eine Schwingung ist beendet. Nächste bitte!


Wait:
  ldi r18, 40

Wait1:
  dec r18
  brne Wait1     ; Sprung, wenn r18 noch nicht Null ist
  ret

Morsepiepser Ton2.asm

Das Programm morst die Zeichen 1, 6 und 4 mit ca. 1,5kHz

AVR Assembler-Code: (Klicke auf Befehle, um mehr über sie zu erfahren)

.include "tn13def.inc"

; Langer Ton (Strich) ist 3x so lang wie kurzer Ton (Punkt)

; Nullen stehen für Punkte, Einsen für Striche
; erst alles nach dem Startbit (erste Eins) wird ausgegeben
.equ eins  = 0b00101111  ; 1x kurz, 4x lang
.equ zwei  = 0b00100111  ; 2x kurz, 3x lang
.equ drei  = 0b00100011  ; 3x kurz, 2x lang
.equ vier  = 0b00100001  ; 4x kurz, 1x lang
.equ fuenf = 0b00100000  ; 5x kurz
.equ sechs = 0b00110000  ; 1x lang, 4x kurz

.org $0000
  rjmp Start             ; Jump vom "Reset"-Vektor zum Programmanfang

.org $000A

Start:
  ldi r23, eins          ; schreibe das Bitmuster für eine Eins ins Register r23
  rcall Auslesen

  ldi r23, sechs
  rcall Auslesen

  ldi r23, vier
  rcall Auslesen

  rjmp Start             ; Endlosschleife

Auslesen:
  ldi r24, 8

Auslesen1:
  dec r24
  rol r23                ; Schiebt alle Bits eine Stelle nach links, 7tes Bit ins Carry Flag
  brcc Auslesen1         ; wiederhole, wenn eine Null im Carry Flag steht

Auslesen2:               ; wird aufgerufen, nachdem Startbit gesetzt
  sbrc r23, 7            ; nächsten Befehl überspringen, wenn 7tes Bit eine Null
  rcall DoppelTon        ; wird nur bei langem Ton aufgerufen: Doppelton + Ton = 3x-Ton
  rcall Ton
  rol r23

  rcall Pause            ; Pause zwischen Punkten und Strichen

  dec r24
  brne Auslesen2

  rcall LangePause       ; Pause zwischen Morsezeichen
  ret

DoppelTon:
  rcall Ton              ; Nach Aufruf läuft er nochmal in Ton hinein  Doppelton

Ton:
  ldi r22, 120

Schwingung:
  sbi DDRB, 0            ; PB0 ist Ausgang
  cbi PORTB, 0           ; Low Pegel an PB0
  rcall Wait             ; halbe Dauer des 0-Pegels
  sbi PORTB, 0           ; High Pegel an PB0
  rcall Wait             ; Dauer abwarten (wie oben)

  ; eine Schwingung ist beendet. Nächste bitte!
  dec r22                ; Anzahl der Schwingungen wird dekrementiert
  brne Schwingung        ; wenn Schwingungen noch nicht null, noch eine

  ret                    ; zurück zum Hauptprogramm

LangePause:              ; 7x so lang wie Pause (6x + hineinlaufen)
  rcall Pause
  rcall Pause
  rcall Pause
  rcall Pause
  rcall Pause
  rcall Pause

Pause:
  ldi r22, 240

Pause1:
  rcall Wait
  dec r22
  brne Pause1
  ret

Wait:
  ldi r18, 90            ; mit 90 ist der Ton nahe an der Resonanz
                         ; 80 und 100 sind deutlich leiser
Wait1:
  dec r18
  brne Wait1             ; Sprung, wenn r18 noch nicht Null ist
  ret
Teile diese Seite!    RSS-Feed abonnieren:
RSS