[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