Compilerversionen / Korrekturen
letzte Änderung:

Hier finden Sie in chronologischer Auflistung die Neuerungen, Fehlerbereinigungen usw. für den PIC-BASIC-Compiler iL_BAS16 und Zubehör.
Ver. 5.7-10  23.11.2007
  • Erweiterung des Compilerschalters $VCFG mit einem Argument. Dieses wird 1:1 in ADCON1 per OR übernommen.
  • PRINT-Befehl wieder hergestellt. War nach Änderung von BIN2ASC falsch.
  • Korrekturen bei EEPROM- und OSCCAL-Befehl. Wenn ein PIC das Register OSCCON hat, wird der für OSCCAL notwendige Zusatzcode unterdrückt.
  • Interne Umrechnungsfaktoren für Pulsout optimiert. Jetzt deutlich geringerer Fehler.
  • Beim PWM-Befehl wird Bereich automatisch auf 1 bis 254 eingegrenzt. Somit entfällt die explizite Überwachung dieser Grenzen
Hexeingabe beim Debugger jetzt möglich

Ver. 5.7-8  29.06.2007
Implementierung der Typen 16F688, 12F635, 16F636 und 16F639 (Beta-Stadium)

Compiler Ver. 5.7-9  18.07.2007
Implementierung der Typen 12F683, 16F685, 16F687, 16F689 und 16F690

Ver. 5.7-7  18.05.2007
Die Befehle I2CRDB und I2CRDBN funktionierten nur, wenn der DEBUG nicht aktiv war

Ver. 5.7-6  06.05.2007
AUTO +x funktioniert jetzt.

Ver. 5.7-5  14.04.2007
diverse Anpassungen für iL-TROLL Variante

Ver. 5.7-4   07.03.2007
Bei der iL-TROLL-Version können Variablen nicht mehr absolut sondern nur mittels AUTO definiert werden.

Ver. 5.7-3   20.02.2007
  • Der INKEY-Befehl funktionierte in der iL-TROLL nicht richtig. Wichtig beim Anschluss am Port RB ist die Berücksichtigung der LEDs. Sie bilden zusammen mit den Pullup-Widerständen eine Spannungsteiler. Entsprechend müssen die Widerstandswerte bemessen werden.

Ver. 5.7-2   01.02.2007
  • Das Timing bei I2C Start- und Stop-Condition wurde entschärft. Es wird nun die Angaben in I2CDELAY berücksichtigt. Die Low-Phase des Clocksignals wird nun auch gemäß I2CDELAY verlängert (bisher nur High-Phase).
  • Der Befehl I2CRDBN wurde implementiert, da nicht alle Slavebausteine eine Stop-Condition erkennen können. Stattdessen erwarten sie die Nichtquittierung des ACK-Bits, was mit diesem Befehl erzwungen wird.
  • Wenn bei der bedingten Compilierung ($IF, $ELSE, $ENDIF) die Bedingung nicht erfüllt ist, dann wird eine Include-Datei nicht gesucht. Bisher wurde versucht, diese testweise zu öffnen, was bei Fehlen dieser Datei eine Fehlermeldung verursachte.
  • In Programmsequenzen, die über $IF, entweder-oder eingebunden werden, dürfen nun die gleichen Labels besitzen.
  • Include-Dateien dürfen nun bis zu 8 Ebenen verschachtelt werden.

Ver. 5.7-1   05.11.2006
  • PSA0, PSA1 implementiert = Prescaler Assignment Bit.
  • Den Vorteilerwert setzt man mit PSV0...PSV7 (prescaler value).
  • $WDTUSR hat nicht richtig funktioniert (Problem WDT_USR-Variable)

Ver. 5.7-0   22.09.2006
  • Diese Änderung betrifft nur den iL-TROLL. Wenn der END-Befehl ausgeführt wurde und! das Programm eine kürzere Laufzeit wie 5s hat, lässt sich der iL-TROLL Baustein nicht mehr programmieren. Ab dieser Version ist das Problem beseitigt; sollten Sie mit einer älteren Version arbeiten und das Problem tritt auf, dann findet man im Internet die entsprechende Hilfe.
  • Fehler bei eepgd behoben (war früher nicht)

Assembler Ver.5.6-10  17.07.2006
  • Bugfix: Es wurde immer nur der letzte $LIST Befehl übernommen, die davorliegenden wurden einfach ignoriert.

Ver. 5.6-25   07.07.2006
  • Bugfix: bei FOR-NEXT konnten bisher keine 16-Bit Endvariablen, sondern nur 16-Bit Endkonstanten, angegeben werden. Es wurde leider keine Fehlermeldung erzeugt. Jetzt ist:
FOR varA16 = 0 TO varB16
FOR varA16 = varC16 TO varB16
FOR varA16 = var/const TO varB16 +/- const     (*)
erlaubt.
(*) erzeugt aber einen ineffizienten Code; besser man addiert die Konstante vor
der Schleife zur Endvariablen.

  • Zusätzliche Treiber für die LCD-Controller KS0073 und ST7073. Diese sind leider nicht 100% kompatibel zum Standard-Controller HD44780. Sie besitzen zusätzliche Funktionen und Register die ebenfalls angesprochen werden müssen. Außerdem ist
  • die Zuordnung zwischen RAM-Adresse und Zeichenposition unterschiedlich. Angewählt werden diese LCDs durch LCDTYPE 16..18 für den KS0073 und LCDTYPE 19..21 für den ST7036. Bei Standardbeschaltung muss das Argument 16 bzw. 19, für UPLINES 17 bzw. 20 und für UPLINESX 18 bzw. 21 gewählt werden. Beim ST7036 ist keine externe Kontrasteinstellung möglich. Sie muss bei der Initialsierung erfolgen. Dazu ist die Compilervariable LCDCTRST n mit n = 0..63 implementiert worden.
Aktuell getestet:
ST7036 im Modul EA DOGM162S-A

Ver. 5.6-24   24.05.2006
  • Beim iL-TROLL funktionierten die Befehle READ und WRITE nicht. Dazu auch DEFAULT.EQU modifiziert.

Ver. 5.6-23   19.05.2006
interne Optimierungen

Ver. 5.6-22    05.05.2006
  • Bisher konnte die AUTO-Anweisung bei den Variablendefinitionen nur für Bank 0 genutzt werden. Nun wird automatisch die Bank gewechselt. Liegt am Ende des nutzbaren Bereichs ein Variablentyp, der die Grenze verletzen würde, folgt die Fehlermeldung "Nicht genügend Variablenspeicher" bezogen eben auf den aktuellen Block.

Ver. 5.6-21    26.04.2006
  • Schiebe- und Rotationsbefehle waren nur für Variablenbereich auf Page 0 nutzbar.

Ver. 5.6-20    25.04.2006
  • Bei der Implementierung der 32-Bit-Schiebe- und Rotationsbefehle haben sich Fehler bei den entsprechenden 16-Bit Operationen eingeschlichen.
  • Fehlermeldung wenn bei READ und WRITE zu wenig Argumente da sind.
  • Wenn INC-File fehlt, erfolgt die Fehlermeldung nun durch den Compiler nicht erst durch das iL_PAGE0-Modul bzw. den Assembler.

