INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo zusammen, in der Zwischenzeit haben Norbert und ich ein gutes Dutzend E-Mails ausgetauscht, um einem hartnäckigen und sehr speziellen Problem auf die Spur zu kommen: Wer die Open-Micro einsetzen möchte, um Entfernungen per Ultraschall zu messen, wird die Erweiterung für 16-Bit-Arithmetik und die Routinen zur On-Zeit-Messung zusammen in einem Programm einsetzen müssen. Aber die Erweiterung für 16-Bit-Arithmetik benötigt "OPTION openbasic" wohingegen die On-Zeit-Messung "OPTION openmicro" benötigt. Es kann aber nicht beides auf einmal in einem Programm verwendet werden, da der Compiler OCBASIC das nicht zuläßt. Es kommt also zu einem Konflikt. Deshalb muß im Programm ein "OPTION openmicro" verwendet werden, welches in INCLUDE "om.def" bereits enthalten ist. Doch nun erzeugt der Compiler Code für die Open-Micro, in der 16-Bit-Konstanten auf 8-Bit reduziert werden, da die Open-Micro nur mit 8-Bit arbeitet. Wie im folgendem Demonstrationsprogramm gezeigt, müssen nun 16-Bit-Konstanten trickreich implementiert werden: INCLUDE "om.def" 'OPTION openbasic 'Keine Option ccbas oder openmicro verwenden! DIM OnZeit WORD DEFINE OnZeit_l BYTE[1] OF OnZeit 'LOW-Byte DEFINE OnZeit_h BYTE[2] OF OnZeit 'HIGH-Byte DIM entfernung WORD DIM hilfsvar WORD DEFINE hilfsvar_l BYTE[1] OF hilfsvar 'LOW-Byte DEFINE hilfsvar_h BYTE[2] OF hilfsvar 'HIGH-Byte [...] 'hier IIAR für On-Zeit-Messung und dahinter INCLUDE "16biterw.iia" #main URTok=ON '16-Bit-Erweiterung aktivieren OnZeit_h=&h9A 'OnZeit=-25911 - Demo OnZeit_l=&hC9 Print Onzeit IF OnZeit<0 THEN hilfsvar_h=1 'hilfsvar=350 hilfsvar_l=&h5e entfernung=hilfsvar+(OnZeit/187) PRINT entfernung;" cm (<0)" else Entfernung=OnZeit/187 PRINT Entfernung;" cm (else)" END IF End2Host=ON END Alle diese Tricks sind auf einer Open-Macro, für die der Code zur On-Zeit-Messung eigentlich gedacht ist, natürlich nicht erforderlich. Viel Spaß und Erfolg mit den OM-Mikrocontrollern! Dietmar Meine Homepage: http://ccintern.dharlos.de |
Antwort schreiben |