Forum: Mikrocontroller und Digitale Elektronik Interrupt ATTINY13 mit BASCOM


von Freddy (Gast)


Lesenswert?

Guten Tag,

ich habe versucht beim ATTINY13 einen Interrupt auszulösen, der während 
die Led am pin3 blinkt, trotzdem PortB.4 schaltet.
Es blinkt zwar, aber das wars auch schon- mehr geht nicht.
Vl. kann mir jemand helfen?
Grüsse Freddy
1
$regfile = "attiny13.dat"                                   'Prozessor
2
$crystal = 9600000
3
Config Portb.3 = Output
4
Config Portb.4 = Output
5
Config Pinb.0 = Input
6
7
Config Int0 = Falling
8
Enable Int0
9
Enable Interrupts
10
11
Portb.1 = 1                                                 'Pullup an
12
13
Do
14
Set Portb.3
15
Waitms 100
16
Reset Portb.3
17
Waitms 100
18
Loop
19
20
Onint0:
21
Toggle Portb.4
22
Return
23
24
End                                                         'Ende

von Route_66 H. (route_66)


Lesenswert?

Hallo!
Der INT0 liegt auf Portb.1! Auf Portb.0 liegt der PinChangeInterrupt0.
Wo liegt Dein Eingangssignal? Im Listing stehen beide.

von Freddy (Gast)


Lesenswert?

sorry, war mein Kopierfehler. Habe beides probiert, aber dann das 
falsche gelöscht.
Danke schonmal.

Richtig ist:

...Config Pinb.1 = Input  'also an pin6 hängt der Taster
......
...Portb.1 = 1

Aber es klappt trotzdem nicht.

Gruß Freddy

von Route_66 H. (route_66)


Lesenswert?

Freddy schrieb:
> Aber es klappt trotzdem nicht.

Sorry, ich bin Assembler-Programmierer BASCOM tue ich mir nicht an.

> 'also an pin6 hängt der Taster
Schon mal gehört, dass Taster prellen?

von Jöhörg (Gast)


Lesenswert?

Freddy schrieb:
> Onint0:
> Toggle Portb.4
> Return

Das ist die ISR. Aber wie wird die angesprungen? Da gehört noch ein "ON 
INT0 ..." (siehe manual) hin.

von Simpel (Gast)


Lesenswert?

Du musst oben auf das den Name deiner Interruptroutine verweisen.

On INT0 Onint0

(Die "On"-Anweisung sagt dem Interrupthandler, zu welchem Label er 
springen muss, wenn der Interrupt ausgelöst wird. INT0 ist die 
Interruptbezeichnung, wie sie im Datenblatt spezifiziert ist. "Onint0" 
ist das Label, bzw. der Name den du seiner Interruptroutine gegeben 
hast.

Ich benenne der Übersichtlichkeit wegen alle Interruptroutinen am Anfang 
mit ISR_     (ISR = Abkürzung für "InterruptServiceRoutine"

Also in deinem Fall würde ich als Label "ISR_INT0" nehmen.

Oben würde dann stehen:
On INT0 ISR_INT0

von Freddy (Gast)


Lesenswert?

Hallo,

alles klar und vielen Dank. Tatsächlich fehlte der Aufruf.
Jetzt funktionierts wie gewünscht.
Grüße Freddy.

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
Noch kein Account? Hier anmelden.