Převod z desítkové do dvojkové soustavy

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
markoni
Příspěvky: 2310
Registrován: 30 říj 2006, 01:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

Převod z desítkové do dvojkové soustavy

#1 Příspěvek od markoni »

Mám takový příklad v basiku dřevěných dob počítačů na převod s desítkové do dvojkové soustavy

Kód: Vybrat vše

 smycka       If dc / 2 = INT (dc/2) then b="0" + b
              If dc / 2 <> INT (dc /2) then b="1" +b
              dc = INT(dc/2 )
              If dc > 0 then goto smycka 
a potřebuji to převést do mikroC PRO for PIC
zápasím s tím čidlem DS1820 a potřebuji názorně vidět co s toho vlastně leze? díky

Uživatelský avatar
ZdenekHQ
Administrátor
Administrátor
Příspěvky: 25593
Registrován: 21 črc 2006, 02:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#2 Příspěvek od ZdenekHQ »

Klasické celočíselné dělení se "zbytkem" ve smyčce. A "zbytek" je právě ten potřebný výsledek. V JSA to umím , v C ne.

Třeba číslo 7:

7/2 = 3, zbytek 1
3/2 = 1, zbytek 1
1/2 = 0, zbytek 1

Výsledek : 111b
Naposledy upravil(a) ZdenekHQ dne 18 úno 2017, 19:19, celkem upraveno 1 x.
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]

Uživatelský avatar
ZdenekHQ
Administrátor
Administrátor
Příspěvky: 25593
Registrován: 21 črc 2006, 02:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#3 Příspěvek od ZdenekHQ »

Můj omyl + OT odděleno.
Cowley píše:A co delit postupne s 256, 128, 64, 32, 16, 8, 4, 2, 1 a pocitat s "modulo" ( se zbytkem).
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]

Uživatelský avatar
lesana87
Příspěvky: 3296
Registrován: 20 zář 2014, 02:00

#4 Příspěvek od lesana87 »

Cowley: Co myslíš, že zabere počítači víc času, "delit postupne s 256, 128, 64, 32, 16, 8, 4, 2, 1 a pocitat s "modulo"" nebo dělit pořád jen dvěma?

Jinak opakuji, že v C to je tu http://www.ebastlirna.cz/modules.php?na ... ht=#863618 od mtajovského.

P.S.: Dělit 256 je u bytu zbytečné.

Uživatelský avatar
Cowley
Příspěvky: 3087
Registrován: 04 úno 2005, 01:00

#5 Příspěvek od Cowley »

A to jsem tam nenapsal, ze po kazdem deleni ma s vysledkem udelat bitShift :)
OK, no problem :)
256 neni zbytecne, dozvime se, zda v desitkove soustave neni vstupni cislo vetsi... :)

Uživatelský avatar
lesana87
Příspěvky: 3296
Registrován: 20 zář 2014, 02:00

#6 Příspěvek od lesana87 »

Ono se do bytu nevejde víc ani v desítkové soustavě. :)

Uživatelský avatar
ZdenekHQ
Administrátor
Administrátor
Příspěvky: 25593
Registrován: 21 črc 2006, 02:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#7 Příspěvek od ZdenekHQ »

Jenže "dc" z toho algoritmu nemá žádnou definici, třeba je to longint.
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]

Uživatelský avatar
Cowley
Příspěvky: 3087
Registrován: 04 úno 2005, 01:00

#8 Příspěvek od Cowley »

Uvidime, jak se s tim markoni popasuje.

Uživatelský avatar
lesana87
Příspěvky: 3296
Registrován: 20 zář 2014, 02:00

#9 Příspěvek od lesana87 »

ZdenekHQ píše:Jenže "dc" z toho algoritmu nemá žádnou definici, třeba je to longint.
Pak naopak dělit 256 nestačí a je třeba (dle cowleyho algoritmu) dělit 2147483648, 1073741824, 536870912, ...., 4, 2, 1. :D

Uživatelský avatar
Atlan
Příspěvky: 4499
Registrován: 10 kvě 2004, 02:00
Bydliště: Košice

#10 Příspěvek od Atlan »

Co nefunguje sprintf?

Uživatelský avatar
markoni
Příspěvky: 2310
Registrován: 30 říj 2006, 01:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#11 Příspěvek od markoni »

Toto bych i pochopil viz odkaz http://www.ebastlirna.cz/modules.php?na ... ht=#863618

Kód: Vybrat vše

void bit_to_lcd1(unsigned char a)
{
char b = 7;

    do
    {
        if((a & (1<<b))!= 0)
        {
            lcd_zapis("1");
        }
        else
        {
            lcd_zapis("0");
        }
    }while(b-- != 0);
} 
ale zas narážím na toto když chci místo použití

Kód: Vybrat vše

 lcd_zapis("1");
tak

Kód: Vybrat vše

řetěz =řetěz + "1" 
tak mně to nevezme kde dělám chybu?

Uživatelský avatar
lesana87
Příspěvky: 3296
Registrován: 20 zář 2014, 02:00

#12 Příspěvek od lesana87 »

Asi by to chtělo napsat, co má být výstupem.

Uživatelský avatar
markoni
Příspěvky: 2310
Registrován: 30 říj 2006, 01:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#13 Příspěvek od markoni »

Výstupem by byl řetězec který bych si nechal zobrazit ve virtuálním terminálu Proteus 8 Professional

Kód: Vybrat vše

UART1_Init(9600);
UART1_Write_text(retez);
pro Atlan
Co nefunguje sprintf?
v PIC16F628A není dost místa. díky

Uživatelský avatar
lesana87
Příspěvky: 3296
Registrován: 20 zář 2014, 02:00

#14 Příspěvek od lesana87 »

A je velký problém místo lcd_zapis("1") dát UART1_Write_text("1")?

Uživatelský avatar
markoni
Příspěvky: 2310
Registrován: 30 říj 2006, 01:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#15 Příspěvek od markoni »

Jasně že není ale já bych chtěl s tímto získaným stringem ještě pracovat tak když to pošlu na UART asi těžko.Snad mi nechceš tvrdit že neexistuje něco jako "jsi krasn"+"a" :?: díky

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“