Liste der Anhänge anzeigen (Anzahl: 2)
das ist er wieder...
Hallo mare_crisium,
lang hats gedauert... (hatte leider nicht so viel Zeit - Sorry)
Aber nun moechte ich mein Werk wieder einmal vorstellen.
Vieles von Deinem Posting habe ich uebernommen, aber auch manches abgeaendert.
Aenderungen:
- Habe nun fuer High und Low-Flanken je ein Register rTAST_High_FLANKEN und rTAST_Low_FLANKEN(wird aber noch nicht ausgewertet)
- das marco _FLANKEN_SICHERN habe ich mit Abfragen auf HIGH und LOW erweitert
!!! wobei mir das noch nicht ganz gefaellt !!!
??? in der ISR wollte ich abfragen, ob eine Flanke anliegt und nur dann diese sichern
Code:
sbrc r16,3 ; Abfrage ob Flanke ansteht
_FLANKEN_SICHERN(LED_TASTE_0) ;
Das funktioniert nur leider nicht, musste ich feststellen.
Ist aber klar, wenn man sich anstelle des Aufrufs die Instruktionen vorstellt.
-> springe ich ja nur eine Instruktion weiter und nicht ueber das komplette macro
??? Kann ich bei rcall-Aufrufen auch ein Parameter mit uebergeben aehnlich wie beim _macro(@0) ???
- Register rLED_Update-Sprr ist ersetzt durch rIO_config
rIO_config soll mehr Infos aufnehmen als nur die Sperrung der Prozedur LED_Update
z.B. angedacht Lesen und Schreiben des EEPROM als Bit 1 und 2 usw...
- GET_HIGH_NIBBLE habe ich auch ein wenig veraendert
anstelle von
andi r16,0x0F ; unteres Nibble freistellen
kam:
andi r16,0x07 ; unteres Nibble freistellen und Flankenbit loeschen
die Zeile "andi r16,0x07" kam in der ISR im naechsten Schritt und wird somit ueberfluessig.
- den Kommentar habe ich auch angepasst und hoffe das es nun lesbarer ist - lese es am Besten in 3 Tagen noch einmal, um zu sehen ob es nun passt ;-)
// im grossen und ganzen muss ich sagen, wurde der Code durch das Auslagern der Unterprogramme wesentlich ueberschaubarer
so nun aber hier der Code:
diesmal angehaengt - wegen der 20.000er
Liste der Anhänge anzeigen (Anzahl: 1)
robo_wolf,
Zitat:
Zitat von robo_wolf
Hallo are_crisium,
Wenn man ein Paramter uebergibt, dann geht es auch mit mehr...?
ja, natürlich. Nur ist die Parameterübergabe immer implizit - damit meine ich: Der Benutzer muss vorher wissen, welcher Parameter in welchem Register steht. Solche praktischen Aufrufe, wie z.B. FLANKEN_SICHERN( LED_TASTE0), gibt's meines Wissens nur in Hochsprachen wie Pascal, aber in keinem Assemblerdialekt. - Deshalb muss man ein Macro gebasteln, um die Pascal-ähnliche Schreibweise zu simulieren.
Wenn man der Prozedur die Parameter in Registern übergeben muss, ist es hilfreich, eine Beschreibung der Prozedur zu haben, die angibt, welche Parameter in welchen Registern stehen müssen. Deshalb hat in meinen Programmen jede Prozedur so einen ausführlichen Vorspann. Andernfalls muss man erst den ganzen Quelltext der Prozedur wieder durchlesen und verstehen (;-)!) , bevor man sie benutzen kann.
Alternativ kann man der Prozedur auch Parameter übergeben, die im RAM stehen: Entweder auf dem Stack (so macht das Pascal) oder in einem Datenblock. Diese letzte Methode verwende ich auch in der angehängten Version Deines Lernprogramms. Da geht es nämlich um das Auslagern von Daten ins RAM :-) .
Dann man viel Spass!
Ciao,
mare_crisium