www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ISR Routinen Auswahl ???


Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich hab wieder einmal ein etwas "komisches" Bascom Problem.
Ich will am Anfang des Programms 2 Pin's die mittels DIP Schalter
auf HI od . Lo gesetzt sind abfragen und je nach Wert
die Interrupt's INT0 und INT1 in verschiedene Interruptroutinen
springen lassen.

Mein Bascom-Programmteil:

Dip = Portd And &B00000011   'Portd.0 und Portd.1 abfragen
Select Case Dip
Case 2
 On Int0 ISR_0_4x Nosave
 On Int1 ISR_1_4x Nosave
 Enable Int0
 Enable Int1
Case 1
 On Int1 ISR_1_2x Nosave   '***********
 Enable Int1
Case 0
 On Int1 ISR_1_1x Nosave   '***********
 Enable Int1
End Select
Enable Interrupts

Nun sagt mir Bascom beim Compilieren (in den Zeilen mit den
Sternchen)dass die ISR schon definiert sind. Also Fehler !!

Hab's auch schon mit IF Then Else versucht . Geht auch nicht.
Hat da wer eine Lösung wie ich das machen kann.
Vielen Dank im Voraus.

Gruss Gerhard

Autor: Thomas Oly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hab von Bascom keine Ahnung in Assembler würd ichs aber so machen das
erstmal eine Interrupt-Routine angesprungen wird und dann erst hier zu
schauen wie die DIPS stehen kannst ja dan immer noch woanderst
hinspringen.

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ebenfalls von BASCOM null Ahnung :-)
sieht so aus, als ob der Befehl on int... trallala
nur global verwendet wird.

Du könntest anstatt dessen das Ergebnis deiner DIP-Auslese-
Aktion (nur am Anfang wie ich jetzt interpretiere) in eine
Konfigurationsvariable schreiben.
Wenn die Interrupts dann bei dieser während des Programmablaufs
vorbeischauen, wissen die bescheid und du sparst dir
das herumgespringe in BASCOM.

Gruß,
Micha

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ON INT1 bedeutet global, dass er bei einem Interrupt1
(Hardwareinterrupt) an die angegeben Adresse springt.

Diese Adresse kannst Du natürlich nur einmal angeben, also nicht
dynamisch.

Wie bereits vorgeschlagen, musst Du EINE INT0 und EINE INT1 Adresse
angeben, und dort die Dipswitches (oder den Zwischenspeicher dafür)
abfragen.

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Danke für eure Antworten.
War mir schon klar dass es so geht.
Wollte nur vermeiden den Status der Schalter bzw. den Wert der
Variablen bei jedem Auftreten von INT0 bzw.INT1 abzufragen, weil
diese Routinen sehr zeitkritisch sind.
Deswegen wollte ich die Sache am Programm-Anfang einrichten.

Gruss Gerhard

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ginge schon, wenn Du einen indirekten Jump machst, dessen Adresse im
Ram oder eonem Register steht. Vorher testest Du die Switches und setzt
die Adresse im Ram entsprechend.
Oder, wenn Dein uC Code im Ram ausführen kann, läßt Du den IRQ-Vektor
ins Ram zeigen und schreibst den entsprechenden jmp in Abhängigkeit von
den Switches ins Ram.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.