Re: Mega32: Probleme mit Datenausgabe über RS232 IRQ Kategorie: Programmierung C (von Hannes24 - 16.01.2017 13:56) | |
Als Antwort auf Re: Mega32: Probleme mit Datenausgabe über RS232 IRQ von Torsten - 16.01.2017 12:03
| |
> > > > Hallo Torsten, > > > > das Programm bringt im Prinzip nichts. Ich will ja nicht nur 2 Strings timerverzögert > > ausgeben, sondern eine Vielzahl von Ausgaben in mehreren Funktionen machen. > > > > Wie es scheint muss die Ausgabe eines Strings erst beendet sein, bevor der nächste > > ausgegeben wird. Dazu müsste ich wissen, wann die Ausgabe abgeschlossen ist. > > Mich würd auch interessieren, ob während der seriellen Ausgabe das Hauptprogramm weiter > > abgearbeitet wird oder in der Zeit still steht. Im Manual steht dazu herzlich wenig. > > > > > Hallo Hannes, > > im sogenannten "Interruptbetrieb" läuft das Hauptprogramm parallel > zur seriellen Ausgabe weiter. Die Funktion "Serial_WriteText(0, gac_text_2);" > kehrt sofort wieder zurück. Du musst deine Aufrufe synchronisieren. > Eine Lösung für die Umsetzung sollte das obige Programm zeigen. > > Gru� Torsten Du hast recht, während der Datenausgabe (alle 10ms in RTC) läuft das Hauptprogramm (Port_ToggleBit(30))ungestört weiter. Sowas könnte man ins Manual schreiben ! // Testprogramm #define LED1_Ein Port_WriteBit(30,1) // Port D.6 #define LED1_Aus Port_WriteBit(30,0) byte buffer[SERIAL_BUF(20,30)]; byte Stunde,Minute,Sekunde,cnt1_10ms,cnt2_10ms,n; word counter; char text1[30]; void main(void) { text1= "Hallo Welt 012345 "; Port_DataDirBit(30,1); // Port D.6 auf Ausgang = LED1 Serial_Init_IRQ(0,buffer,20,30,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD38400); Irq_SetVect(INT_TIM2COMP,INT_10ms); // ISR RTC while(1) { Port_ToggleBit(30); // LED1 EIN-AUS } } //--------------------------------- Interrupt alle 10ms ---------------------------------- // void INT_10ms(void) { int irqcnt; RTC(); // Funktionsaufrauf: RTC irqcnt=Irq_GetCount(INT_TIM2COMP); // Interrupt Request Counter } //-------------------------------------- Real-Time-Clock --------------------------------- // void RTC(void) // Aufruf alle 10ms { Serial_WriteText(0,text1); // String seriell ausgeben; Dauer ca. 5ms cnt1_10ms++; cnt2_10ms++; if (cnt1_10ms==100) // jede Sekunde { Sekunde++; if (Sekunde==60) // jede Minute { Sekunde=0; Minute++; if (Minute==60) // jede Stunde { Minute=0; Stunde++; if (Stunde==24) Stunde=0; } } cnt1_10ms=0; } } SerialOUT.JPG: | |
Antwort schreiben Antworten: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum