Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Mega32: Probleme mit Datenausgabe über RS232 IRQ Kategorie: Programmierung C (von Torsten - 15.01.2017 17:03)
Als Antwort auf Mega32: Probleme mit Datenausgabe über RS232 IRQ von Hannes24 - 13.01.2017 14:25

> 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



/*** 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;
            }

        }
    }

//------------------------------------------------



    Antwort schreiben


Antworten:

Re: Mega32: Probleme mit Datenausgabe über RS232 IRQ (von Hannes24 - 16.01.2017 10:04)
    Re: Mega32: Probleme mit Datenausgabe über RS232 IRQ (von Torsten - 16.01.2017 12:03)
        Re: Mega32: Probleme mit Datenausgabe über RS232 IRQ (von Hannes24 - 16.01.2017 13:56)