Forum: Mikrocontroller und Digitale Elektronik Atmel T89C51CC01 Ansteuerung des Comport


von Bob (Gast)


Lesenswert?

Hallo Zusammen!

Versuche für ein Schulprojekt einen Atmel T89C51CC01 mit der Software
µ-Vison und Borland C++ zu programieren. Leider bekonnte ich die
Verbindung über den Comportbis jetzt nicht herstellen. Die SIO.H habe
ich bis jetzt so angepasst:

void init(void){
PCON = 0x80;
SCON = 0x52;
TMOD = 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1 = 0xed; /* TH1: reload value for 4800 baud (vorher:f4) */
TR1 = 1; /* TR1: timer 1 run */
return;
}

Im Hauptprogramm versuche ich dann mit dem Befehl ->
printf("A"); über den Comport den Buchstaben "A" zu übertragen.
Leider hängt sich der Controller dann immer auf und arbeitet das
restliche nicht mehr ab.

Wo kann es dran liegen???

Bin über jeden Tip Dankbar!!!

freundliche Grüsse
  Bob

von Peter D. (peda)


Lesenswert?

TI = 1;


Peter

von Bob (Gast)


Lesenswert?

Danke Peter!

Es fängt langsam an zu laufen. Leider überträgt er nur ein 'Herz'
statt den Buchstaben 'A'. Bautrate denn richtig eingestellt???

Grüsse Bob

von Arthur (Gast)


Lesenswert?

Hallo Bob,

hast Du auch den Reloadwert in TL1 eingetragen ?
Stimmt deine Baudrate, sie ist abhängig von der
CPU-Frequenz.

Beispiel:
void init(void){
PCON = 0x80;
SCON = 0x52;
TMOD = 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1 = 0xed; /* TH1: reload value for 4800 baud (vorher:f4) */
TL1 = 0xed;
TR1 = 1; /* TR1: timer 1 run */
    .
    .
RI = 0;  // Empfängerinterrupt löschen
TI = 0;  // Sendeinterrupt löschen
ES = 1;  // Serialinterrupt freigeben
EA = 1;  // global interrupt
}

Beim senden:

SBUF = 0x41;     // Zeichen A
while(TI==0);    // Warten bis neues Zeichen gesendet
TI = 0;          // Sendeinterrupt löschen

Gruß,
Arthur

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.