Forum: Mikrocontroller und Digitale Elektronik Fragen zu Interrupts (AVR-Tutorial)


von Einsteiger (Gast)


Lesenswert?

Hallo
Kann mir jemand folgende Programzeile aus dem AVR-Tutorial (Interrupts) 
erklähren?
1
ldi temp, (1<<ISC01) | (1<<ISC11) ; <----
2
out MCUCR, temp
3
 
4
ldi temp, (1<<INT0) | (1<<INT1) ; <----
5
out GICR, temp
Danke

von ... .. (docean) Benutzerseite


Lesenswert?

Was verstehst du nicht?

Das << oder die Texte (INT0)?

von Der M. (steinadler)


Lesenswert?

Na in der oberen Zeile wird Bit ISC01 ISC11 gesetzt.
Und in der unteren Bit INT0 und INT1.

Oder habe ich die Frage falsch verstanden?

Was die Bits bedeuten, müsste sich im Datenblatt nachlesen lassen.

EDIT:
das << ist ein einfacher Schiebebefehl, der die Zahl davor um n Stellen 
nach links verschiebt. n ist hierbei die Zahl nach dem <<.
Das ganze gibts auch noch als >> in die andere Richtung

ISC01 beispielsweise hat irgendeinen konstanten Wert zwischen 0 und 7, 
weiß jetzt nicht genau, welchen.

von Einsteiger (Gast)


Lesenswert?

Ja war vll bischen ungeschickt formuliert! Meinte aber schon denn << 
Befehl, aber auch warum hier der Oder(|)-Operator verwendet wird und 
nicht der Und(&)?
Weis jetzt nicht genau ob ichs verstanden hab:
Also ich hab nachgeschaut und  ISC00 repräsentiert 0 und ISC01 müsste 1 
repräsentieren... Heißt das dann das durch den Befehl:
1
ldi temp, (1<<ISC01) | (1<<ISC11)
im Register temp das erste und zweite Bit auf gesetzt werden?
Bleibt aber immernoch die Frage mit dem | Operator...?

von spess53 (Gast)


Lesenswert?

Hi

>Bleibt aber immernoch die Frage mit dem | Operator...?

(1<<ISC01)= 01
(1<<ISC11)= 10

01 & 10 = 00
01 | 10 = 11

Klar?

MfG Spess

von Einsteiger (Gast)


Lesenswert?

Ok also habs verstanden denk ich :)
aber ich geh mal davon aus diese Werte nur Beispielhaft verwendet wurden 
oder?
[/avrasm](1<<ISC01)= 01
(1<<ISC11)= 10[/avrasm]
ISC01 stellt (beim atmega8 zuminderst) das 1te Bit dar und ISC11 das 
3te...

von spess53 (Gast)


Lesenswert?

Hi

>aber ich geh mal davon aus diese Werte nur Beispielhaft verwendet wurden
>oder?

Ja. Würde für ISC01=0 und ISC11=1 gelten.

MfG Spess

von Werner B. (werner-b)


Lesenswert?

Einsteiger schrieb:
> Ok also habs verstanden denk ich :)
> aber ich geh mal davon aus diese Werte nur Beispielhaft verwendet wurden
> oder?
> [/avrasm](1<<ISC01)= 01
> (1<<ISC11)= 10[/avrasm]
> ISC01 stellt (beim atmega8 zuminderst) das 1te Bit dar und ISC11 das
> 3te...

Darum verwendet man ja auch die symbolischen Namen aus dem Include File 
und nicht den numerischen Wert. Bei einem anderen Controller "können" 
das andere Werte sein. Dann hat man zumindest damit kein Problem beim 
Portieren.

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.