Zaslal: so únor 20 2016, 19:10 Předmět: PIC16F628A - zmena hodnoty v registroch
Zdravim,
Trapim sa tu s nasledovnou vecou:
Pokial som dobre porozumel datasheetu, tak na adrese 20h - 6Fh mam dostupnych 80 registrov. Po ulozeni hodnoty do niektoreho z uvedenych registrov, tam hodnota ostane az do prepisania inou hodnotou, alebo do prerusenia napajania.
Ukladam si hodnotu do registra, ale ta sa mi po prebehnuti urcitou castou programu zmeni na nejaku inu(neznamu) hodnotu.Jedine co v casti programu menim je hodnota registra TRISB. Moze to mat vplyv na zmenu v registroch 20h - 6Fh ?
Alebo tomu celemu rozumiem zle?
Dalsia otazka sa tyka,ako zobrazit hodnoty registrov 20h - 6Fh v MPLAB simulatore...Tam by som na to prisiel,kde sa konkretne meni hodnota, len neviem ako sa vlastne registre volaju - pod cim ich v simulatore hladat...
Založen: Oct 02, 2009 Příspěvky: 5286 Bydliště: PO
Zaslal: so únor 20 2016, 19:43 Předmět:
Musíš pred zápisom do RAM nastaviť správny BANK (vo všeobecnosti tých BANK-ov je až štyri ...bank0, bank1, bank2, bank3). Rovnako, ako to platí pri špeciálnych registroch, včítane registra TRISA, TRISB,...
Ak tých registrov potrebuješ max. 16, použi adresy v rozmedzí 0x70...0x7F. Tieto registre sa zrkadlia vo všetkých bank-och.
Všetke registre si môžeš pozerať v: View/File Register
Nejprve je třeba něčím napsat program. To může být asm compiler nebo C compiler...
Jakmile je program napsán, lze jej krokovat v simulátoru. Kde jsou schované proměnné určuje compiler a/nebo programátor (člověk).
Co se týče 16F628A na straně 18 datasheetu je něco jako Memory organisation. Tam se píše k čemu je který registr dobrý. Na 20h - 7Fh jsou General purpose registers, tam si můžeme psát, co chceme a hodnota "zůstane zachována" po dobu napájení MCU.
pozor na "banksel". Jinak doporučím Atmel...
Založen: Oct 02, 2009 Příspěvky: 5286 Bydliště: PO
Zaslal: so únor 20 2016, 21:31 Předmět:
"general Purpose Register" sa adresuje iba 7 bitovou adresou v operačnom kode (inštrukcii). Z pohľadu inštrukcii majú registre rovnaké adresy od 0x00 po 0x7F.
Asi máš "miš-maš" s používaním parametra "d" v inštrukciách aj pri používaní adries 0x70 až 0x7F.
dudo02 napsal(a):
Napisal som asi blbost - v inej BANK to je aj ina adresa registra...
Založen: Oct 02, 2009 Příspěvky: 5286 Bydliště: PO
Zaslal: so únor 20 2016, 22:28 Předmět:
Zbežne som to preletel.
Máš tam spústu zmätkov v určovaní bankov.
Iba pri inicializícii používaš
kód:
BSF STATUS,RP0
.
.
MOVWF TRISA
.
.
BCF STATUS,RP0
Inde na to kašleš, takže máš problém aj v písaní na porty A a B.
Takže nestačí napísať MOVWF TRISA. Musíš si byť istý, že je nastavený bit RP0 a zhodený RP1 v STATUS reg.
Ak píšeš MOVWF PORTA,7 musiš zhodiť bity RP0 aj RP1.
Pri písaní do STATUS reg sa o banky nestaráš, lebo je to spoločný (ten istý) register v každom banku.
Zbežne som to preletel.
Máš tam spústu zmätkov v určovaní bankov.
Iba pri inicializícii používaš
kód:
BSF STATUS,RP0
.
.
MOVWF TRISA
.
.
BCF STATUS,RP0
Inde na to kašleš, takže máš problém aj v písaní na porty A a B.
Takže nestačí napísať MOVWF TRISA. Musíš si byť istý, že je nastavený bit RP0 a zhodený RP1 v STATUS reg.
Ak píšeš MOVWF PORTA,7 musiš zhodiť bity RP0 aj RP1.
Pri písaní do STATUS reg sa o banky nestaráš, lebo je to spoločný (ten istý) register v každom banku.
Ano mas pravdu, ale nekaslem na to umyselne.Cize pri kazdom zapise/citani z nejakeho registra sa musim prepnut do BANKu v ktorom sa danny register nachadza?
Pytam sa asi trivialne veci, ale v okoli nemam nikoho kto sa venuje programovaniu.
A instrukcia banksel mi ho prepne automaticky do BANKu v ktorom sa register nachadza? V datasheete som banksel nenasiel.
OK, cize v mojom pripade, sa potrebujem prepinat do BANK1 pri zapise do TRISA/B.
Cize pred kazdou operaciou s tymito registrami potrebujem urobit:
kód:
BSF STATUS,RP0 ;prepnem sa do BANK1
...
praca s registrom
....
BCF STATUS,RP0 ; prepnem sa spet do BANK0
....
praca s registrami v BANK0
Chapem to spravne?
V tom mojom kode sa do BANK1 neprepinam, ale zapis do registra TRISA/B prebehne - niecomu nerozuniem?
frp666 Chcem sa naucit aj uplne zaklady. Nerobim to preto, lebo potrebujem nejaky program - to by som niekomu zaplatil. Robim to preto leba ma to zaujima. No a pokial si napr.stiahnem nejaku kniznicu a neviem co sa v nej deje, tak som sa to potom vlastne nenaucil.Tym padom v pripade potreby, nie som schopny spravit ani jednduchu upravu, lebo neviem co sa vlastne v programe deje.A ja mam rad veci pod kontrolou .
Založen: Oct 02, 2009 Příspěvky: 5286 Bydliště: PO
Zaslal: ne únor 21 2016, 9:13 Předmět:
"banksel reg" je pseudo-instrikcia, ktorú pozná MPASM (makroasembler). Do kodu sa vložia dve inštrukcie
kód:
BCF/BSF STATUS,RP0
BCF/BSF STATUS,RP1
Samozrejme, že prepínanie banku sa urobí iba ak je to potrebné. Úspornejšie je používať iba BCF/BSF STATUS, RP0/1, keď človek má prehľad ktorý reg. kde leží.
;***************************************
C_TRIESA BSF STATUS,RP0
MOVWF TRIESB
BCF STATUS,RP0
RET
C_TRIESA BSF STATUS,RP0
MOVWF TRIESB
BCF STATUS,RP0
RET
;***************************************
Čo sa týka adries a konštánt..., pomocou EQU , prekladaču je to jedno.
Je dobré si to ale v hlave , ale aj v zápise asm rozdeliť
Často opakované inštrukcie sa dajú pomocou #define zjednodušiť
V zipe je nejaký rozsiahlejší projekt pre PIC16F877(len ako príklad). Použité sú rozsiahle definície pre špec.registre a tiež pre file registre, aby bol lepší prehľad a písalo sa to jednoduchšie.
Potom sú tam aj MAKRÁ,...čo sa často použivalo, bolo v mimo asm v inc súboroch a pripájalo sa to k prekladu pomocou #include.
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2, 3, 4Další
Strana 1 z 4
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.