[elektro] PIC C18 probléma
elight
elight at gmail.hu
Mon Feb 9 12:09:47 CET 2015
Szia,
Ez nekem rendszer függvény, ( a fordítóhoz tartozó lib )
és elég jól tesztelhették,
mert még sohasem adott "0 osztás kivétel" eseményt..
még nulla bemenőadatra sem
egyébként meg 0/bármi lazán kiszürhető
if( value = 0 ) txt_buff = " 00,00";
ha csak ennyi a gond,
és az else ágán hívod meg utána az osztást tartalmazó függvényt.
Üdv István
Üdv István
2015-02-09 11:20 keltezéssel, Lajos Rancz írta:
> Helló!
>
> Na de az IntToText függvényben jó ha van osztás, különben ciklus kell hozzá
> (addig vonok le belőle tízet ciklusban míg 10-nél kisebb értéket kapok).
>
> Üdv
>
> 2015. február 9. 10:19 elight írta, <elight at gmail.hu>:
>
>> Szia ,
>>
>> ezért is kerülöm a printf-el ,
>> a hasonló maniulációkat..
>>
>> Szerintem ha fix tizedes kell kijelzésre , felesleges osztani
>> //--------------------------------------------
>> unsigned char txt_buff[ 8 ]
>> int value = 1228;
>>
>> IntToText( value , txt_buff ) // equ " 1288"
>>
>> txt_buff[ 7 ] = 0;
>> txt_buff[ 6] = txt_buff[ 5 ];
>> txt_buff[ 5] = txt_buff[ 4 ];
>> txt_buff[ 4] =',' ];
>>
>>
>> Prin_Txt ( txt_buff ) ; // equ " 12,88"
>> //------------------------------------------------------------
>> Kicit fapados, de minden körülmények között működött eddig.
>>
>> És kis pointerezéseel univerzálissá is varázsolható egy ilyen függvény
>> A printf-el régebben az is gondom volt , hogy sok erőforrást
>> feleslegesen elvisz.
>>
>> Üdv István
>>
>>
>>
>>
>> 2015-02-09 09:52 keltezéssel, Lajos Rancz írta:
>>> Helló!
>>>
>>> Nem tudom, hogy a PIC18 hogy reagál a nullával való osztásra, de ebben a
>>> kódban elő tud fordulni:
>>> sprintf(data,"%02d",(unsigned char)(bedata % (bedata/100)));
>>>
>>> Ha bedata kisebb mint 100, akkor bedata % (bedata/100) nullával való
>>> osztáshoz vezet => valszeg exception.
>>>
>>> Üdv
>>>
>>> 2015. február 8. 23:48 Skandar Graun írta, <sgraun at gmail.com>:
>>>
>>>> Sziasztok!
>>>>
>>>> Van egy számom (pozíció), ami 200 000 -ig mehet fel.
>>>> Ezt a számot nekem LCD.re 100-al osztva kellene megjelenítenem, két
>>>> tizedessel.
>>>>
>>>> Kitaláltam egy módszert, ami már egy tizedessel múködött, de itt kissé
>>>> lehalt.
>>>> A program a következő:
>>>>
>>>> void decpont(unsigned long bedata, unsigned char pos)
>>>> {
>>>> SetDDRamAddr(pos);
>>>>
>>>> sprintf(data,"%4lu.",bedata/100);
>>>> putsXLCD(data);
>>>> while( BusyXLCD() );
>>>> SetDDRamAddr(pos+5);
>>>> sprintf(data,"%02d",(unsigned char)(bedata % (bedata/100)));
>>>> putsXLCD(data);
>>>> while( BusyXLCD() );
>>>> }
>>>>
>>>> A problémám, hogy az így számolt és megjelenített tizedesek elég furcsa
>>>> viszonyban vannak a valósággal. Egy másik kijelzőn is meg van jelenítve
>> az
>>>> érték, az jól számol, az LCD-n látható érték viszont hibás, a tizedesek
>>>> eltérnek a valóságtól.
>>>> Mi nem jó a módszeremben, vagy mit tudnátok ajánlani helyette?
>>>> -----------------------------------------
>>>> elektro[-flame|-etc]
>>> -----------------------------------------
>>> elektro[-flame|-etc]
>> -----------------------------------------
>> elektro[-flame|-etc]
> -----------------------------------------
> elektro[-flame|-etc]
More information about the Elektro
mailing list