seriell daten an den pc

Gast #47101
Lesenswert?

Hallo..
ich möchte seriell an den pc daten senden ich benutze einen AT89C2051
(mit 11,0592MHz) der ist über einen max232 mit dem pc verbunden
zum programmieren verwende ich µvision2 von keil (demo version)
im ordner exampels habe ich eine datei namens "hello.c" gefunden
ich habe #include <AT892051.H> eingefügt, und den wert TH1
ausgerechnet.


#include <AT892051.H>
#include <stdio.h>       /* prototype declarations for I/O functions*/
#ifdef MONITOR51         /* Debugging with Monitor-51 needs   */
char code reserve [3] at 0x23;/* space for serial interrupt if*/
#endif                   /* Stop Exection with Serial Intr.   */
                         /* is enabled                        */
void main (void) {
#ifndef MONITOR51
    SCON  = 0x50;  /* SCON: mode 1, 8-bit UART, enable rcvr */
    TMOD |= 0x20;        /* TMOD: timer 1, mode 2, 8-bit reload   */
    TH1   = 208;        /* TH1:  1200 baud bei 11,0592MHz   */
    TR1   = 1;          /* TR1:  timer 1 run                     */
    TI    = 1;          /* TI:   set TI to send first char of UART*/
#endif
    while (1) {
    P1 ^= 0x01;       /* Toggle P1.0 each time we print */
    printf ("Hello World\n");/* Print "Hello World" */
  }
}



mit diesem programm bekomme ich aber kein zeichen in hyperterminal zu
sehen, und P1.0 toggelt auch nicht
nur wenn ich das programm mit µvusion simuliere dann toggelt P1.0
andere programme (z.B blinklicht,lauflicht) haben mit der schaltung
schon funktioniert.
kann mir da jemand weiterhelfen?

mfg
Roland
Gast #47106
Lesenswert?

Hallo..

ich hab gerade die verbindung vom atmel zum max232 und vom max232 bis
zum pc geprüft da müßte alles passen.
selbst wenn die verbindung nicht okay sein solte muß dan nicht P1.0
trotzdem toggeln?
Gast #47107
Lesenswert?

Hallo,

anstatt TI = 1 zu setzen musst du TI=0; machen.
Die putchar() Funktion wartet bis TI == 0 ist und sendet erst dann das
Zeichen aus. Ich habe diese Funktion so umgebaut, dass immer zuerst das
Zeichen gesendet wird und dann wird solange gewartet, bis das Zeichen
den Buffer verlassen hat.

Versuchs mal,

Gruss
Eugen
Gast #47108
Lesenswert?

Hallo

Ich hab jetzt noch ne verzögerung eingebaut und zum testen mal die
zeile mit printf rausgenommen dann hat P1.0 getoggelt aber sobald ich
printf wieder mit rein nehme tut sich am P1.0 nix mehr ich habe TI auch
mal auf 0 gestellt hat aber auch nix gebracht.

mfg
Roland
Gast #47109
Lesenswert?

jetzt habe ich "scon = 0x40" und "TH1=232" eingestellt in
hyperterminal saust jetzt der cursor über den bildschirm und zeigt
wilde zeichen an zwischen den zeichen sieht man ab an zu Hello World
stehen
was könnte da noch faul sein?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren