PIC-BASIC-Compiler

iL_BAS16xx

"der" PIC-BASIC-Compiler

(für Windows ab Win9x)

PREISE

Sharewareversion für den 16C83 zum herunterladen

Der BASIC-Compiler iL_BAS16xxx erlaubt ein schnelles und einfaches Programmieren der PIC Microcontroller der Firma Microchip, Arizona. Zur Zeit werden folgende Controllerfamilien unterstützt: PIC10F20x, PIC12C50x, PIC12C67x, PIC16Cxx und PIC16Fxx (Übersichtsliste). iL_BAS16xxx erzeugt echten Maschinencode, ist also kein Interpreter. Der erzeugte Maschinencode wird mittels Programmiergerät (z.B. iL_PRG16PRO, iL_ISP_U, PICSTART plus o.ä.) in den gewünschten Baustein gebrannt.
BASIC ist eine äußerst leicht zu lernende Programmiersprache. Wir wollen uns hier nicht an einem "Glaubenskrieg" über die beste Programmiersprache beteiligen. Tatsache ist: In BASIC lässt sich sehr effektiv programmieren. Die Programme können so gestaltet werden, dass sie auch nach Jahren nachvollziehbar sind.
Der von iL_BAS16xxx erzeugte Code ist äußerst kompakt und effizient. U.a. werden Anweisungen wie LET A=0 oder INC A erkannt und codeoptimiert umgesetzt. Ebenso erkennt der Compiler, ob es sich bei einer IF-Anweisung um einen Werte- oder einen Bitvergleich handelt. Entsprechend wird auch hier unterschiedlich übersetzt.
iL_BAS16PRO (Professionalversion) unterstützt 32-Bit Arithmetik!
Zusammen mit dem Simulator iL_SIM16 ist ein Hochsprachen-Debugging möglich. Sie testen so ihr Programm Zeile für Zeile im BASIC durch, ohne mit Maschinensprache in Berührung zu kommen. Trotzdem ist auch eine gemischte (BASIC und Maschinensprache) Programmierung erlaubt.
Auch können Interrupts sehr einfach gehandhabt werden (nicht 10F20x, 12C5xx und 16C5x). Außerdem wird keine feste Quarzfrequenz vorgeschrieben. Der Compiler ermittelt aus der gewünschten Quarzfrequenz (XTAL-Anweisung) die notwendigen Werte.

