[elektro] PIC C18 probléma

Lajos Rancz lajos.rancz at gmail.com
Mon Feb 9 11:20:48 CET 2015


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]


More information about the Elektro mailing list