Ver. 5.6-19    21.04.2006
  • Bei der Implementierung des 16F88 wurde versehentlich der PIC16F877A deaktiviert.

Ver. 5.6-18    25.03.2006
  • beim PIC16F818 und 16F819 wird der Schalter $NCALDEF per default gesetzt.
  • Programmiersoftware: Config-Fehler beim 16F818 behoben, (Änderungen auch im Assembler notwendig)

Ver. 5.6-17    15.03.2006
  • Fehler beim iL-TROLL im Zusammenhang mit DEFINE STACK behoben
  • DEBUGGER und DOWNLOAD erkennen jetzt COM1 bis COM9 (wegen USB-Adapter)

Ver. 5.6-16    13.02.2006
  • Anpassung von LOOKUP und LOOKDN bei aktivem Debugger
  • Anpassung von INTERRUPT bei aktivem Debugger
  • ERR_-Variable bei Kaltstart löschen, sonst fehlerhafter Wert im Debugger
  • Fehler in I2CWRB und I2CRDB behoben 

Ver. 5.6-15    28.01.2006
  • Compilerschalter $OSCCON wert  implementiert. Damit kann die RC-Frequenz
  • früher aktiviert werden, nicht erst beim Abarbeiten des Anwenderprogramms

Ver. 5.6-14 22.01.2006
  • WRITE und READ waren für den 16F648 nicht freigeschaltet
  • DEBUG-Funktion für 16F628, 16F88, 16F87x und iL-TROLL implementiert - Bugfix: LOOKUP und LOOKDN für iL_TROLL korregiert
  • neue Doku zum herunterladen

Ver. 5.6-13 26.11.2005
  • 16F627A und 16F648A implementiert, 16F877A für SEP freigeschaltet

Ver 5.6-12 03.11.2005
  • Bugfix: Nach SLEEP und DOZE das Option-Register auf ursprünglichen Wert gesetzt, geht beim 5x nach einem RESET durch den SLEEP verloren

Ver 5.6-11 26.10.2005
  • Bugfix: LET var= --- > Fehlermeldung erzeugen - Fehlermeldung wenn in LCDWRITE hinter einer Zahl ein '#' steht

Ver 5.6-10 08.06.2005
  • OUTPUT RB,xx hat nicht richtig funktioniert, ebenso HIGH,LOW,REVERS
  • PIC10Fxxx war in der STANDARD-Version versehentlich nicht freigeschaltet

Ver 5.6-09 07.05.2005
  • Bugfix in LCDWRITE yvar,xvar,.... behoben
  • Nutzung der Portvariablen RA, RB etc. erweitert
  • TRIS-Befehl im ELSE-Zweig nun erlaubt

Ver 5.6-08 14.04.2005 - 27.04.2005
verschiedene Bugfixes:
  • an manchen Stellen hat iL_BAS16 sowohl keinen Code als auch keine Fehlermeldung generiert.
  • wird versucht mit Arrayvariablen zu rechnen oder in Befehlen außer LET zu verwenden, erfolgt nun eine Fehlermeldung
  • wird eine TO-Variable nicht definiert, erfolgt ebenfalls eine Fehlermeldung
  • Fehlermeldung auch, wenn man einer Bytevariablen einen Wert >255 zuweist - Sonderfall $80000000 abgefangen
  • Assembler erzeugt nun auch ein COD-File mit langen Symbolnamen
  • bedingte Compilierung. Falls Bedingung FALSE, dann Quelltext kommentieren
