[elektro] PIC C18 probléma

Lajos Rancz lajos.rancz at gmail.com
Mon Feb 9 12:18:32 CET 2015


Helló!

Azért nem ad nullával való osztás exceptiont, mert nem nullával oszt hanem
10-el (nem úgy mint a citált kód).

Üdv

2015. február 9. 12:09 elight írta, <elight at gmail.hu>:

> 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]
>
> -----------------------------------------
>           elektro[-flame|-etc]
>


More information about the Elektro mailing list