Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 bei Open-Micro Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 23.03.2016 22:24)
 Als Antwort auf Re: über 32767 von Dietmar - 22.03.2016 13:41
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini M-Unit, Open-Mini Station
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

Bisherige Antworten: