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í 

tabulka v programu u PIC 16f648

 
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
beagle



Založen: Mar 14, 2007
Příspěvky: 30

PříspěvekZaslal: čt únor 19 2009, 19:11    Předmět: tabulka v programu u PIC 16f648 Citovat

chci si vytvořit tabulku na poslední stránce programové paměti procesoru 16f648 ale nějak mi to nejde u 16f628 jsem to řešil takhle

ORG 2000
TAB_M movlw .7
movwf PCLATH
movfw CIS_MESICE
addwf PCL,F

retlw 0x00
retlw 0x31
retlw 0x29
retlw 31h
retlw 30h
retlw 31h
retlw 30h
retlw 31h
retlw 31h
retlw 30h
retlw 0x00
retlw 0x00
retlw 0x00
retlw 0x00
retlw 0x00
retlw 0x00
retlw 31h
retlw 30h
retlw 31h


ale když u 16f648 zadám

ORG 3840
TAB_M movlw .15

tak mi to nějak nejde prosím nevíte jak se to dělá?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
caven



Založen: Aug 15, 2006
Příspěvky: 417

PříspěvekZaslal: čt únor 19 2009, 22:22    Předmět: Citovat

sice jsem s picem dělal jenom ve škole, ale pamatuji si, že mi taky nefungovali tabulky a učitel mi řikal, že to nesmí být na rozhraní snad 256B paměti. Snad to neobsáhne ten programový číteč, nevím. Možná říkám blbosti.. Zkus tu tabulku posunout jinam ...S PICy nedělám
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Pawalo



Založen: Oct 06, 2005
Příspěvky: 87
Bydliště: Tábor

PříspěvekZaslal: čt únor 19 2009, 23:41    Předmět: Citovat

taklenc to skus

ORG 2000
movlw d'20'
movwf PCLATH
movfw CIS_MESICE
addwf PCL,F

a když to nepude tak místo tý dekadický 20 tam dej 2
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
anonym






PříspěvekZaslal: pá únor 20 2009, 12:10    Předmět: Citovat

Pozri si AN556

Program pre tabuľku tak ako si ho napísal platí iba do 2k programu. Horné bity program pri inštrukcii CALL a GOTO číta z PCLATH - pri vykonaní inštrukcie.
Ak teda chceš tabuľku na adrese 3840 (0xF00), musíš PCLATH naplniť ešte pred CALL.

movlw 0x0F ; ofset stranky
movwf PCLATH ; ofset do PCLATH
movfw CIS_MESICE ; mesiac
CALL TAB_M ; ide z tabulky vybrat konstantu mesiaca
.
.
.
ORG 0xF00 ; zaciatok tabulky
TAB_M
addwf PCL,F ; w pripocita k PCL t.j. posun v stranke F
retlw 31 ; navrat s konstantou
Návrat nahoru
beagle



Založen: Mar 14, 2007
Příspěvky: 30

PříspěvekZaslal: so únor 21 2009, 12:00    Předmět: Citovat

děkuji za odpovědi, zkoušel jsem obě možnosti ale pořad to nejde, nevím kde dělám chybu. Prosím ty stránky paměti(po 2048 bitech) jsou číslivány od 0 nebo od 1 protoženevím jak nastavit bity 4 a 3 v registru PCLATH, zkoušel jsem idat do PCLATH dát 0x0F a taky nic. A chtěl jsem se zeptat jak se to řesí s podprogramama které jsou v program. paměti dále než 2048 ?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: so únor 21 2009, 12:31    Předmět: Citovat

beagle napsal(a):
děkuji za odpovědi, zkoušel jsem obě možnosti ale pořad to nejde, nevím kde dělám chybu. Prosím ty stránky paměti(po 2048 bitech) jsou číslivány od 0 nebo od 1 protoženevím jak nastavit bity 4 a 3 v registru PCLATH, zkoušel jsem idat do PCLATH dát 0x0F a taky nic. A chtěl jsem se zeptat jak se to řesí s podprogramama které jsou v program. paměti dále než 2048 ?

Řeší se to tak, že se tam místo PICa dá AVRko Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
beagle



Založen: Mar 14, 2007
Příspěvky: 30

PříspěvekZaslal: so únor 21 2009, 16:10    Předmět: Citovat

Tak už to funguje zkoušel jsem to krokovat v MPLABU a po návratu z tabulky se musí vynulovat bit 3 a 4 v registru PCLATH (pro první stránku paměti aspoň tak jsem to pochopil ,že se musí nastavit stránka paměti do které se vrátí) jinak se to na první následující instrukci call nebo goto zastaví
všem děkuji za odpovědi

příklad:

movlw 0x0F ; ofset stranky
movwf PCLATH ; ofset do PCLATH
movfw CIS_MESICE ; mesiac
CALL TAB_M ; ide z tabulky vybrat konstantu mesiaca

bcf PCLATH,4
bcf PCLATH,3.
.
.
ORG 0xF00 ; zaciatok tabulky
TAB_M
addwf PCL,F ; w pripocita k PCL t.j. posun v stranke F
retlw 31 ; navrat s konstantou

No v knížce Mikrokontrolery PIC16F87X se na str.43 píše toto "Při návratu(po instrukci CALL ne po instrukci GOTO) je ze STACKu výjmuta celá adresa, to je všech 13 bitů a o nastavení stránky se není nutné starat.......". Já vím že je kniha o jiném PICu ,ale myslel jsem si že rodina 16FXXX je skoro podobná nebo dělám ještě nekde chybu ! zatím to funguje uvidím dál při psaní programu