Ein sehr umfangreicher BASIC-Befehlssatz lässt kaum noch Wünsche offen. Zur Zeit sind folgende BASIC-Anweisungen implementiert (Stand 11.2004):
ADDELAY Zeit zum Laden des Haltekondensators
ADINP Analogwerte einlesen (nur für 12C67x, 16C7x, 16F87x)
ASM Maschinenbefehle einfügen
BINTOASC konvertiert 8- oder 16-Bit Variable in ASCII-Zeichenkette (wie CONASC) neu
BINTOBCD konvertiert 8- oder 16-Bit Variable in eine BCD-gepackte Zahl neu
BINTODEC konvertiert 8- oder 16-Bit Variable in Zahlenkette (wie CONDEC) neu
BITPOS ordnet einer Zahl zw. 0 und 7 deren deren Bitposition zu
CALVAL Calibrationswert für internen RC-Oszillator (nur PICs mit aktivem internen RC-Oszillator)
CLOCK Echtzeituhr mittels internem Timer TMR0 (nicht 10F20x, 12C5xx und 16C5x)
CLOCK1 Echtzeituhr mittels internem Timer TMR1 (nur falls vorhanden, nicht 10F20x, 12C5xx und 16C5x)
CLRWDT setzt den internen Watchdog zurück (in Verbindung mit $WDTUSR und WDT_ON)
CONASC konvertiert 8- oder 16-Bit Variable in ASCII-Zeichenkette
CONDEC Konvertiert 8- oder 16-Bit Variablen in Zahlenkette
CURSOFF schaltet Cursor auf der LCD aus
CURSON schaltet Cursor auf der LCD ein
DATA definiert ein Datenfeld für Konstanten (nicht 10F20x, 12C5xx und 16C5x)
DEC erniedrigt den Inhalt einer Variablen um 1
DELAY kurze Verzögerung (Auflösung 100us)
DOZE stromsparender Kurzschlaf
DTMFOUT erzeugt DTMF-Signale (Tonwahl beim Telefon)
EEDATA Diese Daten werden vom Programmiergerät in das interne EEPROM geschrieben
END Programmende, Controller geht in Stromsparmodus
ENDASM beendet ASM-Anweisung
ERR abfragen der internen Error-Variablen, z.B. Timeout, Overflow
FREQIN zählt die Anzahl der Impulse innerhalb einer bestimmten Zeit
FOR TO NEXT FOR-NEXT-Schleifen, bis zu 16 Schachtelungsebenen
GOSUB Sprung in ein Unterprogramm, bis zu 4 Ebenen
GOTO Sprung zu einer Programmmarke, keine Zeilennummern!
HIGH I/O-Pin wird Ausgang und auf High gesetzt
I2CDELAY verlangsamt die I2C-Kommunikation, z.B. bei langen Leitungen
I2CHARDS aktiviert das I2C-Hardwaremodul des PICs als SLAVE
I2CINIT initialisiert 2 Pins für die I2C-Kommunikation
I2CREAD lesen aus einem I2C-Baustein
I2CRD lesen aus einem I2C-Baustein ohne Generierung von START- bzw. STOP-Bedingung
I2CSLAVE Controller wird zu einem universellen Slavebaustein
I2CST generiert eine START-Bedingung
I2CSP generiert eine STOP-Bedingung
I2CWRITE Schreiben in einen I2C-Baustein
I2CWR schreiben in einen I2C-Baustein ohne Generierung von START- bzw. STOP-Bedingung
IF THEN ELSE bedingte Verzweigungen
INC erhöht den Inhalt einer Variablen um 1
INKEY 4x4 Tastaturmatrix abfragen, an gleichen Port wie LCD möglich (4x3)
INP I/O-Pin wird als Eingangspin definiert
INPUT gesamter Port (8-Bit) wird eingelesen
INTERRUPT erlaubt das Einklinken benutzerdefinierter Interrupts
INTEND markiert das Ende der Interruptservice-Routine
INTPROC markiert den Anfang der Interruptservice-Routine
LCDCHAR eigene Zeichen für die LCD definieren
LCDCLEAR LC-Anzeige löschen
LCDDELAY zur Anpassung des Timings
LCDINIT initialisiert eine LC-Anzeige mit HD44780 Controller (4-Bit)
LCDTYPE verschiedene Anschlussvarianten für LCDs (z.B. auch über 74LS164) neu
LCDWRITE schreibt Daten auf die LCD
LET Anweisung für eine Zuweisung (obligatorisch)
LOCATE Positioniert den Cursor an eine beliebige Stelle auf der LCD neu
LOFREQ erzeugt Frequenzen bis ca. 2kHz
LOOKDN Tabellen lesen
LOOKUP Tabellenindex lesen
LOW I/O-Pin wird Ausgang und auf Low gesetzt
ON...GOSUB mehrfach bedingte Verzweigung
ON...GOTO mehrfach bedingte Verzweigung
OUTP I/O-Pin wird als Ausgang definiert
OUTPUT 8-Bits werden auf Port ausgegeben
PEEK direktes Lesen eines Fileregisters
POKE direktes Beschreiben eines Fileregisters
PRINT zum Debuggen (nur 16F627, 16F628, 16F818, 16F819 und 16F87x)
PULSIN misst die Pulsdauer
PULSOUT gibt einen Puls auf einem I/O-Pin aus
PWM erzeugt ein pulsweitenmoduliertes Signal, z.B. für Analogausgabe
RANDOM erzeugt eine Zufallszahl
RCTIME misst die Lade-/Entladezeit eines Kondensators, z.B. für Widerstandsmessungen
READ lesen der Daten aus dem EEPROM (nur für PICs mit eingebauten Daten-EEPROM)
READDATA liest ein Datenwert aus dem Datenfeld (nicht 10F20x, 12C5xx und 16C5x)
REM leitet eine Kommentarzeile ein
RES Pegel des I/O-Pins auf Low setzen
RESTORE setzt den Lesezeiger für READDATA an eine bestimmte Position (nicht 10F20x, 12C5xx und 16C5x)
RETURN Ende des Unterprogramms
REVERS I/O-Pin wird Ausgang und die aktuelle Information invertiert
SERIN liest Daten seriell ein
SEROUT gibt Daten seriell aus
SET Pegel des I/O-Pins wird auf High gesetzt
SETBAUD ändern der Baudrate bei interruptgesteuertem UART-Empfang
SLEEP Controller wird in den Sleepmodus versetzt
SOUND erzeugt Frequenzen zw. 1kHz und 20kHz
SWAP vertauscht die beiden Halbbytes in einer Variablen
TOGGLE Pegel des I/O-Pins wird invertiert
TRIS initialisiert das Datenrichtungsregister
TXDDELAY Pause zw. zwei Zeichen beim Senden mittels UART
VARPTR ermittelt die Absolutadresse einer BASIC-Variablen
WAIT verzögert den Programmablauf (kein Stromsparmodus)
WRITE schreibt Daten in das EEPROM (nur für PICs mit eingebautem Daten-EEPROM)


Bei den arithmetischen und logischen Befehlen sind folgende Funktionen implementiert:

+ - * / mod
and or xor swap
shl shr rotl rotr


Folgende Vergleichsoperationen sind möglich:

= < > <= >=

PREISE
Bestelung per email
home page