Neuerungen:
  • FOR-NEXT mit 16-Bit-Variablen und +- Variable/Konstante sind nun erlaubt
  • SET und RES für var16 und const/var16/var8 sind erlaubt, ebenso BITPOS für 16-Bit-Variablen
  • Bitabfragen in Wordvariablen erlaubt
  • DEFINE array = var1 + const ist nun erlaubt
  • STACK hat höhere Priorität als GIED -> bs(c)f 11,7 wird unterbunden
  • iL_EDy mit Reloadfunktion für aktuelle Datei (rechte Maustaste -> Datei neu laden)
  • iL_EDy: Wenn Fenster mit der fehlerhaften Datei geschlossen ist, wird es nach dem misslungenen Compilerlauf automatisch geöffnet
  • iL_PRG16 zwei zusätzliche Untermenüpunkte beim Programmieren -> PIC-Löschen + Code und PIC-Löschen + Code + Daten
  • PORT-Bitabfragen wieder ohne ARG0 (ist nur notwendig, wenn Variablen in Page1..3 liege

Ver. 5.6-07 24.02.2005
  • Bugfix: ADWandler ging beim 16F676 nicht (Bankumschaltung für ADCON1) ANSEL bei 16F676 und ADCFG>9 korregiert
  • neu: SELFPROG: Wenn Anzahl=0 dann Abbruch, IL_... auch Adressbereich prüfen CPD_
  • ON und CPD_OFF in CONFIG bzw. DEVICE implementiert.

Ver. 5.6-06 12.02.2005
  • Es wurde eine eigenständige Version für iL-TROLL implementiert. Diese Version ist ausschließlich für die Nutzung der vorprogrammierten iL-TROLL-Bausteine nutzbar. Diese Bausteine haben einen eingebauten Ladekern, der es erlaubt sie über eine serielle Standardschnittstelle zu programmieren. Die Vorgehens- weise ähnelt der Funktion SELFPROG. Eine HEX- und COD-Datei kann nicht generiert werden. In der DEFINE DEVICE steht als CPU-Bezeichnung ........
  • Erzeugen eine ID-Datei für iL_EDy-Menüpunkt "Hilfe" -> "Info über iL_BAS16"
  • Bugfix: Wenn kein Drucker installiert ist, lässt sich iL_EDy nicht starten. Dieser Fehler ist beseitigt.

Ver. 5.6-05 04.02.2005
  • Bugfix: READDATA kann in bestimmten Konstellationen INKEY beeinflussen.

Ver. 5.6-04 28.01.05
  • Ab jetzt sind in FOR-NEXT-Schleifen auch 16-Bit-Zählvariablen möglich.
  • I2C: Beim Schreiben der I2C-Adresse wird jetzt das ACK-Bit vom Master richtig abge- fragt und ausgewertet. Kommt kein ACK von einem Slave zurück, wird das ERR-Bit 3 gesetzt.
  • Erweiterung der Funktion SELFPROG. Das Protokoll vom 24.04.2002 wurde voll- ständig verworfen und neu definiert. Die Hardwarebeschaltung bleibt jedoch unverändert. Protokoll: Alle Werte die an SELFPROG gesendet werden bestehen aus 16-Bit (2 Bytes). Das LSB wird zuerst, dann das MSB gesendet. Nachdem der Controller in das SP_BIOS verzweigt ist, wartet er dort auf Daten. Zuerst muss die Startadresse (LSB, MSB) und danach die Anzahl der zu programmierenden Speicherplätze übertragen werden. Es folgend dann die entsprechenden Programmierdaten. Es muss unbedingt die oben angegebene Zahl übertragen werden. Es gibt keine Möglichkeit die Kommunikation vorher abzubrechen. Aufgrund des Hardwareaufbaus wird das aktuell gesendete Zeichen sofort auch zurückgesendet. Zusätzlich sendet aber das SP_BIOS den empfangenen Wert ebenfalls zurück (nicht bei Adresse und Anzahl). Das LSB kommt sofort zurück, das MSB erst wenn das gesamte Wort im PIC programmiert wurde. Damit bestimmt der PIC die Übertragungsgeschwindigkeit einzelnen Datenbytes und kann nicht durch einen zu schnellen PC "überfahren" werden. Bei der Definition von SELFPROG mittels $SELFPRG x können mehrere Modi eingestellt werden. x = 0 Programm verwzeigt bei der BASIC-Anweisung SELFPROG ins SP_BIOS x = 1 Programm verzweigt sofort nach dem Kaltstart (RESET) ins SP_BIOS x = 2 wie 1, jedoch erfolgt nach Beendigung des Programmierens nicht ein Sprung auf Adresse 0 wie bei x=0 sondern auf den Befehl hinter SELFPROG.

Ver. 5.6-03 18.01.05

  • I2C-Routinen um die BASIC-Anweisungen I2CRDB und I2CWRB erweitert. Damit kann man Lese- und Schreibzugriffe auf dem I2C-Bus machen, ohne dass eine Geräteadresse angegeben werden muss. Dies ist besonders dann hilfreich, wenn man die Byteein- oder ausgabe in einer Schleife bewerkstelligen will. Beide Befehle generieren keine Start- bzw. Stopbedingung.
  • Inzwischen wird die Argumentenliste bei der DEVICE-Zeile sehr lang. Die Vorgaben für das Konfigurationswort des PIC lassen sich nun auch über CONFIG definieren. Es dürfen mehrere CONFIG-Anweisungen (z.B. pro Zeile je ein Argument) verwendet werden, was die Übersichtlichkeit deutlich erhöht. Anweisungen für den Compiler, die z.T. auch in der DEVICE-Zeile stehen, z.B. ADCFGx müssen weiterhin dort definiert werden. Am Besten man definiert die Bits für das Konfigurationswort ausschließlich mit CONFIG, die übigen in der DEVICE- Zeile.
  • Das Schlüsselwort AUTO vereinfacht die Variablendeklaration besonders für die Einsteiger. iL_BAS16 vergibt die Speicheradressen für die Variablen selbst- ständig. Satt der Absoluten Adresse wird einfach AUTO angegeben. Ob es sich um eine Byte-, Word- oder Doublewordvariable handelt, muss nach wie vor angegeben werden. Bsp. DEFINE count = AUTO AS WORD Um auch hier auf die einzelnen Bytes einer Wort- oder Doppelwortvariablen zu- greifen zu können, darf man folgendes definieren DEFINE countl = count as byte 'Zugriff auf das LSB von count DEFINE counth = count + 1 as byte 'Zugriff auf das MSB von count Dennoch sollte man später dazu übergehen, den Variablen absolute Adressen zuzuweisen, da hier die Flexibilität für den Programmierer am Größten ist. AUTO soll nur den Einstieg erleichtern.

Ver. 5.6-02 17.12.04
  • OPTION_MASKE bei CLOCK-Befehl korregiert, RBPU war immer 1 = inaktiv

Ver. 5.6-01 10.12.2004 -> Neue Versionsnummer 5.6
  • Die kleinsten Microcontroller PIC10F200, PIC10F202, PIC10F204 und PIC10204 können nun mit diesem Compiler programmiert werden.
  • Bugfix: Wenn Clock mit Timer0 aktiv war, konnten die RBPU-Widerstände nicht aktiviert werden.
  • Bugfix: PRINT mit Dezimalwertausgabe war fehlerhaft.

Ver. 5.5-26 18.11.2004
  • Neue Zeitbasis für CLOCK Befehl implementiert. Neben dem TMR0 kann nun auch TMR1 als Zeitbais für die interne interruptgesteuerte Echtzeituhr verwendet werden. Der neue Befehl lautet CLOCK1, die Parameter sind dieselben wie bei CLOCK.

Ver. 5.5-25 11.11.2004
  • Standard-LCDs mit bis zu 2 x 40 Zeichen können nun auch über einen zusätzlichen Seriell-Parallel-Wandler angesteuert werden.
  • Neuer Befehl "LCDTYPE" wurde implementiert.

Ver. 5.5-24 28.09.2004
  • Bugfix: Bisher war es nicht möglich, in einer IF-Anweisung ein ELSE zu verwenden, falls nach THEN ein LCDWRITE folgte. Der Compiler hatte hier ab ELSE schlicht falschen Code produziert. Nun funktioniert: IF beding. THEN LCDWRITE ELSE ...

Ver. 5.5-23 06.09.2004
  • Bugfix: Bei PICs mit einem Programmspeicher größer 2k wurde eine Fehlermeldung beim Befehl ON x GOSUB erzeugt (Fehlendes Label).

Ver. 5.5-22 21.08.2004
  • Bei PICs mit 12-Bit Kern wurde die Berechnung LET VAR=VAR+CONST bzw. LET VAR = CONST - VAR mit einem Fehler im Assemblermodul abgebrochen

Ver. 5.5-21 21.07.2004
  • Bugfix: Compiler erzeugte Fehlermeldung bei GOSUB-Befehlen bei 12-bit CPUs mit Programmspeicher kleiner oder gleich Speicherseitengröße.
  • Bugfix: LCDWRITE var,const,"... funktionierte nicht.

Ver. 5.5-20 07.06.2004
  • Bugfix in BINTOASC, hatte nur wie BINTODEC gearbeitet. CONASC war aber ok.

Ver. 5.5-19 21.04.2004
  • Bugfix in 32-Bit-Arithmetik. Problem war: DW = DW / BY u.U. falsches Ergebnis Bugfix: TXDDELAY hat versehentlich den Watchdog ausgeschaltet.

Ver. 5.5-18 18.04.2004
  • Die Berechnung von Parity ODD war falsch. Fehler behoben! Bisher war es nicht möglich, einen Mischbetrieb von SERIN und SEROUT mit unterschiedlichen Baudraten und! unterschiedlicher Parität zu programmieren. Sollte allerdings die SERIN-Routine im Interruptbetrieb arbeiten, so muss nach SETBAUD ein SET / RES TX9 zum ein- bzw. ausschalten der Parität stehen.

Ver. 5.5-17 01.03.2004
  • Befehl LOCATE y,x wurde implementiert. Dieser Befehl dient zur Cursor- positionierung, ohne dass ein Zeichen geschrieben werden muss.

Ver. 5.5-16 25.02.2004
Ver. 5.5-15 21.02.2004

  • 32-Bit Dezimal- und Hexausgabe auf LCD implementiert. 32-Bit Binärzahlen können nicht auf LCD ausgegeben werden.
  • 32-Bit auf LCD ausgeben: Sonderfall ist der Wert 0. Wird jetzt abgefangen und richtig dargestellt.
  • Neuer BASIC-Befehl LOCATE y,x implementiert. Diese Befehl setzt den Cursor auf der LCD an die Position y,x.
  • Wenn beim SERIN und SEROUT der Port und Pin als Konstanten deklariert sind (RC,7), dass die Hardware-UART angesprochen werden soll (falls vorhanden).
  • Neu hinzugekommen sind: 16F628A, 16F676, 16F87 und 16F88

Ver. 5.5-14 09.02.2004
  • CONST32 implementiert. Dadurch können in einer IF-Abfrage auch 32-Bit Konstanten aus einer DEFINE-Zeile verwendet werden.
  • ADCFG für PIC 16F87 / 16F88 korregiert.
  • UPLINES und UPLINESX überarbeitet bzw. implementiert.
  • CURSON und CURSOFF implementiert
  • BINTOBCD geht jetzt auch für 8-Bit-Variablen.

Ver. 5.5-13 28.01.2004
Ver. 5.5-12 26.01.2004
  • Die 32-Bit-Zuweisung LET var32=var32 ging nicht, ebenso ist es jetzt möglich eine 32-Bit-Konstante mittels DEFINE zu deklarieren. Neben der IF var32=0 bzw. IF var32<>0 können jetzt auch IF var32=var32 ( <>, <=, >=) sowie IF var32=const eingesetzt werden. Im Assembler wurde bei den Bausteinen 16F87xA das PWRTE-Bit bisher nicht generiert. Fehler ist behoben.
  • Im iL_EDY wird bei CTRL-Q A bzw. CTRL-Q F das Wort unter dem Cursor in das Suchfeld übernommen.

Ver. 5.5-11 17.01.2004

  • Weitere redundante CLRWDT automatisch auskommentiert; z.B. nach DATA, $OBJ2HEX usw.
  • Automatische Generierung der Sprungleiste für GOSUBs am Programmanfang für PICs mit einem Programmspeicher über 2K-Worte. Bei großen PICs gab es immer wieder das Problem, dass das Programm aus unerfindlichen Gründen nicht mehr lief. Das lag oft daran, dass ein GOSUB noch in der eigenen Seite ihr Ziel hatte, der Rücksprung aber aus einer anderen Seite erfolgte. Abhilfe schuf bis zu einem gewissen Grad der Compilerschalter $LRANGE. In seltenen Fällen entstand aber ein Code der die Funktion von $LRANGE einfach "unterlief" (siehe Ver. 5.0-49). Im Handbuch wird auch auf diesen Umstand hingewiesen und die Empfehlung gegeben, eine Sprungleiste am Programmanfang zu implementieren. Damit sind die oben beschriebenen Probleme beseitigt. Diese Sprungleiste erfordert aber sehr viel Programmierdisziplin und ist auch fehlerträchtig. Deshalb wurde die Generierung dieser Sprungliste dem Compiler übertragen. Damit sollte auch ein wildes Hin- und Hergehüpfe zwischen Unterprogrammen möglich sein.
  • iL_EDy verarbeitet nun auch ein Subset von Wordstar-kompatiblen Tastenkürzel. Es sind dies: CTRL-Q und CTRL-K Funktionen
CTRL-K 1..9 Buchmarke setzen/löschen CTRL-Q 1..9 gehe zur Buchmarke
CTRL-K B Blockbeginn markieren CTRL-Q A Suche und Ersetzen
CTRL-K C Block kopieren CTRL-Q F Suchen
CTRL-K K Blockende markieren CTRL-Q L Rückgängig machen
CTRL-K S aktuelle Datei speichern CTRL-L Weitersuchen
CTRL-K T Wort unterm Cursor markieren CTRL-N Zeile einfügen
CTRL-K V Block verschieben CTRL-U Suchen bzw. Ersetzen abbrechen
CTRL-K Y Block löschen CTRL-Y Zeile löschen

Ver. 5.5-10 18.12.2003
  • Die LCD kann nun auch auf eine zweite Art an einen Bus angeschlossen werden. Dadurch werden die Pins Rx0 und Rx1 frei, was vorallem beim RB-Port von großem Vorteil ist. Allerdings kann mit dieser Anschlussvariante kein Matrixtastenfeld parallel angeschlossen werden. Die Anschlussreihenfolge sieht dann so aus:

Rx2 = R/S (Pin 4) war falsch. Siehe Version 5.5-14!!!!!!!!

Rx3 = E (Pin 6)

Rx4 = D4 (Pin 11)

Rx5 = D5 (Pin 12)

Rx6 = D6 (Pin 13)

Rx7 = D7 (Pin 14)

(Pin 5 = RW muss auf GND liegen)

Diese Anschlussvariante wird durch das Anhängen des Schlüsselwortes UPLINES (upper lines) realisiert. Bsp: LCDINIT rb,4,20,uplines


Ver. 5.5-09 30.11.2003
  • Es wurde der Compilerschalter $WDTUSR sowie der Befehl CLRWDT eingeführt. Damit kann man den Automatismus, der nach jedem BASIC-Befehl ein CLRWDT einfügt sobald in der DEVICE-Anweisung WDT_ON steht, umgehen. Man muss nun selbst Sorge dafür tragen, dass der Watchdog in regelmäßigen Abständen zurückgesetzt wird.
    Bei Feldzuweisungen sind jetzt Formulierungen wie: LET FELD(0) = var1,var2,var3 usw. möglich.

  • Fehler im Programmiergerät behoben: Es wurde dann nicht richtig programmiert, wenn der letzte Befehl des Programms auf der Adresse 200H oder 400H usw. stand.
  • Wurde mit 32-Bit-Zahlen gerechnet, so wurden bisher alle Berechnungen, also auch Byte und Wordberechnungen, mit 32-Bit ausgeführt. Nun wird entsprechend des Variablentyps und der Rechenfunktion unterschiedlicher Code generiert.
  • Manche Versionen haben bei 32-Bit Arithmetik "Fehler ARITH32" gemeldet. Dies wurde behoben, der zusätzliche Speicherbereich für die 32-Bit Arithmetik wird nun mit ARITH32 definiert (bisher ACC32AB)

Ver. 5.5-01 15.07.2003
  • "=>" in IF-Abfragen wird jetzt richtig compiliert.
  • Beim Versuch einer Bytevariablen ein Bit zuzuweisen erscheint nun eine Fehlermeldung.
  • Die Bausteine 12F629, 12F675, 16F818 und 16F819 wurden implementiert (siehe UNTERSTÜTZTE PICs)
  • Neuer Programmer-Firmware für die neuen Programmieralgorithmen des PIC 16F87xA und 16F818 bzw. 16F819

15.07.2003 Einführung der Compilerversion 5.5.
  • iL_BAS16PRO bietet ab dieser Version die Unterstützung für 32-Bit-Arithmetik (vorzeichenlos). Dazu wurde der neue Variablentyp DBLWORD eingeführt.
  • Es sind nun I2C-Basisroutinen verfügbar. Dies sind: I2CRD, I2CSP, I2CST und I2CWR.
  • Die Befehle CONASC und CONDEC wurden in BINTOASC bzw. BINTODEC umbenannt. Außerdem wurde der Befehl BINTOBCD implementiert.
  • Bedingte Compilierung mit $IF, $ELSE und $ENDIF möglich (keine Schachtelung erlaubt)
  • Vorbelegen des internen Daten-EEPROMs mittels dem Schlüsselwort EEDATA(adr) data1,...

Die Version 5 des Compilers iL_BAS16STD und iL_BAS16PRO führt ein neues Konzept der Variablendeklaration ein. Die bisherigen vordefinierten Variablen A,B,C usw. waren bei den kleinen PIC-Bausteinen ideal. Bei Bausteinen mit sehr viel Datenspeicher wird diese Art der Deklaration aber zu unübersichtlich. Jetzt werden den Symbolvariablen direkt die absoluten Speicheradressen zugeordnet. Weitere Informationen im Handbuch (Download)

Ver. 5.0-55 15.07.2002 Das Datenfeld für DATA und READDATA war versehentlich auf 1024 Einträge gestellt. Jetzt sind 2048 Einträge frei verfügbar.


Ver. 5.0-54 18.06.2002 Beim 16F62x wurde der WRITE-Befehl falsch ausgeführt.


Ver. 5.0-53 11.05.2002 Befehl DOZE für 12-Core PICs korregiert. Beim SLEEP Befehl ist der Parameter 2.3 Sekunden. Eine kleinere Auflösung ist nicht möglich. Somit bedeutet n=1 -> 2,3s; n=2 -> 4,6s. Befehl INC RB bzw. DEC RA o.ä. Befehle jetzt möglich.


Ver. 5.0-52 15.02.2002 Beim SERIN mittels UART wird jetzt das CREN nur im Fehlerfall verändert. Sonst bei hohen Übertragungsraten Fehler, da zwischendurch der Empfänger abgeschaltet wird.


Ver. 5.0-51 29.01.2002 Die Befehle SET, RES und TOGGLE var,var funktionierten auf Bank 1 und 3 nicht richtig. (Zugriffe auf Bank 0 und 1 waren ok).


Ver. 5.0-50 21.10.2001 Bei dem Befehl SEROUT trat bei Verwendung der Softwareroutinen und der Paritätsbildung dann ein Fehler auf, wenn man Konstanten ausgeben wollte. Jetzt können neben den Variablen auch Konstanten ausgegeben werden.


Ver. 5.0-49 25.09.2001 Einführung des Schalters $LRANGE xx. xx ist ein Dezimalwert. $LRANGE xx hat nur Einfluss auf das Programm iL_PAGE0. Es legt fest, wie groß der Bereich um die Seitengrenze sein soll, bei der ein GOTO in ein LJMP, bzw. ein CALL in ein LCALL umgesetzt wird. Da es hin und wieder Konstellationen gab, in denen ein Programmabsturz erfolgte, weil il_PAGE0 eine Umsetzung in einen LJMP oder LCALL nicht durchgeführt hatte, weil die Grenzen (bisher 16) zu eng waren. Der Defaultwert ist weiterhin 16. SET, RES und TOGGLE auf Bank 1,2,3 nachgearbeitet.


Ver. 5.0-48 14.08.2001 (noch nicht abgeschlossen) PCKEYOUT implementiert. Dieser Befehl erlaubt die serielle Datenausgabe mittels übertragungsprotokoll der PC-Tastatur. Somit kann ein PIC Daten anstelle der Tastatur an den PC schicken. Auch wenn man ein Zusatzgerät aufbauen will, das die Daten "parallel" zur Tastatur an den Rechner sendet. Beispiele sind die Scanner oder der Zusatztastenblock. Der Befehl hat folgenden Aufbau: PCKEYOUT port,datenpin,clockpin,wert1,wert2... Die unterschiedliche Tastnecodes sind nicht implementiert. Stattdessen kann jedes beliebige Zeichen ausgegeben werden. Hält man sich an die Vorgaben der PC-Tastatur, sind in Abhängigkeit der Codes entsprechende Ausgaben zu machen. Dieser Befehl funktioniert nicht beim 12C5xx und 16C5x. Ebenso muss die Quarzfrequenz größer oder gleich 2 MHz betragen.


Ver. 5.0-47 01.08.2001 Die Bausteine PIC16F870, 16F871, 16F627 und 16F628 wurden implementiert.


Ver. 5.0-46 12.07.2001 Übernahme des Übertragsbits in 16-Bit Assition in ERR-Variable korregiert. In der I2CSLAVE-Routine wird jetzt während des Empfangs GIE gelöscht und am Ende der Routine wieder gesetzt, falls Interrupts oder CLOCK verwendet wird.


Ver. 5.0-45 15.06.2001 Beim SERIN- und SEROUT-Befehl dürfen die Parameter PIN und BAUD jetzt auch Variablen sein. PIN muss eine 8-Bit-Variable, BAUD eine 16-Bit- Variable sein!. Der Parameter BAUD wird in eine Verzögerungszeit um- gerechnet, die vom PIC-Kern, Quarzfrequenz und der Baudrate abhängig ist. Da diese Berechnung nicht zur Laufzeit erfolgen kann, muss sie der Programmierer im Vorfeld berechnen und statt der absoluten Baud- rate diesen Wert als Parameter in der Variablen übergeben. Diese Be- rechnung führt der Compiler bei der Angabe der Baudrate als Konstante selbst durch. Das mitgelieferte Programm BAUDCALC.EXE übernimmt diese Arbeit da die Formeln kompliziert und nicht linear sind. Bsp. let baud=329 'bei 6,144 MHz und 4800 Baud let baud=407 'bei 6,144 MHz und 2400 Baud let pin=2 let wert="A" serout rb,pin,baud,wert


Ver.5.0-44 09.03.2001 LET var=RB oder LET RA=var u.ä. sind jetzt erlaubt.


Ver. 5.0-43 01.03.2001 Das automatische Setzen des RCIE-Bits im PIE1-Register beim Einbinden der UART-Empfangsroutine erfolgt nicht mehr. Es gab beim Zusammenspiel mit anderen Interruptquellen (z.B. CLOCK) Probleme, wenn der SERIN nicht in einer ISR verwendet wurde. Soll jetzt SERIN in einer ISR verwendet werden, muss das RCIE-Bit explizit gesetzt werden (SET PIE1,5 oder SET RCIE).


Ver. 5.0-42 16.02.2001 Die internen Funktionen $STRIS und $LTRIS für die 14-Bit Type entfernt (SLEEP, DOZE). Fehler der sich durch 5.0-41 ergeben hat (ind. Adressierung für Bitoperationen -> Problem in Interrupt, wegen nicht zurückgesichertem FSR-Register) behoben.
SERIN und SEROUT beim 1250x und Baudraten <250 verbessert.
CALVAL wird jetzt richtig in das SRC-File eingefügt.


Ver. 5.0-41 19.01.2001 Array-Zugriffe beim 16C57 funktionieren jetzt auch mit der neuen Variablendeklaration. Ebenso Zugriffe auf Bank 1,2 und 3. SET und RES können auf die Bänke 1,2 und 3 angewendet werden. Allerdings sind nur 8-Bit-Variablen möglich, so dass mittels indirekter Zugriffe nur Bank 0 und 1 erreicht werden können.


Ver. 5.0-40 19.12.2000 Syntaxcheck verfeinert. ($ 34 statt $34 wird als Fehler erkannt)


Ver. 5.0-39 15.11.2000 Bugfix in iL_BAS16SEP $CCON und $CCOFF eingeführt. Damit kann der Carrycheck am Ende einer Addition/Subtraktionsroutine ein- bzw. ausgeschaltet werden.
Optimierungen bei Addition und Subtraktionen mit 8-Bit Werten bzw. Konstanten. Die gleiche Art der Optimierung erfolgt bei logischen Verknüpfungen AND, OR, XOR. Optimierungen bei Vergleichen mit 8-Bit Argumenten.


Ver. 5.0-38 13.11.2000 READ-Befehl beim 16F87x korregiert. War Zugriff auf ROM.


Ver. 5.0-37 07.11.2000
DOZE-Befehl: Beschreiben des OPTION-Registers korregiert.


Ver. 5.0-36 30.10.2000
Timinganpassungen (XTAL)


Ver. 5.0-35 20.09.2000
Ein von vielen Kunden gewünschter Befehl wurde implementiert. CONDEZ und CONASC konvertieren eine Byte- oder Wortvariable in den Dezimalwert bzw. in dessen ASCII-Äquivalent. Das Ergebnis dieser Konvertierung wird je nach Variablentyp in 3 bzw. 5 Speicherstellen geschrieben. Die Startadresse für diesen Bereich wird angegeben. Syntax: CONDEZ var8,pufferstart (Pufferlen=3) CONDEZ var16,pufferstart (Pufferlen=5) CONASC var8,pufferstart (Pufferlen=3) CONASC var16,pufferstart (Pufferlen=5)


Ver. 5.0-34 18.09.2000
Fehler bei MOD-Befehl behoben.


Ver. 5.0-33 12.09.2000
PEEK und POKE in einer IF-THEN-Anweisung jetzt möglich.


Ver. 5.0-32 31.07.2000
Timing für SERIN und SEROUT bei PICs mit 12 Bit Befehlsbreite optimiert. (Diese Bausteine benötigen mehr Befehle, da nur eine Stacktiefe von 2 Ebenen vorhanden ist.)
Ein neuer Schalter $NCALDEF wurde notwendig, da es sich gezeigt hat, dass das Programmiergerät von Microchip beim Lesen der OBJ-Datei für die PICs mit internem RC-Oszillator den vom Compiler erzeugten DEFAULT-WERT (wichtig für JW-Typen) falsch interpretiert und dadurch das OSCCAL-Register bei OTP- Type falsch gesetzt wird.
Der Befehl CALVAL definiert den Kalibrationswert der bei JW-Typen in das OSCCAL-Register geschrieben werden soll. Dieser Wert geht beim Löschen dieser Bausteine verloren; deshalb sollte man sich diesen Wert bei der erstmaligen Benutzung notieren. Wird kein Wert definiert, gilt $80 als Defaultwert.


Ver. 5.0-31 22.07.2000
Der Schalter HL bzw. LH beim INTERRUPT wurde nicht richtig ins OPTION- Register übernommern. Es ergaben sich dann Probleme, wenn z.B. an RB0 per Interrupt ein SERIN gestartet werden sollte.


Ver. 5.0-30 11.07.2000
Der Übergabeparamter /E unterdrückt die ENTER-Bestätigung im Fehlerfall. (war notwendig für Windows IDE iL_EDy)
Fehlermeldung bei PULSOUT und neuer Variablendeklaration behoben.


Ver. 5.0-29 13.06.2000
PRINT-Befehl verbessert.


Ver. 5.0-28 20.05.2000
Die Formatanweisung war bei der neuen Variablendeklaration fehlerhaft. Dies wurde hiermit behoben.


Ver. 5.0-27 16.05.2000
ADINP für 12C67x bei ADCFG5 korregiert


Ver. 5.0-26 09.05.2000
Zeitbasis beim FREQIN musste geändert werden. Jetzt entspricht 1000 einer Torzeit von 1s (effektiv aber nur 500ms, da beide Flanken gezählt werden).


Ver. 5.0-25 09.04.2000
Syntaxcheck erweitert.


Ver. 5.0-24 22.03.2000
Bei den Bausteinen 12E51x und 12E67x wird das interne EEPROM jetzt mit den Befehlen READ und WRITE angesprochen. Allerdings muss nach dem Schreiben eines Bytes etwa 10ms gewartet werden, bevor der nächste Schreibbefehl ausgeführt werden kann! Die I2C-Befehle werden damit für externe Anwendungen wieder frei.


Ver. 5.0-23 12.02.2000
Seltener Fehler in Interruptbehandlung (FSR) behoben. T0CS_INT, T0SE0 und T0SE1 sind jetzt für alle Type einsetzbar.


Ver. 5.0-22 05.02.2000
Interner Zugriff auf Variablen aus unterschiedlichen Bänken verbessert. (->STORE_DATEI) Wenn LCD und Tastaturmatrix an unterschiedlichen Ports sind, können jetzt 16 Tasten abgefragt werden.


Ver. 5.0-21 01.02.2000
Symbolcheck verbessert.


Ver. 5.0-20 26.01.2000
Fehler in SERIN (nur bei bestimmten Umständen) behoben.


Ver. 5.0-19 19.01.2000
Fehler in SETBAUD behoben (b muss real sein) Fehler in SEROUT (nur bei bestimmten Umständen) behoben; auch DEFAULT.EQU HIGH cont,var und HIGH const,const sind möglich (gilt auch für LOW,REVERS und INP, OUTP).


Ver. 5.0-18 11.01.2000
Arrayzugriffe auf Bank 2 und 3 funktionieren jetzt.


Ver. 5.0-17 07.12.1999
ADDELAY x als neuer Befehl aufgenommen. Damit kann der Anwender die Zeit für das Laden des Haltekondensators selbst bestimmen. Ist das Flag zum automatischen Ein- und Ausschalten des Wandlers aktiviert, beträgt diese Verzögerung ca. 40us bei 4MHz was einem Zahlenwert von x=10 entspricht. Bleibt der AD-Wandler dauernd eingeschaltet, und wird ADDELAY nicht definiert, erfolgt keine Verzögerung, was sich u.U. dadurch bemerkbar macht, dass sich die Kanäle gegenseitig beeinflussen und/oder der Maximalwert nie erreicht wird. Die Verzögerungszeit berechnet sich näherungsweise wie folgt:
t = (4/fq) * 4 * x

Auflösung von DEFINEs die sich auf vorausgehende Symboldefinitionen beziehen wurde weiter verbessert. Somit sind auch unter der neuen Variablendeklaration folgende Definitionen möglich:
z.B.
define FLAGS=$A0
define NULL=0
define EINS=1
define NULLBIT=FLAGS,NULL
define EINSBIT=FLAGS,EINS

Der neue Befehl $LIST ersetzt die Programmsequenz
ASM
LIST
ENDASM
Wenn Sie also z.B. den Schalter /M_OBJ setzen wollen, so reichts es jetzt aus, wenn Sie $LIST /M_OBJ schreiben.


Ver. 5.0-16 04.12.1999
Beim PRINT-Befehl funktionierte bisher nur die Ausgabe von Texten und Konstanten. Ab jetzt funktioniert auch die Variablenausgabe wie im Handbuch beschrieben. Z.Z. allerdings nur für den 16F87x. Außerdem sind die Speicherplätze 68H bis 6CH als zusätzlicher Hilfsspeicher notwendig. Der ADINP wurde für den 16F87x nochmals überarbeitet. Ein linksbündiges Resultat kann direkt in eine 8-Bit-Variable übernommen werden. Wenn der AD-Wandler automatisch ein- und ausgeschaltet wird, fügt der Compiler nach dem Einschalten eine Warteschleife von ca. 35us ein, damit der Haltekondensator auch auf den Maximumwert aufgeladen werden kann.


Ver. 5.0-15 25.11.1999
RCTIME und PWM Fehler beim 16C505 behoben.


Ver. 5.0-14 24.11.1999
Korrektur beim LOOKDN-Befehl (letztes Element wurde nicht getestet). Das AD-Result format select bei den PIC 16F87x (ADCFGxR oder ADCFGxL) wird nun richtig ausgewertet.


Ver. 5.0-13 10.11.1999
Fehlerhafter Eintrag in DEFAULT.EQU für den 16C505 korregiert, auch Programmänderung war notwendig.


Ver. 5.0-12 09.11.1999
Bei der neuen Variablendeklaration funktionierte der PULSOUT-Befehl nicht mehr.


Ver. 5.0-12 03.11.1999
Weitere PIC-Controller aufgenommen.


Ver. 5.0-11 22.10.1999
Interne Symboltabelle vergrößert (auf Heap).


Ver. 5.0-10 20.10.1999
Sound port,pin,1000,400 arbeitet jetzt richtig.


Ver. 5.0-09 16.10.1999
Die Deklaration von 16-Bit-Konstanten funktioniert jetzt auch bei der neuen Variablendeklaration. Jetzt sind auch Bitabfragen für Variablen in den Bänken 1,2 und 3 möglich.

Der Befehl RESTORE darf auch in IF-THEN-ELSE Konstruktionen verwendet werden.


Ver. 5.0-00 11.08.1999
Ab dieser Version werden die PIC16F87x-Bausteine unterstützt. Da diese Bausteine bis zu 4 Bänke mit Daten-RAM besitzen, konnte die bisherige Variablendeklaration micht mehr beibehalten werden. Es wäre zu einem chaotischem Wirrwarr geworden. Aus diesem Grund wurde die Variablendeklaration komplett überarbeitet. Es entfällt die Datei iL_BAS16.EQU. An deren Stelle tritt die Datei DEFAULT.EQU. Sie definiert jetzt nur diejenigen Variablen, die vom Assembler benötigt werden. Auch der Assembler wurde dahingehend geändert, dass er nun von sich aus keine Symboldefinitionen beinhaltet. Diese in der Datei DEFAULT.EQU festgelegten Bezeichnungen dürfen auch aus dem BASIC-Programm heraus verwendet werden. Eine erneute Definition führt zu einer Fehlermeldung. Alle weiteren Variablen, die vom BASIC und oder einer eigenen Assemblerroutine (ASM, ENDASM) verwendet werden, müssen im Programmkopf oder einer eigenen INCLUDE-Datei definiert werden. Dabei muss nach folgendem Schema vorgegangen werden:
DEFINE temp=$60 AS BYTE
Damit wird die Variable temp an der Speicherstelle 60H als Byte abgelegt. Die Angabe AS BYTE kann auch weggelassen werden, da der Defaultwert BYTE ist.
DEFINE temp1=$E0 as WORD
Hier wird die Variable temp1 als WORD-Variable (16-Bit vorzeichenlos) an der Speicherstelle E0H (in Bank 1) abgelegt.

Eine Variable muss aus mindestens ZWEI Zeichen bestehen!. Dabei muss das erste unbedingt ein Buchstabe sein.
Zu beachten ist, dass der Variablen immer eine absolute Speicherzelle zugewiesen wird. Sollen ältere Programme mit dem neuen Compiler übersetzt werden kann man durch das Einfügen des Schalters $OLDVAR den alten Variablenmodus erzwingen, und spart sich so das Umschreiben des kompletten Programms.

Die Bausteine 16CE623, 16CE624 und 16CE625 werden unterstützt. Sie werden allerdings als 16E623, 16E624 und 16E625 bezeichnet. Das interen EEPROM wird über die Befehle READ und WRITE angesprochen, wobei nach jedem WRITE- Befehl ein WAIT 10 folgen sollte, falls es nicht gewährleistet ist, dass zwischen zwei WRITE-Befehlen mind. 10ms verstreichen.
Alternativ kann man nach einem EEPROM-Zugriff das ERR-Bit 3 prüfen. Ist es 0, war die Operation erfolgreich, bei 1 konnte das EEPROM nicht angesprochen werden.

Der PRINT-Befehl erlaubt es Variablen seriell auszugeben. Dies ist für die Debuggingphase äußerst nützlich. Im Gegensatz zum SEROUT-Befehl, wird diese Befehl immer per Software generiert, auch wenn die verwendeten Pins an den USART angeschlossen sind. Darüberhinaus stehen die Formatierungszeichen %, $, und # zur Verfügung. Die Funktion ist beim LCDWRITE-Befehl beschrieben.
Syntax:
PRINT port,pin,baud,"Text",var8,var18,var8,$,var16,%
=Dez.=Dez. =Hexd. =Binärdarstellung

PRINT port,pin,baud,"Text",13,10
erzeugt ein CR LF
entspr. PRINT port,pin,baud,"Text",13,#,10,#


Für Leerzeichen zwischen zwei Ausgaben muss ein " " oder 32 eingefügt werden.


*******************************************


Ver.4.1-27 04.08.1999
Die Schalter CMCFG und VRCFG aufgenommen. Diese Angaben werden in der DEFINE DEVICE-Anweisung gesetzt, falls ein PIC16C620...16C622 bzw PIC16CE623...CE625 zum Einsatz kommen. Mit diesen Schaltern werden die Komparatoren bzw. die Spannungsreferenzen eingestellt. Es ergeben sich folgende Zusammenhänge:
CMCFG0 Komparator Reset
CMCFG1 3 Inp mux C1OUT = RA2-RA0 (od. RA2-RA3) C2OUT = RA2-RA1
CMCFG2 4 Inp mux C1OUT = Vref-RA0 (Vref-RA3) C2OUT = Vref-RA1 (Vref-RA2)
CMCFG3 2 gem.Vref C1OUT = RA2-RA0 C2OUT = RA2-RA1 RA3=digital IO
CMCFG4 2 Komp. C1OUT = RA3-RA0 C2OUT = RA2-RA1
CMCFG5 1 Komp. C2OUT = RA2-RA1 RA0 und RA3 sind digital IO
CMCFG6 2 gem.Vref C1OUT(RA3)=RA2-RA0 C2OUT(RA4)=RA2-RA1
CMCFG7 aus RA0..RA3 sind digital IO
Bei CMCFG1 und CMCFG2 entscheidet das CIS-Bit im CMCON-Register ob RA0 oder RA3 bzw. RA1 oder RA2 auf den Komparator geführt wird. Dieses Bit kann nicht in der DEFINE-Anweisung gesetzt werden, sondern muss während des Programmlaufes mittels SET- bzw. RES-Befehl nach Bedarf geändert werden. Beim VRCFG muss das Konfigurationsbyte direkt, d.h. ohne Leerzeichen, dem Schlüsselwort VRCFG folgen. Dazu muss aus der Tabelle der entsprechende Wert berechnet werden. Die Angabe erfolgt als Dezimalwert. Die entsprechende
Zuordnung lautet:
Bit 7 Wert = 0 -> Vref aus
Wert = 128 -> Vref ein
Bit 6 Wert = 0 -> Vref keine Verbindung zu RA2
Wert = 64 -> Vref mit RA2 verbunden
Bit 5 Wert = 0 -> Vref großer Spannungsbereich
Wert = 32 -> Vref kleiner Spannungsbereich
Bit 4 -
Bit 3 bit Bit 0 Spannungsbereich errechnet sich wie folgt:
wenn Bit 5 = 1 -> Vref=(x/24)*Vdd mit x = 0 bis 15
wenn Bit 5 = 0 -> Vref=0.25*Vdd+(x/32)*Vdd
Hinweis:
Beachten Sie dazu auch das Kapitel im entsprechenden Datenblatt.


Ver.4.1-26 02.08.1999
Fehler beim 16-Bit-Vergleich ">=" behoben.


Ver.4.1-25 27.07.1999
Für TXDDELAY wurde der Defaultwert auf 125 gesetzt. Da manche ältere PIC-Typen einen Fehler in der USART-Hardware haben, wenn das BRGH-Bit auf 1 steht, wurde defaultmäßig BRGH auf 0 gesetzt, auch wenn dadurch der Fehler zwischen eingestellter und gewünschter Baudrate größer wird.


Ver.4.1-24 21.07.1999
Neuer Befehl SETBAUD const implementiert. Dieser Befehl erlaubt es im Zusammenhang mit der Hardware-Serin-Routine im Interruptbetrieb die Empfangsbaudrate einzustellen. Normalerweise wird beim Datenempfang mittels Interrupt erst dann zum Befehl SERIN (in ISR) verzweigt, wenn das 1. Byte bereits empfangen wurde. Hatte man zuvor ein Byte über den Befehl SEROUT (UART) mit einer anderen Baudrate gesendet, würde somit das erste empfangene Zeichen falsch sein. SETBAUD schafft hier Abhilfe und definiert z.B. nachdem man den letzten Wert per SEROUT ausgegeben wurde. Zur Sicherheit überprüft SETBAUD zuerst, ob der Sendepuffer leer ist, denn nur dann darf die Baudrate verändert werden.


Ver.4.1-23 14.07.1999
Neuer Befehl BITPOS var1,var2 implementiert. Dieser Befehl erlaubt es aus einem Zahlenwert zwischen 0 und 7 die Bit-Position zu bestimmen. Es dürfen allerdings nur 8-Bit-Variablen verwendet werden.
Beispiel:
LET a=5
BITPOS b,a 'b bekommt %00100000 zugewiesen


Ver.4.1-22 10.07.1999
Fehler im Parser behoben. Bei einer Leerzeile und vorausgegangenem bzw. nachfolgendem Label das aus einem Schlüsselwort besteht wurde eine falsche Zeile erzeugt. 12.07.1999 Routinen für seriellen Übertragung via USART korregiert.


Ver.4.1-21 08.07.1999
Die Befehle DATA, READDATA und RESTORE wurden implementiert. Mittels diesen Befehlen können sehr einfach sehr große Konstantenfelder aufgebaut werden. Das Feld mit den Werten wird mittels dem Schlüsselwort DATA definiert. Um auch auf Bereiche innerhalb des Feldes zugreifen zu können, kann der aktuelle Zugriffszeiger mit Hilfe von RESTORE zeile gesetzt werden. Der eigentliche Datenzugriff erfolgt mit READDATA. Wenn beim SEROUT- bzw. SERIN-Befehl auf den Pin zugegriffen wird, bei dem der PIC die UART unterstützt, wird dies vom Compiler automatisch erkannt und die entsprechenden Routinen für die Hardwareunterstützung eingebunden. Der SEROUT-Befehl sendet dabei einfach Byte für Byte. Vor jedem Senden wird geprüft ob der Sendepuffer leer ist; wenn nicht, wird solange gewartet. Da bei einer Übertragung eines Strings (SEROUT port,pin,baud,"Teststring") unter Umständen die Daten für den Emfänger zu schnell gesendet werden, wird nach jedem gesendeten Byte eine Pause von 650us (bei 4MHz) eingelegt. Diese Verzögerung kann mittels TXDDELAY n (1256) verändert werden, wobei der Defaultwert auf 125 (->650us bei 4MHz) steht. Sind größere Zeiträume zwischen den einzelnen Byte gefordert, muss dies mittels WAIT und entsprechenden Schleifen realisiert werden. Der SERIN-Befehl kann entweder im Pollingbetrieb oder Interruptbetrieb verwendet werden. Im Pollingbetrieb wartet das Programm solange an dieser Stelle, bis ein Datenbyte empfangen wird. Falls andere Interrupts freigegeben sind, werden diese im Bedarfsfall bearbeitet. Im Interrupt-Betrieb (SERIN port,pin,baud,INT,var) muss der SERIN-Befehl in eine Interruptserviceroutine eingebunden werden. Dabei ist darauf zu achten, dass bei mehreren möglichen Interruptquellen diejenige herausgefunden werden muss, die den Interrupt auch tatsächlich ausgelöst hat. Neben dem RCIE-Flag im PIE1-Register wird auch das PEIE-Flag im INTCON-Register automatisch eingeschaltet. Der Anwender muss nur noch für das Ein- und Ausschalten des GIE (Global Interrupt Enable) sorgen.


Ver.4.1-20 01.07.1999
Die FOR-NEXT-Schleifen wurden überarbeitet. Jetzt dürfen bis zu 16 Schleifen geschachtelt werden, das gilt auch für die "kleinen Bausteine" wie z.B. dem PIC16C54 oder PIC12C508.


Weiter zurückliegende Änderungen und Neuerungen entnehmen Sie bitte der Datei HISTORIE.TXT.



home page