UART mega32 ... die 100000te

Gast #514818
Lesenswert?
• ▲
▼
hey,

serielle schnittstelle des mega32 initialisieren :



//---- enable receiver and transmitter + receive interrupt ----//
  UCSRB = BIT7 | BIT4 | BIT3;   -> OK

//------------- set baud rate ---------------------------------//
  UBRRH = 0x00;     // 115200 baud @ 11.0592MHz
  UBRRL = 0x05;                 -> OK

//------------- set frame + data format -----------------------//
  UCSRC = (BIT7 | BIT2 | BIT1);      // 8data + 1stop (0x86)
-->>>>> .. das sch... register lässt sich nicht setzen



emulator mkII : wenn ich das datenformat (register UCSRC) setzen will, 
wird der wert nicht ins register übernommen. diese register werden 
unmittelbar nach dem reset gesetzt (keine int-requests, keine timer, 
...)
habe schon alle möglichen variationen probiert ... ohne erfolg !!!!


vielleicht kann mir jemand helfen ?!?


thx
neubi
Gast #514844
Lesenswert?
• ▲
▼
> //------------- set frame + data format -----------------------//
>  UCSRC = (BIT7 | BIT2 | BIT1);

ich hoffe mal hinter Bit7 steht dann (per define oder so) (1<<7) weil 
wenn da nur die 7 hintersteht machst du nix anderes als
(7 | 2 | 1)
und das ist sicher nicht das was du willst.

Gruß
Fabian
#514941
Lesenswert?
• ▲
▼
Neubi wrote:
> #define  BIT0                 0x01
> #define  BIT1                 0x02
> #define  BIT2                 0x04
> #define  BIT3                 0x08
> #define  BIT4                 0x10
> #define  BIT5                 0x20
> #define  BIT6                 0x40
> #define  BIT7                 0x80
>
>
> ... und der dreck geht noch immer nicht :) ...

Nicht, dass die Bits schon als Makro in der io.h (avr-gcc 
vorrausgesetzt) mit den Namen aus dem Datenblatt vorhanden wären, und 
die Benutzung dieser, das Programm auch übersichtlicher gestalten würde.

>  UCSRC = (BIT7 | BIT2 | BIT1);      // 8data + 1stop (0x86)
Bis auf die total sinnfreien Bezeichnungen stimmt es.

Wie wäre es mit etwas mehr Code?
Gast #515253
Lesenswert?
• ▲
▼
//------------- set frame + data format -----------------------//
  UCSRC = (BIT7 | BIT2 | BIT1);      // 8data + 1stop (0x86)
-->>>>> .. das sch... register lässt sich nicht setzen

Das was du da machst ist völlig in Ordnung.
Brenn das mal in einen ATMega32.
Wenn es funktioniert schmeiss deinen Emulator weg.

Holger
Gast #515305
Lesenswert?
• ▲
▼
Du hast natürlich im Datenblatt die geschichte mit der I/O Adresse von 
UCSRC und UBRRH gesehen und natürlich in der Hilfe für das AVR-studio 
(in der auch ALLE anderen Atmel-sachen die zu AVRs gehören beschrieben 
sind) gesehen, dass man mit dem JTAG das UCSRC GAR NICHT lesen kann (hab 
in der Hilfedatei nach "UCSRC" gesucht/suchen lassen...). steht unter 
"special considerations"-> "JTAG Interface specific considerations"

sry, bin ein bischen sarkastisch und zu belesen ;)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.