Zaslal: čt listopad 08 2007, 12:30 Předmět: zápis do porta 16f84a
Tak regulátor, zdá se, po dlouhé době konečně funguje a já v programu pokračuji dál. Narazil jsem na další zádrhel - potřeboval bych z portu A (např. bit 0,1,2,3) snímat stav a ten ukládat někam do registru. Současně však mám na RA4 přivedeny impulsy, které čítá TMR0 a které, pokud přesouvám celý stav portu, jeho stav zkreslují. Potřeboval bych vybrat pouze ty čtyři bity. Má to vůbec řešení ??
Založen: Jun 26, 2007 Příspěvky: 464 Bydliště: Vysočina
Zaslal: pá listopad 09 2007, 6:18 Předmět:
Já myslím, že to má OK1f v pořádku, udělá přednastavení bitu v registru na nulu a pokud je pinu tento stav, bit zustane v tomto stavu a pokud je tam stav opacny (v tomto pripade 1) tak se hodnota prepise na 1. Pokiud by to udelal tak jak pise kony2807, tak by nikdy nedosahl spravneho vysledku, protože pokud by tam byla nula, nulovani se neprovese a provede se stejně nastaveni (1) . Vysledek tedy bude vždy 1=chyba . A co takhle maskování nepoužívaných bitů??? To by nešlo???
Že jsem to napsal jinak, to vím, Kony přečte stav bitu a je-li 0, tak v X bit nastaví a je-li 1, tak vynuluje a pak nastaví. To nepotřebiji.
Já bit v RYCHLOST nuluji a pokud je na vstupu 0, tak další řádek přeskočím, pokud je na vstupu 1, dalším řádkem bit v RYCHLOST nastavím.
Nejsem si ale jist, jestli lze takto zapisovat do registru hodnotu. Pokud do RYCHLOST vložím konstantu, vše funguje, pokud tam takto měním bity, program reaguje, ale zmateně, jako by v tom registru byly úplně jiné hodnoty.
Je možné, že tím nastavováním něco měním v reg STATUS? Ten totiž v programu využívám, ale moc ho zatím neovládám.
udělá totéž, rychleji a s menší potřebou programové paměti.
To je to maskování bitů!
Tvůj problém může být právě v tom, že všechny bity PORTA nepřečteš současně a ony se v průběhu zdlouhavého nastavování registru RYCHLOST stačí změnit.
Používáte opravdu pozoruhodné programovací techniky, jste placeni od řádku?
Naposledy upravil jankop dne pá listopad 09 2007, 11:02, celkově upraveno 2 krát.
Do registru W si dáš konstantu 0x0F (00001111B).
Provedeš logický součin mezi W a PORTA, který uložíš do W.
Horní čtyři bity registru W budou mít tím pádem nulovou hodnotu a dolní bity hodnotu přečtenou před tím z PORTA.
Pak prostě uložíš W kam potřebuješ tj. do RYCHLOST.
Tak jsem já pochopil tvůj původní požadavek.
To o těch řádcích nepatřilo tobě.
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2Další
Strana 1 z 2
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
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.