Hallo ich habe eine Frage zum Uart, wenn ich eine Zeichenkette
eingesesen habe und diese gespeichert wurde, kann man dann das
gespeicherte Byte auf PORTB des MC ausgeben?
Ich arbeite mit einem ATmega16 in C mit 4MHz und 4800 bps.
Den Quelltext habe ich aus dem AVR Tutorial ich bin mir aber nicht
sicher
das der Quelltext zu 100% richtig ist er hat zumindest kein error.
Danke an alle die sich die Mühe machen mir zuhelfen.
1
#include<stdlib.h>
2
#include<avr/io.h>
3
#include<util/delay.h>
4
#include<inttypes.h>
5
#define F_CPU 4000000L
6
#define BAUD 4800L
7
#define ubrr_value ( ( F_CPU / (16*BAUD) ) - 1 )
8
9
10
uint8_tuart_getc(void);
11
voidinitusart();
12
voiduart_gets(char*Buffer,uint8_tMaxLen);
13
14
intmain(void)
15
{
16
voidinitusart();
17
uint8_tuart_getc(void);
18
voiduart_gets(char*Buffer,uint8_tMaxLen);
19
}
20
21
/* Zeichen empfangen */
22
uint8_tuart_getc(void)
23
{
24
while(!(UCSRA&(1<<RXC)));// warten bis Zeichen verfuegbar
25
returnUDR;// Zeichen aus UDR an Aufrufer zurueckgeben
26
}
27
28
//Zeichen sammeln und zum String zusammen setzen
29
voiduart_gets(char*Buffer,uint8_tMaxLen)
30
{
31
uint8_tNextChar;
32
uint8_tStringLen=0;
33
34
NextChar=uart_getc();// Warte auf und empfange das nächste Zeichen
Irgenwie passt "Zeichenkette" und "kann man dann das gespeicherte Byte
auf PORTB des MC ausgeben" nicht zusammen??
Die Ausgabe fehlt ja völlig, darum kann man ja auch nicht sehen, was du
genau willst.
Und vielleicht nochmal in die Grundlagen von C reingucken, wie das mit
den Funktionen und der Variablenübergabe geht, da stimmt so einiges
nicht. Es wird nix gespeichert. Zusammenkopieren alleine löst deine
Aufgabenstellung nicht.
NextChar=uart_getc();// Warte auf und empfange das nächste Zeichen
15
// Sammle solange Zeichen, bis:
16
// * entweder das String Ende Zeichen kam
17
// * oder das aufnehmende Array voll ist
18
19
20
while(NextChar!='\n'&&StringLen<MaxLen-1){
21
*Buffer++=NextChar;
22
StringLen++;
23
NextChar=uart_getc();
24
}
25
}
kann mir jemand sagen wie ich
void uart_gets( char* Buffer, uint8_t MaxLen );
in main ändern muss damit ich die Funktion die dahinter steckt aufrufen
kann.
>Hallo ich habe eine Frage zum Uart, wenn ich eine Zeichenkette>eingesesen habe und diese gespeichert wurde, kann man dann das>gespeicherte Byte auf PORTB des MC ausgeben
Was willst Du machen? Welches gespeicherte Byte willst Du aus der
Zeichenkette ausgeben? Wie könnte denn deine Zeichenkette aussehen?
>Und vielleicht nochmal in die Grundlagen von C reingucken, wie das mit>den Funktionen und der Variablenübergabe geht, da stimmt so einiges>nicht. Es wird nix gespeichert. Zusammenkopieren alleine löst deine>Aufgabenstellung nicht.
Dem kann man nur recht geben
Man kann dir nicht helfen, da man nicht weiß was du willst!!
Da steht einerseits irgendwas mit Zeichenkette und gleichzeitig das
gespeicherte Byte ausgeben. Ja aber eine Zeichenkette besteht aus vielen
Bytes, so ist es sehr schwer zu erahnen welches du den gern hättest!!!
>insgesamt werden 10 Byte in den Uart geladen
Wie würde dann die main-Funktion ausschauen, da fehlt doch was.
>void uart_gets( char* Buffer, uint8_t MaxLen );
Welche Parameter braucht diese Funktion?
Ja sorry wenn ich euch durch einnander gebracht habe.
Ich möchte die eingelesenen Byte z.B.00010011 00101001 0011010 auf den
Ausgang PORTB ausgeben. Wenn die z.B. 00010011 eingelesen wurde soll auf
PORTB 0=0 erscheinen und wenn das nächste Byter kommt soll
PORTB 1=0
PORTB 2=0
PORTB 3=1
PORTB 4=0
PORTB 5=0
PORTB 6=1
PORTB 7=1
auf PORTB halt das nöchste Byte angszeigt werden.
So mit dem Quelltext kann ich Daten empfangen und wenn man UDR (unter
uint8_t uart_getc(void)) auf einen Ausgang gibt kann man auch die Bits
sehen die empfangen wurden.
Eine eigene Frage?
Dieser Thread ist über 18 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.