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
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.
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
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.
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
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.