Forum: Mikrocontroller und Digitale Elektronik AVRStudio Simulator + USART (Atmega16)


von Floh (Gast)


Lesenswert?

N'abend!

Bevor nun die ersten wohl berechtigterweise gleich mit den Köpfen 
schütteln... die Such Funktion war nicht so ergiebig wie ich es gern 
gehabt hätte.

Also, mir ist nicht so ganz klar warum der AVR Studio Simulator nicht 
das tut was er sollte.

Hier nen kleiner Auszug aus dem Code:

---------------------------------------------------
UBRRH = UBRR_VAL;
UCSRA = ( 1 << RXEN );
UCSRC = (1<<URSEL) | (1<<USBS) | (3<<UCSZ0);

...

PORTC |= USART_Receive();

...

uint8_t USART_Receive()
{
   while (!(UCSRA & (1<<RXC)))   // warten bis Zeichen verfuegbar
    return UDR;         // Bit zurückgeben
}
----------------------------------------------------

Theoretisch sollte doch an PortC das erste Bit gesetzt sein, wenn ich in 
der while Schleife das UDR Bit und das RXC Bit auf 1 setze?

Warum tut er das nich?

Vielen Dank im vorraus! :)

Flo

von spess53 (Gast)


Lesenswert?

Hi

AVR-Studio->Help->Simulator->Known Issues

MfG Spess

von Floh (Gast)


Lesenswert?

"The UART/USART UDR register can only be modified from the application. 
Input via stimuli files or by modifying the I/O view etc is not 
possible.

Terminal I/O window is not implemented. This feature is available in AVR 
Studio 3.xx."

Ah ok, danke :).

Hätte ich allerdings gleich mal noch die nächste Frage. Im Tutorial und 
an mehreren anderen Stellen wird das Einlesen von einem "Zeichen" immer 
durch diese while Schleife realisiert.

Was gibt denn dieses UDR genau zurück? Ein Bit? Ein Byte? Das Byte das 
zwischen Start/Stop Bit(s) steht?  Konnte dazu auch im Datenblatt nix 
finden.

Und Danke im vorraus nochmal!

von Floh (Gast)


Lesenswert?

Achja, macht es u.U. Sinn für solche Tests aufs AVRStudio 3.xx 
umzusteigen?

Ist es sehr aufwändig sich in andere IDEs die das unterstützen 
einzuarbeiten?

von spess53 (Gast)


Lesenswert?

HI

>Achja, macht es u.U. Sinn für solche Tests ...

Nein. Die AVR-Studios 3.xx waren in der Simulation auch nicht besser. 
Als notorischer Assemblerprogrammierer kann ich dir auch nur bedingt 
helfen.

Der Simulator reagiert zumindest auf ein manuelles Setzen der 
entsprechenden Bits richtig.

Ich würde kannst du an der Stelle :
>while (!(UCSRA & (1<<RXC)))   // warten bis Zeichen verfuegbar

einen Breakpoint setzen und dann die Bits setzen

MfG Spess

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.