[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