[HWnews] 8051 serial v C

Jiří Sloupenský jsloupensky@ktuo.cz
Sobota Duben 3 11:46:20 CEST 2004


To mě teda zajímá.    Mám takovouto incializaci :

ser_init(Timer1Mode1ReloadValue);   - tohle nastaví rychlost


    SBUF = 'A';   tenhle  znak se nevyšle

    ser_out('R');
    ser_out(KeyCR);   Tohle se už vyšle ( viz vysílací rutina dále )

Až do teď jsem si myslel, že TI je výstupní bit, který se nahodí až když
přijde přerušení od sériového kanálu od vysílače.  Protože sériový kanál má
jen jedno společné přerušení, je v přerušovací rutině nutné nejdřív zjistit,
zda to je od přijímače ( RI) nebo vysílače ( TI). Pak se spustí příslušná
obsluha příjmu nebo vysílání a na konci se RI nebo TI smaže.  Může se stát,
že jsou nahozeny i oba bity, takže je potřeba spustit při jednom přerušení
obě obsluhy.  Já to používám tak, že pro vysílání  používám rutinu, která
čeká, až bude vysílací buffer volný a při přerušení od vysílače jen mažu TI
a nastavuji  t_flag :

void ser_out( BYTE z )
      { while (!t_flag);
        SBUF = z;
        t_flag = 0;
      }

Při příjmu píšu do bufferu  a když přijde Enter, nějak to zpracuju a
nastavím flag, který oznámí hlavnímu programu, že je zpráva kompletní.

Celá obsluha přerušení vypadá takto - vlastní  komplikované zpracování jsem
smazal

// --- Serial chanel interupt service routine --- //
 static void Serial_Input(void) interrupt 4 using 2

 {  if (RI != 0 )  { RI = 0;   znak = SBUF;
                     input_bfr[uk_bfr] = znak;
                     uk_bfr = ++uk_bfr;
                     if (znak == KeyCR)
                        { .....  zpracování ......
                          r_flag = 1;
                          uk_bfr = 0;
                        }
                   }
    if (TI != 0 )  { TI = 0 ;  t_flag = 1;
                   }


Je na tom samozřejmě vidět, že jsem starý Pascalista, C jsem se v postatě
učil na tomto projektu. Takže prosím o schovíbvavost, vím že by to šlo vše
napsat zhuštěně ale já bych tomu pak nerozuměl.

Zdraví        J. Sloupenský


----- Original Message -----
From: "MK" <info@mcu.cz>
To: "[HWnews]" <hw-list@mailman.nethouse.cz>
Sent: Friday, April 02, 2004 11:01 PM
Subject: Re: [HWnews] 8051 serial v C


> > RD2KIT z HW serveru.  Je tam myslím T89c51..., teď to tady nemám.  Musel
> > jsem tam poslat znak, ten se sice nevyšle ale TI se nahodí a pak už to
vše
> > funguje jak má. Je to opakovatelné, žádná nahodilost. Zítra můžu poslat
> > výpis SW.
>
> A neni tam nejaka jina chybka ?? Bezne to totiz takto pouzivam:
> Pri shozenem TI naplnim bafr a v okamziku, kdy chci vysilat proste
> jen nahodim TI a o zbytek se mi postara rutina v interuptu.
> Nedokazu ale momentalne z hlavy rict, zda jsem to takto pouzil i na RD2.
>
> S pozdravem
> MK
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> HW-list@mailman.nethouse.cz
> http://nethouse.cz/mailman/listinfo/hw-list




Další informace o konferenci Hw-list