Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > Ich brauche eine möglichst schnelle Datenausgabe über die RS232. > > Beim 1.Progr. mit IRQ funkt. die Datenausgabe nur mit Warteschleife. Das ist > > unschön - kostet wertvolle Rechenzeit. > > Kann man da noch was machen ? > > > > > > Das 2. Programm ohne IRQ funktioniert. > > > > > > > > > > > > /* > > Datenausgabe über die RS232 mit IRQ > > Die Ausgabe funktioniert nur mit der Warteschleife nach Serial_WriteText > > Nach dem Übertragen muß das Programm mit einem Hardware Reset gestartet werden > > > > */ > > > > byte buffer[SERIAL_BUF(25,20)]; > > > > void main(void) > > { > > char text1[20], text2[20]; > > text1= "Hello World! "; > > text2= "1234567890 "; > > word counter; > > > > // Init Schnittstelle mit xx baud, 8 Bit, 1 Stop Bit, keine Parität > > // 25 byte Empfangspuffer - 20 byte Sendepuffer > > Serial_Init_IRQ(0,buffer,25,20,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD38400); > > > > while(1) > > { > > Serial_WriteText(0,text1); > > counter=400; while(counter--); // Warteschleife ca. 5ms > > Serial_WriteText(0,text2); > > counter=400; while(counter--); // Warteschleife ca. 5ms > > > > > > } > > > > > > } > > > > ------------------------------------------------------------------------------- > > > > /* > > Datenausgabe über die RS232 ohne IRQ > > > > */ > > > > > > void main(void) > > { > > char text1[20], text2[20]; > > text1= "Hello World! "; > > text2= "1234567890 "; > > > > Serial_Init(0,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD38400); > > > > while(1) > > { > > Serial_WriteText(0,text1); > > Serial_WriteText(0,text2); > > > > } > > > > > > } > > > > > > > > > Hallo Hannes, > > Vielleicht lässt sich das mit einem Timerinterrupt lösen. > > Gruß Torsten > > <code> > > /*** SendSerialFast.cc ***/ > //------------------------------------------------ > > #define BOOL byte > > //------------------------------------------------ > > byte gaby_buffer[SERIAL_BUF(25,20)]; > char gac_text_1[20]; > char gac_text_2[20]; > BOOL gbo_state; > BOOL gbo_ready; > > //------------------------------------------------ > > void SendSerialValue(void) > { > int i_irqcnt; > > if(gbo_ready) > { > gbo_state = gbo_state ^ 0x01; > > if(gbo_state) > Serial_WriteText(0, gac_text_1); > else > Serial_WriteText(0, gac_text_2); > > gbo_ready = false; > } > > i_irqcnt = Irq_GetCount(INT_TIM0COMP); > } > > //------------------------------------------------ > > void main(void) > { > word w_counter_1; > word w_counter_2; > > gac_text_1 = "text 1 value: 00000"; > gac_text_2 = "text 2 value: 00000"; > > // Init Schnittstelle mit xx baud, 8 Bit, 1 Stop Bit, keine Parität > // 25 byte Empfangspuffer - 20 byte Sendepuffer > Serial_Init_IRQ( > 0, > gaby_buffer, > 25, > 20, > SR_8BIT | SR_1STOP | SR_NO_PAR, > SR_BD38400 > ); > > // Interrupt Routine definieren > Irq_SetVect(INT_TIM0COMP, SendSerialValue); > > // Zeit festlegen und Timer0 starten > Timer_T0Time(85, PS0_1024); > > while(1) > { > if(gbo_ready) > continue; > > if(gbo_state) > { > w_counter_2++; > Str_Printf(gac_text_2, "text 2 value: %5u", w_counter_2); > gbo_ready = true; > } > else > { > w_counter_1 = w_counter_1 + 10; > Str_Printf(gac_text_1, "text 1 value: %5u", w_counter_1); > gbo_ready = true; > } > > } > } > > //------------------------------------------------ > </code>