Forum: Mikrocontroller und Digitale Elektronik I/O Frage zum Atmel Studio 6 Debugger


von Det S. (juppy)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
ich als absoluter Anfänger benötige mal Eure Hilfe zum
Atmel Studio 6 Debugger.

Ich habe folgendes kleine Programm

#include <avr/io.h>

int main(void)
{
DDRB = (1 << DDB0) | (1 << DDB1) | (1 << DDB2) | (1 << DDB3) | (1 << 
DDB4);
while(1)
    {
  PORTB = 0x00;  // mal alle Ausgänge des Port B auf 0
  PORTB |= (1<<PB1);    // LED Gelb einschalten

    }
}
Meiner Meinung nach werden:
- die Ausgäne 0 - 4 des Ports B auf Richtung Ausgabe gesetzt.
- dann alle Ausgänge von PORT B auf 0
- zum Schluss wird der Port B1 auf 1 gesetzt => die LED leuchtet

Wenn ich aber den Simulator starte und die Zeile:
PORTB |= (1<<PB1);ausführe,
dann erhalte ich im Simulator folgende Anzeige ( s.Bild )

Was ich nicht verstehe, warum wird PINB1 auch auf 1 gesetzt ?

Gruß
Juppy

P.S. Sorry, keine Ahnung warum das Bild 2x vorkommt :-(

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Det S. schrieb:
> Was ich nicht verstehe, warum wird PINB1 auch auf 1 gesetzt ?

Weil PinB immer den (synchronisierten) Zustand vom PortB enthält.
In der Graphik "General Digital I/O" im Datenblatt, Anschnitt "Port as 
general digital I/O" sieht man das.

von spess53 (Gast)


Lesenswert?

Hi

>Was ich nicht verstehe, warum wird PINB1 auch auf 1 gesetzt ?

Das PIN-Register spiegelt den Zustand der Pins wieder. Wenn du einen Pin 
per Portregister auf 1 setzt wird auch das entsprechende Bit im 
Pin-Register gesetzt.

MfG Spess

von Amateur (Gast)


Lesenswert?

Is' doch nett!
Du setzt einen Port-Ausgang und das Register, mit dem man gerade diesen 
Port-Zustand abfragen kann, spiegelt diesen Zustand auch wieder.
Ich finde das das nett ist.

von Det S. (juppy)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Was ich nicht verstehe, warum wird PINB1 auch auf 1 gesetzt ?
>
> Das PIN-Register spiegelt den Zustand der Pins wieder. Wenn du einen Pin
> per Portregister auf 1 setzt wird auch das entsprechende Bit im
> Pin-Register gesetzt.
>
> MfG Spess

Hallo zusammen,
ist das generell so, oder ist meine Schreibweise nur falsch ?
Und gilt das auch anders herum ?

Sorry mein Englisch ist nicht das allerbeste ;-)

Vielleicht noch kurz eine andere Frage zum Debugger.
Wenn ich nach der Zeile
PORTB |= (1<<PB1);
noch
PORTB |= (1<<PB0);
schreibe und den Debugger starte und Schritt für Schritt durch das
Programm gehe, dann ändert sich die Anzeige erst nach der neuen Zeile
(PORTB |= (1<<PB0);) und nicht schon nach der ersten (PORTB |= 
(1<<PB1);)
Warum ist das so ?

Gruß
Juppy

von Det S. (juppy)


Lesenswert?

Amateur schrieb:
> Is' doch nett!
> Du setzt einen Port-Ausgang und das Register, mit dem man gerade diesen
> Port-Zustand abfragen kann, spiegelt diesen Zustand auch wieder.
> Ich finde das das nett ist.

Hmmmm,
Du hast Recht....
Darüber habe ich noch gar nicht nachgedacht ;-)

Tja, wieder was dazu gelernt... :-)

Gruß
Juppy

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.