Jak wydzielić część całkowitą i ułamkową liczby w BASCOMIE ?

To forum jest dla wszystkich pasjonatów wiecznie młodych mikrokontrolerów '51. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Moose
-
Posty: 9
Rejestracja: 09 sie 2005, 11:47

Jak wydzielić część całkowitą i ułamkową liczby w BASCOMIE ?

Post autor: Moose » 26 sty 2007, 18:47

Zrobiłem zegar z PCF na uP 89C2051 z wyświetlaczem LCD. Następnie dorobiłem układ dla wyświetlenia cyfr na LEDach.Sam się dziwię ale to działa.Zmieniłem uP na 89C4051 i dodałem termometr na Dallasie 18B20.Z wyświetlaczem LCD wszystko działa ok ale nie mogę sobie poradzić z rozdzieleniem części całkowitej i ułamkowej liczby przedstawiającej temperaturę aby wyświetlic temperaturę na LEDach. Po konwersji i obliczeniu temperatury mam liczbę sformatowaną za pomocą Fussing.Wprawdzie zawiera dwa miejsca po przecinku ale jest typu String. Czy można ją szybko przekształcić w dwie liczby przedstawiające :część całkowitą i część ułamkową?

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 27 sty 2007, 13:49

Zainteresuj się poleceniem VAL... Co prawda - nie jestem do końca pewien, czy część ułamkowa też zostanie przekształcona...

Awatar użytkownika
adiblol
Użytkownik
Posty: 231
Rejestracja: 13 sty 2006, 11:44
Lokalizacja: zza dymu spalonych czesci
Kontakt:

Post autor: adiblol » 27 sty 2007, 16:37

pomnóż przez 100 i zmień "podziałkę" LED'ów w programie.

Moose
-
Posty: 9
Rejestracja: 09 sie 2005, 11:47

Post autor: Moose » 27 sty 2007, 18:04

Mam liczbę przedstawiającą temperaturę w postaci np. 25.0625000
Jak z tej liczby otrzymać oddzielnie część całkowitą i część ułamkową?
Marcing - rzeczywiście VAL zamienia liczbę tekst na postać binarną ale z ułamkiem to już gorzej.W moim przypadku to nie istotne bo postać binarną już mam wcześniej ( trochę namieszałem w pierwszym poście). Dzięki za zainteresowanie ale problem dalej jest.
Adiblol - nie bardzo rozumiem o co chodzi z tą podziałką ledów.
Pozdrawiam

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 27 sty 2007, 18:32

Moose pisze:trochę namieszałem w pierwszym poście
Fakt... ale ja też. Bo przecież z DS-a otrzymujesz wartość typu Single...

Ale, spróbuj z wartości odczytanej z DS-a wydzielić cztery ostatnie bity - to właśnie wartość ułamkowa.
Teraz pozostałe przesuń w prawo - ale pamiętaj o znaku - i wpisz do zmiennej WORD.
Dalej sobie powinieneś poradzić :) Tylko nie zapomnij o tym, że wartość ułamkowa przedstawiana jest w postaci 1/x.

Moose
-
Posty: 9
Rejestracja: 09 sie 2005, 11:47

Post autor: Moose » 27 sty 2007, 18:56

Spróbuję w ten sposób jak mówisz i zobaczę ile mi zajmie pamięci.
Dzięki za pomysł

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 28 sty 2007, 16:42

Moose pisze:Adiblol - nie bardzo rozumiem o co chodzi z tą podziałką ledów.
Wyświetlacz LED to 7 segmentów + kropka, zmieniając cyfrę na kod 7-segmentowy możesz samemu zaświecić jedną z kropek, zaświecając kropkę na lewo od miejsca gdzie powinna być mnożysz liczbę 10 razy
12,3456 :arrow: 123,456

Awatar użytkownika
Tranzystor
Użytkownik
Posty: 889
Rejestracja: 28 sie 2005, 19:19
Lokalizacja: Świętochłowice
Kontakt:

Post autor: Tranzystor » 06 lut 2007, 16:30

Dzielenie \, a reszta MOD. Skoro działa w BASCOM AVR to i w '51 powinno :D

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 06 lut 2007, 17:06

Tranzystor, mogłeś przy okazji napisać przez ile należy podzielić...
Owszem - kiedyś dawałem podobną radę w innym temacie, ale tam było to w miarę proste - dzielenie przez dziesięć liczby bez przecinka...

Tu natomiast mamy do czynienia z liczbą zmiennoprzecinkową - a to już jest "zagwozdka"... na razie - w końcu znajdzie się rozwiązanie (z braku czasu na razie go nie mam)

ODPOWIEDZ