INFO - FAQ - CC2-Forum - CCPro-Forum |
|
' =========================================================================== ' 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 "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 |