Forum: Mikrocontroller und Digitale Elektronik Daten per UART am HT


von heute (Gast)


Lesenswert?

hallo!


zum prüfren  meine Rechnungen im Program habe ich daten per UART am 
Hyper T ausgegeben. daten könne schon am Terminal ankommen. aber die 
Routine läuft in ein interrupt, das 1ms zykluszeit haben soll. die 
Ausgabecode dauer schon 0,4s und damit ann das programm nicht gut 
laufen. die  Baudrate habe ich 9600 ,8 Datenbit und 1 stopbit und keine 
parität wurde eingestellt.

1. ich will die die code für ausgabe von dem routine wo anders schreiben 
(in main  z.B) , damit die routine für meine berechnung seine zykluszeit 
richtig macht.meine einstellung sind Baudrate 9600, 8 datenbit, 1 
stopbit
muss unbedingt echtzeit programmiert? oder kann mann anders in main 
schreiben, so dass sogar die daten richtig am hyper T und die zykluszeit 
des Interrupt(1ms) richtig funktioniert.?

2.muss unbedingt die Baudrate auf 19200 ändern?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Sei so nett und lies Dir das noch mal durch. Meinst Du wirklich, daß 
andere Leute verstehen, was Du mitteilen willst?

von heute (Gast)


Lesenswert?

Rufus t. Firefly schrieb:
> Sei so nett und lies Dir das noch mal durch. Meinst Du wirklich, daß
>
> andere Leute verstehen, was Du mitteilen willst?

hallo Rufus,

entschuldigung wenn ich mich nicht richtig erklärt habe.
nicht schlimm anders könnte ich o formulieren.

ich benutze ein Timer-interrupt , das alla 1ms ein Interrupt auslösen 
soll.in dieser Zeit wird ein Rechenprogrambearbeitet. von diesem program 
will ich die Daten bzw. Rechnungsergebnisse mit UART am Hyper Terminal 
von PC ausgeben. aus internet habe einige code dafür benutzt. und kann 
ich schon nach jeder rechnung was ausgeben mit folgende code.




sprintf(array,"w=%d\n",w);
write(0,array);



#define CR     0x0D

int putchar(int ch)  {                   /* Write character to Serial 
Port  */

  if (ch == '\n')  {
      while(!(0x020==(COMSTA0 & 0x020)))
      {}
    COMTX = CR;              /* output CR */
    }
    while(!(0x020==(COMSTA0 & 0x020)))
    {}

   return (COMTX = ch);
}


int getchar (void)  {                      /* Read character from Serial 
Port */

     while(!(0x01==(COMSTA0 & 0x01)))
     {}
    return (COMRX);
}

void write (int file, char * ptr ) {
  //int i;
 // for (i = 0; i < len; i++)
 while(!(*ptr == 0))
 putchar (*ptr++);
  //return len;

}

damit bekommt man schon die ergebnisse im HT, nur dass, dieses Method 
viel zeit braucht ungefähr 0,5s für die ganze rutine.  der 
timer-interrupt soll nur 1ms dauert. deswegen finde ich nicht richtig 
die ausgabe indem routine Berechnung zu machen. will in dem Main machen, 
aber soll irgendwie anpassen, damit es nich so viel zeit braucht oder 
anders schreiben? das sind meine gedanken.

ich bin nicht so fit in softwareentwicklung. will aber gerne lernen.

vielen dank

von Ohforf S. (ohforf)


Lesenswert?

Bei nur 9600 baud klappt das nie in 1ms.
Pobier mal aus, wie schnell dein rs232 Interface läuft - mit etwa Glück 
gehen 115200 baud oder so, das spart viel Zeit.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Überleg mal, wie lange die Übertragung eines Zeichens bei 9600 Baud 
braucht, und zähle mal, wieviele Zeichen Du in Deiner Interruptroutine 
ausgeben willst.

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.