Stránka 1 z 5

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

Napsal: 18 úno 2017, 17:34
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

Napsal: 18 úno 2017, 17:53
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

Napsal: 18 úno 2017, 19:20
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).

Napsal: 18 úno 2017, 19:27
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é.

Napsal: 18 úno 2017, 19:40
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... :)

Napsal: 18 úno 2017, 19:45
od lesana87
Ono se do bytu nevejde víc ani v desítkové soustavě. :)

Napsal: 18 úno 2017, 19:52
od ZdenekHQ
Jenže "dc" z toho algoritmu nemá žádnou definici, třeba je to longint.

Napsal: 18 úno 2017, 20:03
od Cowley
Uvidime, jak se s tim markoni popasuje.

Napsal: 18 úno 2017, 20:07
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

Napsal: 18 úno 2017, 21:48
od Atlan
Co nefunguje sprintf?

Napsal: 19 úno 2017, 12:48
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?

Napsal: 19 úno 2017, 13:01
od lesana87
Asi by to chtělo napsat, co má být výstupem.

Napsal: 19 úno 2017, 13:17
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

Napsal: 19 úno 2017, 13:24
od lesana87
A je velký problém místo lcd_zapis("1") dát UART1_Write_text("1")?

Napsal: 19 úno 2017, 15:21
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