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 

 Inline / Assembler Befehl sti Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Joe - 14.05.2010 19:47)
Joe nutzt:  CC1-M-Unit V1.1, CC1-Station V2.0, Micro, Open-Micro
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
   Print
   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

Bisherige Antworten:

Re: Inline / Assembler Befehl sti (von Dietmar - 16.05.2010 20:55)
    Re: Inline / Assembler Befehl sti (von Joe - 18.05.2010 18:34)