
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
Hallo OMICRO IMLASM / Assembler Experten, folgendes unten aufgeführtes Programm läuft bei mir einwandfrei. Im Programmteil beim INLINE Assembler ist jedoch ein Assembler-Befehl den ich weder im Reference Manual noch im Data Book des M68HC08 entdecken konnte. ! sti 'Zeile 52: Interrupts deaktivieren; Welche Funktion hat der Befehl? Versuchsweise hatte ich den Befehl entfernt, dann funktioniert das Programm ebenfalls. Sehr interessant in diesem Programm ist die Datenübergabe von Assembler nach Basic. Vielleicht kann mir jemand weiterhelfen bez. dieses Befehls, vielen Dank im voraus Joe Fenk ###### ' * 11943_V2.BAS ' Sa 08.05.2010; Status 11943_V2.BAS geaendert von JFenk ' Welche Funktion hat Befehl STI in Zeile 51/52? Weder im Reference Manual noch im Data Book des M68HC08 konnte ich diesen Befehl entdecken ' hier Befehl STI in Zeile 51/52 entfernt; dadurch mal ca. 20 bis 40% schneller bzw meistens gleich schnell, wenn das Programm mehrmals geladen wird ' Programmumfang: 74Basic Bytes 0SysBytes 2RAM Bytes ' Messung Impulslaenge ca. 1msec =>Ausgegebene Werte: zaehler = 251; zaehler_H=2; zaehler_L=245 ==> Dezimal=757 ' Messung Impulslaenge ca. 2msec =>Ausgegebene Werte: zaehler = 186; zaehler_H=4; zaehler_L=186 ==> Dezimal=1210 ' wird STI ersetzt durch SWI in Zeile 51/52: dann laeuft Programm nicht ' Programmumfang: 74Basic Bytes 0SysBytes 2RAM Bytes ' Messung Impulslaenge ca. 1msec =>Ausgegebene Werte: zaehler = 200; zaehler_H=0; zaehler_L=0 ' Messung Impulslaenge ca. 2msec =>Ausgegebene Werte: zaehler = 200; zaehler_H=0; zaehler_L=0 ' !!!! belaesst man den Befehl STI in Zeile 51/52, dann werden ' Programmumfang: 74Basic Bytes 0SysBytes 2 RAM Bytes belegt; folgende Messergebnisse ' Messung Impulslaenge 1msec =>Ausgegebene Werte: zaehler = 14; zaehler_H=2; zaehler_L= 14 ==> Dezimal=526 ' Messung Impulslaenge 2msec =>Ausgegebene Werte: zaehler = 211; zaehler_H=3; zaehler_L=211 ==> Dezimal=979 ' abgeleitet von Eintrag 11943 Forum ccintern.dharlos.de ' urspruenglich fuer die Messung von Impulsen von 10 usec bis 20 usec ' Programmvorschlag von Dietmar Harlos ' -------------------------------------------------------------------------- ' Kurze Impulse mit der Open-Micro, Open-Mini und Open-Midi messen ' erstellt in OCBASIC 1.07 von Dietmar Harlos am 2. Advent 2006 ' -------------------------------------------------------------------------- INCLUDE "om.def" 'Definitionen fuer Open-Micro und Open-Mini DEFINE iport bPTA3 'PTA3 entspricht PORT[4]; von JF bPTA3 in PTA geaendert DEFINE zaehler WORD 'Speicher fuer Rueckgabe per Variable DEFINE zaehler_l BYTE[1] OF zaehler 'fuer Zugriff im BASIC, denn die DEFINE zaehler_h BYTE[2] OF zaehler ' Open-Micro kann kein WORD WHILE TRUE PRINT "Impuls=";impuls 'Aufruf und Rueckgabe des 8-Bit-Werts PRINT "Zaehler_H=";zaehler_h PRINT "Zaehler_L=";zaehler_l 'alternativ Rueckgabe per Variable PAUSE 100 WEND END FUNCTION impuls INLASM ! clrh '16 Bit Zaehler ! clrx ! sti 'Zeile 52: Interrupts deaktivieren; Welche Funktion hat der Befehl? #warte1 'solange warten, bis der Port auf LOW geht ! brset #iport,PTA,warte1 ' #warte2 ! aix #1 'Zaehler erhoehen (inkrementieren), bis ! brclr #iport,PTA,warte2 ' ! cli 'Interrupts wieder aktivieren ! sthx zaehler 'Zaehlerwert in einer Variable abspeichern. 'Das ist eine Moeglichkeit, den Wert des 'Zaehlers an das BASIC-Hauptprogramm 'zurueckzuliefern. 'Alternativ kann man wie im folgenden 'gezeigt, einen 8-Bit-Wert per Rechenstack 'an das BASIC-Programm zurueckliefern. In 'diesem Fall wird die Funktion mittels '"PRINT impuls" oder "variable=impuls" auf- 'gerufen und deren Wert zurueckgeliefert. ! txa 'nur die unteren 8 Bit des Zaehlers verwenden ! clrx 'und per Firmwareroutine FwPush auf den ! swi ' Rechenstack pushen 'Das SWI wirkt beim Aufruf von Firmware- 'routinen wie ein RTS. Ohne SWI ist also 'noch ein RTS erforderlich! END FUNCTION |
| Antwort schreiben |