Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Demoprogramm: Mittelwertbildung mittels Buffer Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 9.10.2024 19:56)
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini Station
' ===========================================================================
' Demoprogramm: Mittelwertbildung mittels Buffer
' In OCBASIC 1.12a_e1 von Dietmar Harlos am 9. Oktober 2024
' ===========================================================================

' Dieses Beispielprogramm demonstriert Zeiger, Felder und Arrays auf der OM.

' Es basiert auf einem Programm von Laika in unserem Forum:

' http://ccintern.dharlos.de/forum/lesen.php?eintrag=18010

' --- Definitionen ----------------------------------------------------------

'INCLUDE "omac.def"               'Definitionen für Open-Macro
INCLUDE "omax.def"               'Definitionen für Open-Maxi

DIM a,b,c,i,j BYTE               'temporäre Bytevariablen

DIM a0,a1,a2,a3,a4,a5,a6,a7 WORD 'WORD-Feld mit 8 Elementen

DIM ^p WORD                      'Zeiger auf ein WORD im USER-RAM
DIM ^t WORD                      'Zeiger auf ein WORD im USER-RAM

DIM w WORD                       'eine WORD-Variable

' --- Hauptprogramm ---------------------------------------------------------

PrintSpc=ON    'Bei PRINT dezimale Zahlen mit führendem Leerzeichen ausgeben
End2Host=ON    'Bei Programmende (siehe END) gleich in den Host-Modus wechseln

' Titel:

PRINT
PRINT "Mittelwertbildung mittels Buffer"
PRINT "================================"

' Beispieldaten:

a0=1000:a1=1000:a2=1000:a3=1000:a4=1000:a5=1000:a6=1000:a7=1000

w=1023

' Das Hauptprogramm:

p=^a0          'Initialisieren des Zeigers

?"Der Mittelwert beträgt"mittelwert(w)"."

feldausgeben   'Zum Debugging Feld ausgeben

RANDOMIZE 0    'Zufallszahlengenerator initialisieren

FOR i=1 TO 9
  w=((RAND SHR 1)+16384) MOD 1024  'Zufallsdaten
  mittelwert(w)
  feldausgeben
NEXT i

?"Der Mittelwert beträgt"mittelwert(w)"."
feldausgeben

?:?"Programmende."
END            'Zurück in den Hostmodus. Neustart mit RETURN-Taste.

' --- Subroutinen und Funktionen --------------------------------------------

' Einen Meßwert in den Puffer einfügen und den Mittelwert berechnen.

' Übergabe: Zeiger p auf den freien Eintrag im Feld und Meßwert

' Rückgabe: Mittelwert über alle Einträge des Feldes

FUNCTION mittelwert(w)

  IF p > ^a7 THEN   'Ist der Ringpuffer voll?
    p = ^a0         'Dann auf ersten Eintrag.
  END IF

  @p = w            'Wert im Ringpuffer speichern

  ADD p,1           'Zeiger um eins erhöhen (inkrementieren)

  RETURN (a0+a1+a2+a3+a4+a5+a6+a7)/8  'Mittelwert zurückliefern

END FUNCTION

' Feld auf der Seriellen Schnittstelle ausgeben

PROCEDURE feldausgeben
  ?"Feld ausgeben:";
  t=^a0
  FOR a=1 TO 8
    ?@t;
    ADD t,1
  NEXT a
  ?
  ?"Zeiger steht auf"p-^a0"."
  RETURN
END PROCEDURE

' --- Programmende ---------------------------------------------------------


Passender Link: Infosite zu den OM-Mikrocontrollern

Meine Homepage: http://ccintern.dharlos.de

 Antwort schreiben

Bisherige Antworten:

Re: Demoprogramm: Mittelwertbildung mittels Buffer (von Laika - 17.10.2024 10:02)