Projekt BASIC Beispiele Erweiterungen |
AVR-ChipBASIC-32: BASIC-Referenz
V0.96 (c) 2006-2011 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 51 Programmzeilen (1-51). Alle Schlüsselwörter ausser Funtionen können auf zwei Zeichen abgekürzt werden, beim Laden werden abgekürzte Schlüsselwörter auch mit nur 2 Zeichen dargestellt. Nach jedem Schlüssselwort 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). 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 128-384 Elementen AR(), 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 AR().
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. Die Funktion ist nur auf Variablen, nicht auf Arrayelemente erlaubt. Beispiele:
4.1.2 DATA offset,value1,value2...Die Array Elemente werden ab Byte (offset) initialisiert. Beispiel:
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, ruft den Monitor auf.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 16 Einträge begrenzt ist, lassen sich nur insgesamt 16 Schleifen bzw. Unterprogrammaufrufe schachteln.4.2.9 XCALLEine weitere, recht ungewöhnliche Anweisung ist XCALL prognr,zeile die Unterprogramme in einem der 3 anderen Programme aufrufen kann. Damit ist es möglich, den gesamten Programmspeicherbereich für eine einzige Anwendung zu nutzen. Der Rücksprung erfolgt wie gehabt mit RETURN.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) gesetzt.4.3.3 PRINTDer PRINT-Befehl dient zur Ausgabe auf den Bildschirm oder auf die serielle/parallele Schnittstelle, in das Array oder auf die I2C-Schnittstelle. Zusätzlich kann die Ausgabe noch formatiert werden. Anstelle des PRINT Befehls kann auch (BASIC-üblich) ein Fragezeichen verwendet werden.
Steht am Ende des PRINT-Befehls einer der beiden Trenner, wird kein Zeilenvorschub ausgeführt. Der Ausgabekanal legt fest, wohin die Zeichen ausgegeben werden. Bei Ausgabekanal >3 wird auf die I2C-Schnittstelle mit der Kanalnummer als Devicenummer ausgegeben. Dabei wird das niederwertigste Bit auf 0 gesetzt (Schreibmode).
Das Format ist ein Wert zwischen 0 und 255, wobei die Bits folgende Bedeutung haben:
Neu ist ab Version 0.91 das @ für "AT" zur Positionierung. Bei Ausgabe auf den Bildschirm wird der Cursor auf die entsprechende Position gesetzt, bei Ausgabe auf die serielle oder parallele Schnittstelle wird die Positionierung ignoriert. Bei Ausgabe in das Array entspricht der erste Wert Array-Byteposition*256 und der zweite Wert der Array-Byteposition, ohne @ ist die Byteposition zu Beginn jedes PRINT-Befehls 0x0000. Wird über die I2C-Schnittstelle ausgegeben, so wird zuerst 10xxxxxx und danach 110yyyyy gesendet. 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=blau, 2=rot, 3=magenta, 4=grün, 5=cyan, 4=gelb und 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 CTEXT adr,anzKopiert den zuletzt bei Input eingegebenen Text in das Array byteweise ab Element adr. Als Endemarkierung wird ein Nullbyte angehängt. Mit dem 2.Parameter anz wird die Anzahl der maximal einzulesenden Bytes begrenzt. Dabei ist zu beachten, dass wegen dem angehängten Nullbyte effektiv anz+1 Bytes kopiert werden.
4.7.3 RKEY VDie aktuell gedrückte Taste wird in die Variable V geschrieben. Ist keine Taste gedrückt, wird eine 0 geschrieben. Beispiel:
4.7.4 WKEY VEs wird auf einen Tastendruck gewartet und die gedrückte Taste wird in die Variable V geschrieben. Beispiel:
4.7.5 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.9.3 ICOMM adr,start,numGenerische I2C Routine. Der Erste Parameter adr gibt die Slave-Adresse an. Gleichzeitig wird mit Bit 0 festgelgt, ob geschrieben (0) oder gelesen (1) werden soll. Die beiden anderen Parameter geben die Startadresse im Array und die Anzahl der zu übertragenden Bytes an. 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. 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. 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. Als Adressen sind 0...999 möglich.
4.11.5 FREAD nr,pageLiest die Page page aus dem Dataflash in den Puffer nr (1/2) ein. Beim ATAT45DB081 kann page zwischen 0 und 4095 liegen.
4.11.6 FWRITE nr,pageSchreibt den Puffer nr (1/2) in die Page page des Dataflash. Beim ATAT45DB081 kann page zwischen 0 und 4095 liegen.
created with latex2web.pl v0.63 © 2006-2013 Joerg Wolfram |