Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

převod port bitů na číslo PIC18F14k22
Jdi na stránku Předchozí  1, 2
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Ladin



Založen: Apr 07, 2015
Příspěvky: 32

PříspěvekZaslal: pá duben 24 2015, 12:07    Předmět: Citovat

Jirko diky za radu, to uz je pro me dost slozite k pochopeni, ale snad to casem pochopim Very Happy ... nicmene ten kod od rnbw mi prijde perfektni akorat to nemuzu rozchodit, vubec to nereaguje, cecko me obcas privadi k silenstvi Mánička

co mam zase spatne?
kód:

.
.
.
void main(void) {
    TRISAbits.TRISA0 = 1;
    TRISAbits.TRISA1 = 1;
    TRISAbits.TRISA2 = 1;
    TRISCbits.TRISC0 = 1;
    TRISCbits.TRISC1 = 1;
    TRISCbits.TRISC2 = 1;
    TRISCbits.TRISC3 = 1;
    TRISCbits.TRISC4 = 1;
    TRISCbits.TRISC5 = 1;
.
.
.
int stupne;

    while (1){
        stupne = (LATC & 0b111111) << 3 | (LATA & 0b111);
        writenumH (stupne,70,145,64,0); //funkce pro vypis cisla na lcd
        }
}


kdyz privedu napeti na piny RA0 - RA2, RC0 - RC5 vubec se stupne nezmeni (stale 0), neco chybi v nastaveni portu pro digitalni vstup?

Diky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladin



Založen: Apr 07, 2015
Příspěvky: 32

PříspěvekZaslal: pá duben 24 2015, 12:19    Předmět: Citovat

Aha tak uz to mam, misto LAT musi byt PORT, uz to chodi, diky vsem!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mtajovsky



Založen: Sep 19, 2007
Příspěvky: 3697
Bydliště: Praha

PříspěvekZaslal: po duben 27 2015, 22:00    Předmět: Citovat

Přijel jsem z weekendu a vidím - pánové, co tu řešíte za složitosti? Smile Pokud chci dostat data z portu do proměnné, je to snad obyčejné přiřazení
kód:

unsigned char c = PORTA;          // vsechny bity
unsigned char d = PORTB & MASKA;  // kde maska "propusti" bity na pozicich, kde ma sama log. 1


Pokud by se mělo výsledné slovo skládat ze skupin bitů nějak na přeskáčku, tak lze použít bitová pole. Následující prográmek složí výsledné 16 bitové slovo ze 3 skupin bitů o délkách 3, 6 a 7 bitů. Pro jednoduchost jsou jako data použity konstanty.

kód:

typedef struct
{
    unsigned dolni_3      : 3;       // bity 0-2
    unsigned strednich_6  : 6;       // bity 3-8
    unsigned nejvyssich_7 : 7;       // bity 9-15
}BitFields;

typedef union
{
    BitFields          as_bit_fields;
    unsigned short int as_short_int;
}InData;

int main(int argc, char* argv[])
{
InData data;

    data.as_bit_fields.nejvyssich_7 = 0xc0;
    data.as_bit_fields.strednich_6 = 0x7f;
    data.as_bit_fields.dolni_3 = 0x07;

    unsigned short int result = data.as_short_int;
   return 0;
}

Potřebné shifty a maskování zařídí překladač automaticky. Výsledek je v proměnné result = 0x81ff. Všmněte si, že i když přiřazení:
kód:

    data.as_bit_fields.strednich_6 = 0x7f;

přesahuje svou konstantou 0x7f délku pole 6 bitů, je automaticky oříznuto na 6 bitů a výsledek 0x81ff je stejný jako pro přířazení:
kód:

    data.as_bit_fields.strednich_6 = 0x3f;


Naposledy upravil mtajovsky dne po duben 27 2015, 22:11, celkově upraveno 6 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
rnbw



Založen: Mar 21, 2006
Příspěvky: 33857
Bydliště: Bratislava

PříspěvekZaslal: po duben 27 2015, 22:09    Předmět: Citovat

Toto ale bude davat rozne vysledky na little- a big-endian CPU.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mtajovsky



Založen: Sep 19, 2007
Příspěvky: 3697
Bydliště: Praha

PříspěvekZaslal: po duben 27 2015, 22:14    Předmět: Citovat

Jste si jistý? BitFields by se mělo složit podle váhy bitů, ne podle grafické polohy. Shifty taky ve skutečnosti realizují aritmetické operace a ne posuv.

Edit: tak asi ano, bude to závislé, je to cena za jednoduchost. Pokud by to vadilo, pak se to musí udělat skutečně ručně.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2
Strana 2 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.20 sekund