Projekt BASIC Beispiele |
AVR-ChipBASIC: BASIC-Referenz
V0.72 (c) 2006/2007 Jörg Wolfram 1 LizenzDas Programm unterliegt der GPL (GNU General Public Licence) Version 3 oder höher, jede Nutzung der Software/Informationen nonkonform zur GPL oder ausserhalb des Geltungsbereiches der GPL ist untersagt! Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, auch ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK.2 AllgemeinesDa es reichlich Schlüsselwörter gibt, kann es sein, dass diese Referenz anfangs noch unvollständig ist. Viele Hinweise findet man auch in den Beispielprogrammen.Jedes Programm besteht aus maximal 20 Programmzeilen (1-20). Alle Schlüsselwörter ausser Funtionen können bis auf zwei Zeichen abgekürzt werden, beim Laden werden abgekürzte Schlüsselwörter mit 2 Zeichen dargestellt. Nach jedem Schlüsselwort muss ein Leerzeichen stehen. Viele Befehle blenden nicht benutzte Bits bei den Parametern aus (z.B. COLOR) oder begrenzen auf den gültigen Wertebereich (z.B. PLOT). Achtung! Aus Kompatibilitätsgründen zur kommenden MEGA32-Version haben sich einige Dinge wie zum Beispiel Farbzuordnung und Speicherzugriff geändert. 3 Zahlen, Variablen und FunktionenAVR-ChipBASIC kennt nur einen Datentyp, und das sind 16Bit Integerzahlen. Dazu gibt es 26 Variablen (A-Z) und ein Array mit 32 Elementen (@), dazu aber später mehr. Konstanten können sowohl in Dezimalform als auch in Hexadezimalform eingegeben werden, wobei bei letzterer keine negativen Werte erlaubt sind. Hexadezimalzahlen beginnen mit $. Folgende Operationen sind erlaubt:
Zusätzlich zu den normalen Variablen gibt es noch die Arrayvariable @. Die Indices 0 bis 31 sprechen die 32 Array-Elemente in Wortbreite an. Dabei entsprechen die Indices 0-25 den Variablen A-Z. Die Indices 128 bis 191 sprechen dasselbe Array mit 64 Elementen in Bytebreite an, wobei das LOW-Byte zuerste gespeichert ist. 4 Schlüsselwörter4.1 WertzuweisungWertzuweisungen beginnen nicht mit einem Schlüsselwort, sondern mit einem Variablennamen oder Array-Ausdruck gefolgt von einem Gleichheitszeichen und einem Ausdruck. Beispiele:
4.1.1 LIMIT v,min,maxDer Wert der Variable v wird auf den Wertebereich min..max begrenzt. Beispiele:
4.2 Programmsteuerung4.2.1 FASTMit dem FAST-Befehl wird die Bildschirmdarstellung abgeschaltet. Synchronsignale werden weiterhin generiert.4.2.2 SLOWMit dem SLOW-Befehl wird die Bildschirmdarstellung wieder eingeschaltet.4.2.3 BREAKSetzt einen Breakpoint und ruft den Monitor auf. Wird vom MEGA16 nicht unterstützt.4.2.4 ENDMit dem END-Befehl wird das Programm an der aktuellen Stelle beendet. Das gleiche geschieht auch, wenn die letzte Programmzeile abgearbeitet ist.4.2.5 GOTOMit dem GOTO-Befehl kann die Programmabarbeitung mit einer anderen Zeile fortgesetzt werden. Argument ist ein beliebiger Ausdruck. Beispiele:
4.2.6 IF - THENDie bedingte Anweisung besteht aus IF gefolgt von einem Ausdruck. Ist das Ergebnis des Ausdrucks Null, wird zum Anfang der nächsten Zeile gesprungen, andernfalls wird die Zeile weiter abgearbeitet. Das THEN kan auch weggelassen werden. Beispiele:
4.2.7 FOR - NEXTBei der Schleifenabarbeitung gibt es nur die Grundform FOR A=1 TO C ohne die Angabe der Schrittweite. Da der Stack auf 9 Einträge begrenzt ist, lassen sich nur 9 Schleifen bzw. Unterprogrammaufrufe schachteln. Beispiel:
4.2.8 CALL - RETURNIm Gegensatz zu den meisten BASIC-Dialekten heisst GOSUB hier CALL. Durch das verwendete Prinzip der Abkürzungen dürfen keine zwei Schlüsselwörter mit denselben beiden Buchstaben beginnen und GOTO beginnt schon mit "GO". CALL Expr ruft das Unterprogramm in der durch den Ausdruck definierten Zeile auf, mit RETURN wird wieder zurückgesprungen. Da der Stack auf 9 Einträge begrenzt ist, lassen sich nur insgesamt 9 Schleifen bzw. Unterprogrammaufrufe schachteln.4.3 Ausgabe4.3.1 CLSMit dem CLS-Befehl wird der Bildschirm gelöscht. Beim Programmstart geschieht das automatisch.4.3.2 POS Y,XMit dem POS-Befehl wird der Schreibcursor an die Stelle Y,X gesetzt. Nach jedem Löschen des Bildschirms wird der Cursor auf die Position 0,0 (links oben) gesetzt4.3.3 PRINTDer PRINT-Befehl dient zur Ausgabe auf den Bildschirm oder auf die serielle/parallele Schnittstelle. Zusätzlich kann die Ausgabe noch formatiert werden.
Steht am Ende des PRINT-Befehls einer der beiden Trenner, wird kein Zeilenvorschub ausgeführt. Das Format ist ein Wert zwischen 0 und 255, wobei die Bits folgende Bedeutung haben:
4.3.4 EMITGibt durch Komma getrennte Zeichen auf den Bildschirm/Seriell/Drucker aus, je nachdem was zuletzt eingestellt war. Es werden keine Zeichen, sondern Zahlenwerte der Zeichen erwartet. Beispiel:
4.3.5 YEMITGibt durch Komma getrennte Zeichen auf den Bildschirm/Seriell/Drucker aus, je nachdem was zuletzt eingestellt war. Es werden keine Zeichen, sondern Zahlenwerte der Zeichen erwartet. Beispiel:
4.3.6 LCHAR nEs werden (am oberen Bildrand beginnend) n Zeichenzeilen um ein Zeichen nach links verschoben. Am rechten Rand rücken Leerzeichen nach. Beispiel:
4.3.7 GCHAR v,y,xErmittelt das Zeichen an der Position y,x und schreibt dieses in die Variable v. Beispiel:
4.4 PseudografikFür die Pseudografik wird jedes Zeichen in 4 "Pixel" aufgeteilt. Bei 23 Zeilen a 30 Zeichen ergibt sich so eine Arbeitsfläche von 60x46 Punkten. Die Hintergrundfarbe ist immer schwarz und die 4 Pixel eines Zeichens haben immer die gleiche Vordergrundfarbe.4.4.1 COLORMit dem COLOR-Befehl wird die Zeichenfarbe festgelegt. Diese wird bei PLOT, BOX und FBOX sowie bei der Ausgabe von großen Zeichen (Formatbit 6 gesetzt) ausgewertet. Akzeptiert werden Werte von 0 bis 7, dabei bedeutet 0=schwarz, 1...3=rot,4...6=cyan,7=weiss. Argument ist ein beliebiger Ausdruck. Beispiele:
4.4.2 PLOT Y,XMit dem PLOT-Befehl wird ein "Pixel" im Pseudografikmodus gesetzt. Dabei kann es passieren, dass benachbarte Punkte auch ihre Farbe wechseln. Beispiel:
4.4.3 DRAW Y1,X1,Y2,X2Zeichnet eine Linie vo X1,Y1 nach X2,Y2 im Pseudografikmodus. Dabei kann es passieren, dass vorhandene Punkte in Liniennähe auch ihre Farbe wechseln. Beispiel:
4.4.4 BOX Y1,X1,Y2,X2Mit dem BOX-Befehl wird ein Rechteck im Pseudografikmodus gezeichnet. Dabei kann es passieren, dass vorhandene Punkte auch ihre Farbe wechseln. Beispiel:
4.4.5 FBOX Y1,X1,Y2,X2Mit dem FBOX-Befehl wird ein gefülltes Rechteck im Pseudografikmodus gezeichnet. Dabei kann es passieren, dass vorhandene Punkte auch ihre Farbe wechseln. ist Y1=Y2 oder X1=X2 werden horizontale oder vertikale Linien gezeichnet. Beispiel:
4.4.6 LPIX nEs werden (am oberen Bildrand beginnend) n*2 Pixelzeilen um ein Pixel nach links verschoben. Bei verschiedenfarbigen Pixeln können Farbwechsel auftreten. Amrechten Rand rücken schwarze Pixel nach. Beispiel:
4.5 SpritesDie Sprites sind recht einfach "gestrickt". Sie bestehen aus nur einem Zeichen, welches aber mehrfach nebeneinander oder übereinander dargestellt wird. 4 Sprites stehen zur Verfügung. Wird ein Sprite an einer neuen Stelle angezeigt, wird es vorher an der alten Stelle gelöscht, falls es sichtbar war.4.5.1 SDEF n,t,cDefiniert ein Sprite, dabei ist n die Nummer des Sprites (1-4), t der Typ (s.u.) und c die Position des Zeichens in der Zeichentabelle. Der Typ t kann zwischen 0 und 15 liegen:
4.5.2 SSHOW n,y,xZeichnet das Sprite n an die Position Y,X. War es bereits an einer anderen Stelle gezeichnet, wird es vorher gelöscht. Befindet sich an der Stelle wohin das Sprite gezeichnet wird bereits ein anderes Zeichen, dessen Position in der Zeichentabelle nicht ein Vielfaches von 16 ist, wird das zugehörige Kollisionsflag gesetzt und das Sprite nicht gezeichnet. Beispiel:
4.5.3 SHIDE nLöscht das Sprite n. Beispiel:
4.5.4 COL(n)Kollisionsabfrage für Sprite n. Beispiel:
4.6 Audio4.6.1 NOTE nEin Ton mit der Tonhöhe n (Halbtonschritte ab 220 Hz aufwärts) wird ausgegeben. Bei n=0 bis 63 werden Noten ausgegeben, bei n=255 Rauschen. Beispiel:
4.7 Tastatur4.7.1 INPUTEs können durch Kommata getrennt Zeichenketten und Variablen angegeben werden. Die Zeichenketten werden ausgegeben, die Variablen bewirken einen Eingabecursor. Falsch eingegebene Zeichen können mit der Backspace-Taste korrigiert werden. Es ist auch möglich, Ausdrücke einzugeben die dann berechnet werden. Das folgende Beispiel zeigt einen kleinen Rechner, das letzte Ergebnis ist in der Variable M gespeichert.
4.7.2 RKEY VDie aktuell gedrückte Taste wird in die Variable V geschrieben. Ist keine Taste gedrückt, wird eine 0 geschrieben. Beispiel:
4.7.3 WKEY VEs wird auf einen Tastendruck gewartet und die gedrückte Taste wird in die Variable V geschrieben. Beispiel:
4.7.4 Die Funktion KEYDiese Funktion liefert verschiedene Tastaturabfragen als -1,0,1 Wert. Als Parameter wird die Art der Abfrage eingetragen. Ist keine der beiden Tasten betötigt, wird 0 als Funktionswert zurückgeliefert.
4.8 Zeit4.8.1 WAIT nMit dem WAIT-Befehl wird N*0,1 Sekunden gewartet. N kann wieder ein beliebiger Ausdruck sein. Beispiel:
4.8.2 SYNC nMit dem SYNC-Befehl wird auf N Bildsynchronimpuse gewartet. N kann wieder ein beliebiger Ausdruck sein. Beispiel:
4.8.3 TSET nDer interne Timer (10Hz) wird auf den Wert n gesetzt. Beispiel:
4.8.4 TGET VDer interne Timer (10Hz) wird ausgelesen und in die Varaiable V gespeichert. Beispiel:
4.9 Ein-/Ausgabe4.9.1 DIR nsetzt die I/O-Richtung der 8 Portpins an der parallelen Schnittstelle. Eine 0 bedeutet Eingang, eine 1 Ausgang. Beispiel:
4.9.2 OUT n,bSetzen (b=1) oder Rücksetzen (b=0) des Ausganges n. Beispiel:
4.10 Serielles4.10.1 PUMP nSchaltet die Ladungspumpe aus (n=0) oder ein (n=1). Beispiel:
4.10.2 SPUT ndas Byten wird an die serielle Schnittstelle ausgegeben. Beispiel:
4.10.3 SGET VEin Zeichen von der seriellen Schnittstelle wird eingelesen und in die Varaiable V gespeichert. Beispiel:
4.11 Speicher4.11.1 ESET datSpeichert einen Wert im internen EEPROM. Dieser Wert ist programmbezogen und wird auch mit auf den externen Programm-EEPROM gespeichert. Nach dem Laden über die serielle Schnittstelle wird der Wert auf 0 gesetzt. Beispiel:
4.11.2 EGET VLiest einen Wert aus dem internen EEPROM. Dieser Wert ist programmbezogen und wird auch mit auf den externen Programm-EEPROM gespeichert. Beispiel:
4.11.3 XPOKE adr,datSpeichert ein Byte im externen EEPROM (Adresse=1). Beispiel:
4.11.4 EPOKE adr,datSpeichert ein Word im internen EEPROM, beim MEGA16 nur Dummyfunktion. Als Adressen sind 0...999 möglich.
5 ChangelogVersion 0.61 vom 17.12.2006
created with latex2web.pl v0.61 © 2006-2010 Joerg Wolfram |