Pro Andreu AVR bych se chtěl taky naučit ale PIC mám to jako koníček a jsem rád že se k tomu vůbec někdy dostanu (rodina dvě děti a věci stím související),při rozhodování mezi ATMEL a PIC jsem vybral PIC a jsem rád když něco naprogramuji a ono to funguje ,myslím že diskuzí na téma co je lepší už tu bylo několik tak ať si každý vabere co chce.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
ViPali



Založen: Nov 21, 2005
Příspěvky: 524
Bydliště: Bratislava

PříspěvekZaslal: so únor 21 2009, 19:46    Předmět: Citovat

beagle napsal(a):

No v knížce Mikrokontrolery PIC16F87X se na str.43 píše toto "Při návratu(po instrukci CALL ne po instrukci GOTO) je ze STACKu výjmuta celá adresa, to je všech 13 bitů a o nastavení stránky se není nutné starat.......". Já vím že je kniha o jiném PICu ,ale .... .


Ale veď tam je napísané presne to čo si odladil.

Ak skáčeš (voláš) cez 11 bitov, tak musíš nastaviť PCLATH 3,4. Ale v STACKu máš odloženú starú (návratovú) adresu z "dolnej" stránky, preto sa ti pri RET (RETLW) do PCL načíta "dolná" adresa a program pokračuje až po najbližší CALL.
POZOR ! ! ! adresa zo STACKu sa nerozloží do PCL a PCLATH. V PCLATH zostanú posledné nastavené bity.
Ak si neznuloval PCLATH, tak ti program neodskočí do dolnej stránky, ale do hornej.

_________________
Ako elektrikár sa cítim slobodne.
Môžem hovoriť do vedenia!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
beagle



Založen: Mar 14, 2007
Příspěvky: 30

PříspěvekZaslal: ne únor 22 2009, 6:10    Předmět: Citovat

děkuji za vysvětlení
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
beagle



Založen: Mar 14, 2007
Příspěvky: 30

PříspěvekZaslal: pá březen 06 2009, 17:02    Předmět: Citovat

vování tabulky z poslední stránky už funguje, když použíju GOTO z 1 stránky do druhé tak to funguje taky, ale problém nastane,když se pomoci GOTO vrátím do první stránky tak se potom program nemuže dostat na přerušení příklad níže prosím nevíte v čem dělám chybu?


příklad
citace:

příklad přerušení

org 0x0004 ; vektor preruseni

PRERUS
movwf TMP_W ; (ulozeni hodnot registru W a STATUS)
movf STATUS,W ; prohodi nibble STATUS a ulozi do W
clrf STATUS ; nastaveni banky 0
movwf TMP_S ; ulozit STATUS

movf PCLATH,W
movwf TMP_PCL
clrf PCLATH ; nastaveni banky 0
; ------------------------
bcf INTCON,T0IF ; vynulovat priznak preruseni (pretekl casovac TMR0)
;-------------------------------


; !!! tady co ma preruseni vykonat !!!


;------------------------------- (obnovení hodnot registru W a STATUS)
INT_END movf TMP_PCL,W
movwf PCLATH ; obnova PCLATH

movf TMP_S,W ; prohodi nibble TMP_S a ulozi do W
; swapf TMP_S,W ; prohodi nibble TMP_S a ulozi do W
movwf STATUS ; obnova STATUS

swapf TMP_W,F ; prohodi nibble TMP_W a ulozi do W
swapf TMP_W,W ; obnova W
retfie


z první stránky do druhé

bsf PCLATH,3
goto ALARM
.
.
.
TIMER



z druhé stránky do první

ORG 0x800
ALARM
.
.
.
clrf PCLATH
goto TIMER
[/quote]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Atlan



Založen: May 10, 2004
Příspěvky: 4511
Bydliště: Košice

PříspěvekZaslal: pá březen 06 2009, 20:12    Předmět: Citovat

clrf PCLATH vrati ta do 0 stranky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ViPali



Založen: Nov 21, 2005
Příspěvky: 524
Bydliště: Bratislava

PříspěvekZaslal: ne březen 08 2009, 16:04    Předmět: Citovat

Predpokladám, že za návestím TIMER máš povolené prerušenie a hneď na začiatku prerušenia ho zakážeš?
_________________
Ako elektrikár sa cítim slobodne.
Môžem hovoriť do vedenia!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
beagle



Založen: Mar 14, 2007
Příspěvky: 30

PříspěvekZaslal: ne březen 08 2009, 17:04    Předmět: Citovat

tak už to funguje díky simulaci v MPLABU jsem na to přišel chybu jsem měl tady:

org 0x0004 ; vektor preruseni
goto PRERUS


a melo to být takhle

org 0x0004 ; vektor preruseni
; goto PRERUS


takže když byl program na druhé stránce a nastalo přerušení tak skočil na vektor přerušení org 0x0004, tím pádem se zakázala všechna přerušení, potom skočil na goto PRERUS , ale v PCLATH byla nastavena druhá stránka tak nešel na PRERUS ale vrátil se do druhé stránky, ale už byly zakázána všechna přerušení.
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
Strana 1 z 1

 
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.19 sekund