-
          
	
		
		
	
	
	
	
		
	
	
		
			
- 
	
	
		
			
			
				Neuer Benutzer
			
			
				Öfters hier
			
			
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
				
					Adresse von Basic aus weitergeben ???
				
				
						
						
				
					
						
							Hi leute 
Möchte Adresse von PCF 8574 AP aus Basic weitergeben in Assembler. 
Wie kann ich mir sicher sein, das diese Adresse unter $96 im Assembler 
auftaucht. 
Danke
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
			
			
				Administrator
			
			
				Robotik Visionär
			
			
			
			
			
				
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
						
						
				
					
						
							Du kannst in Assembler auf alle Basic Variablen zugreifen. Du mußt nur daran denken das die Basic Variablen immer bei $0A1 anfangen. Es ist also wichtig in welcher Reihenfolge du welche Variablentypen in Basic definierst.
Zum Beispiel hab ich als erstes imme rfolgendes in Basic definiert:
define Adresse byte 'Bytevar $0A1 für I2C Bus
define Daten byte   'Bytevar $0A2 für I2C Bus
Dann konnte ich auch in Assembler über $a1 auf Adresse und $a2 auf Daten zugreifen. Genauso geht es mit nachfolgenden Variablen. Du mußt nur bedenken das Variablen vom Typ Word beispielsweise 2 Bytes benötigen. Also aufpassen beim weiterzählen. Am besten wie ich immer die Adresse dahinterschreiben
Übrigens beim AVR-Basic (Bascom-Compiler) ist das alles etwas einfacher, zudem braucht man da Assembler kaum. Also wenn man beginnt viel in Assembler zu machen und an die Grenzen von 250 Byte kommt, dann ist das ne tolle Alternative.
Gruß Frank
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
			
			
				Erfahrener Benutzer
			
			
				Roboter-Spezialist
			
			
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
						
						
				
					
						
							CCBASIC pusht die Parameter des SYS Aufrufs als WORDs auf den Stack; der Stack begint ab $91(HI)/$92(LO); durch den PUSH wrden die WORDs "von hinten nach vorne" gepusht.
Also:
SYS ADDR DREI, ZWEI, EINS
pusht die drei WORDs
"EINS" nach 91/92,
"ZWEI" nach 93/94
"DREI" nach 95/96
und startet das Assembler-Prog auf ADDR.
Wenn in DREI die PCF-Adresse steht (z. B. DREI = &H70),
dann steht in $96 der LO-Teil davon ($70), und in $95 der HI-Teil (0).
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
		
			
				
				
						
						
				
					
						
							Die erste Methode ist immer dann sinnvoll, wenn auch von Assembler an Basic übergeben werden müssen.
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
		
			
				
				
						
						
				
					
						
							Hi....Danke für Antwort.
Ich komme aber nicht weiter......es geht einfach nicht.
Ihr mal kurz das Basic.
define adresse byte
define wert byte
define richtung byte
define ausgabe byte
define nummer byte
nummer = 0
#loop
        adresse = &H70     ;PCF 8574 AP
        richtung = &H00000001
        wert = nummer
        sys &H0101 adresse,wert,richtung 
        Pause 50
        nummer = nummer + 1 
        print ausgabe
        print nummer
goto loop
syscode "I2CASM.S19"
im Assembler sieht das so aus:
cport  equ  $02    	;Digitalport 9-16
cpdir  equ  $06    	;Richtung Port c
daten  equ  0		;Port(9)
clock  equ  1     	;Port(10)
richtung equ $92	;Schreiben(1),Lesen(0)
i2cwert  equ $94	;Stackwert(Uebergabe
adresse  equ $96	;aus Basic
ausgabe  equ $A1	;Basic Useradresse
merker   equ $91	;RAM - Variable
wert     equ $93	;RAM - Variable
Es ist bestimmt nur eine sache der Variablen.
Denn der Assembler läft, sehe ich an den Pausenzeiten.
Es muß ja nur ein Zeichen kommen, dann weiß ich auch wo ich ansetzen muß.
Aber es geht ja gernicht.
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
			
			
				Erfahrener Benutzer
			
			
				Roboter-Spezialist
			
			
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
						
						
				
					
						
							Wenn nur ein einziges WORD von Assembler an Basic übergeben werden muss ("return value"), dann geht auch die zweite Methode:
Man schreibt das Ergebnis-WORD im Assembler nach $91/$92, und kann es dann nach dem SYS Aufruf in Basic lesen:
result = assembler
mit
#assembler
SYS ADDR...
RETURN
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
			
			
				Erfahrener Benutzer
			
			
				Roboter-Spezialist
			
			
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
						
						
				
					
						
							Ich hab Dein Basic / Assembler - Programm so verstanden:
In Assembler schreibst Du ein Ergebnis nach "ausgabe"; das ist $A1.
In Basic printest Du "ausgabe".
Das liegt aber nach Deinen DEFINEs (wegen automatischer Vergabe der Adressen durch den Compiler) nicht auf $A1, sondern auf $A4; auf $A1 liegt "adresse".
Also z. B.
In Basic als erstes DEFINE die "ausgabe" hinschreiben
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
			
			
				Neuer Benutzer
			
			
				Öfters hier
			
			
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
						
						
				
					
						
							Ich möchte im Basic die Adresse für den Pcf angeben und dies in Assembler übernehmen.
Danach muß ich im Basic angeben, ob er schreiben oder lesen soll.
Das erfolgt duch die Angabe der Richtung. (&H00000001)
Nun muß der Wert übergeben werden, den er dann im Assembler schreiben soll.
Habe auch eine Relaiskarte angeschlossen um den Erfolg zu sehen.
Der wert soll bei 0 beginnen und um +1 add. werden.
Nach jedem schreiben müsste ein Relais schalten.
Es stimmt entweder die adresse für PCF nicht oder der wert wirt nicht übergeben.
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
			
			
				Erfahrener Benutzer
			
			
				Roboter-Spezialist
			
			
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
						
						
				
					
						
							Hast Du das Basic DEFINE für "ausgabe" schon angepasst?
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
			
			
				Neuer Benutzer
			
			
				Öfters hier
			
			
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
						
						
				
					
						
							Ja hab ich 
Hat den der PCF 8574 AP denn überhaupt die Adresse &H70 ??
ist &h70 = &H01110000 ?
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
		
		
		
	
 
	
	
	
	
	
	
	
	
	
	
	
	
		
		
		
		
			
				
				Berechtigungen
			
			
				
	
		- Neue Themen erstellen: Nein
 
		- Themen beantworten: Nein
 
		- Anhänge hochladen: Nein
 
		- Beiträge bearbeiten: Nein
 
		-  
 
	
	
	Foren-Regeln
 
			 
		 
	 
 
  
 
  
 
Lesezeichen