Assembler- oprava kódu. PIC16F88

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
PIClover
Příspěvky: 10
Registrován: 02 led 2014, 00:00

#16 Příspěvek od PIClover »

Pawalo. V první řadě děkuju za nemalou pomoc.

A k těm dotazům. Jestli dobře vidím. Tak zápis se liší jen o zapis_cekat. Takže to chápu. Akorát trochu tápu v tom čtení, ale ještě jsem se na to nestihnul pořádně podívat. Večer na to kouknu a kdyžtak bych dal vědět.
Uživatelský avatar
PIClover
Příspěvky: 10
Registrován: 02 led 2014, 00:00

#17 Příspěvek od PIClover »

Naopak, mě by to bavilo, kdybych v tom pořádně uměl. Jenže když řešim takovou úlohu o které vím, že je jednoduchá a nevím si rady, tak k PICíku cítim odpor a celá práce pak stojí za prd, ale ted k věci.

Pro jistotu popíšu i to co si myslím, že chápu. Takže zapis_cekat

zapis_cekat btfsc eecon1,1
goto zapis_cekat
bcf eecon1,2

return

Takže já tam testuju bit 1 eeconu1 (předtím jsem tam zapisoval). Furt to tam jede dokola do te doby, než bude ten bit mít 0 hodnotu. Pak to přeskočí ten řádek s goto. A pak to bcf mi vynuluje v eeconu1 ten druhej bit.

Takhle to chápu myslím dobře. Z datasheetu vím, že druhý bit povoluje nebo zakazuje zápis. Záleží jestli tam dám 1 nebo 0 .


Ty dotazy napíšu na vícekrát. U mého počítače nikdy nevím, kdy přijde blue death nebo neco podobného a nechtěl bych to celé psát znova.
Uživatelský avatar
Pawalo
Příspěvky: 87
Registrován: 06 říj 2005, 00:00
Bydliště: Tábor
Kontaktovat uživatele:

#18 Příspěvek od Pawalo »

bit 2 povoluje nebo zakazuje zápis, to víš dobře,,, to čekání je tam proto že zápis nějakej čas trvá, dal sem to tam kvůli simulaci. v tvym případě by to tam ani být nemuselo. používá se to když zapisuješ více dat hnedka po sobě. a jak je uvedeno v datašítu, může to bejt i na začátku rutiny zápisu. jinak tim bitem 1 zahajuješ zápis. a jak píšou v datašítu tak ten bit se sám nuluje když se zápis dokončí.
Uživatelský avatar
PIClover
Příspěvky: 10
Registrován: 02 led 2014, 00:00

#19 Příspěvek od PIClover »

A ještě v samotném zápisu jsem našel jednu změnu. Celý podprogram zápisu zůstal stejný, jen tam přibylo:

bcf eecon1,7 ;volba pamět EEPROM

Zase, vím, že instrukce bcf mi nuluje ten bit. V datasheetu vidím, že nulováním jsem si zvolil EEPROMku.
Já to takhle chápu, jen nevím, jak člověk musí přemýšlet aby se kouknul na program co mu nefunguje a řekl si "Hmm, tak támdle tomu chybí zvolení EEPROMky" . Mě by todle nikdy nenapadlo.
Uživatelský avatar
PIClover
Příspěvky: 10
Registrován: 02 led 2014, 00:00

#20 Příspěvek od PIClover »

Pak co tak studuju ten podprogram čtení, tak tam jsem to měl úplně proházené oproti tobě.

BANK2
movlw h'10'
movwf eeadr ;
BANK3
bcf eecon1,7 ;volba pamět EEPROM
bsf eecon1,0 ;zahájit čtení
BANK2
movf eedata,w
return

U tohodle si tak úplně jistej nejsem, ale popíšu jak to chápu.

movlw h10-mám to ve střadači
movwf eeadr-přesunu to do eeadru
pak jak píšeš v poznámkách vybereš eepromku, zahájíš čtení... Ale pak nechápu k čemu je tam ta BANK2? Dál tam je movf eedata,w čim zase přesunu z eedata do W což je pracovní registr. Takže ta BANK2 je tam kvůli W ?
Uživatelský avatar
Pawalo
Příspěvky: 87
Registrován: 06 říj 2005, 00:00
Bydliště: Tábor
Kontaktovat uživatele:

#21 Příspěvek od Pawalo »

ano, u zápisu je jen navíc volba paměti, pač když se podivám na stav registru eecon1 po zapnutí, tak zjistíš je tam neni určenej stav, a může se i stát že se v programu jaksi udělá chybka a omylem se bit přepíše, tak je dobrý dycky tu pamět při rutině zápisu i čtení zvolit. v první řadě je dobrý přečíst si datašít. u eeprom, jako i u ostatních periferií, máš napsanej postup práce s periferií. a u eeprom máš i vzorovej příklad. takže přečíst, napsat hrubej kus kodu a pustit si simulaci. při krokování zjistíš co ti co kde jak dělá nebo naopak nedělá.

a čtení. tady to platí stejně, přečíst datašít, zjistíš postup práce s periferií. takže postup je jasně danej. bank2 před movf eedata,w musí bejt proto že registr eedata se nachází v bank2. kvuli střadači se banka nepřepíná, střadač pracuje ve všech bankách, banky přepínáš kvůli registrum s kerejma pracuješ.
Uživatelský avatar
PIClover
Příspěvky: 10
Registrován: 02 led 2014, 00:00

#22 Příspěvek od PIClover »

Jo takhle, už to chápu. I vidim v datašítu, že eedata je v BANK2. Jasnýýý...

Pak tam jsou ty zpoždění. Na ty ani nekoukám... Jen ty zákmity tlačítek si ještě pořádně vychytám až na samotný desce. Takže se zpožděníma žádnej problém rozhodně nemám. Už nemám... Pamatuju si, že minulej rok to pro mě docela problém byl. Nevěděl jsem, že se to v assembleru dělá tím způsobem, že budu přeskakovat instrukci furt dokola. Byl jsem zvyklej z Bioloida (robo stavebnice), že napíšu jednoduše Timer = 1sec
Wait while (Timer > 0sec)
ale to jen tak na okraj.

Potom tabulka mi je taky jasná. Jen se zeptám, kdybych vícekrát dekrementoval tu proměnou pocet, dostal bych se na 0 nebo by mi to hodilo nějakej error?

K hlavnímu programu toho moc nemám. Jen u testu2 vidim
movlw b'11111111'
movwf porta
bcf portb,4


Toho samého bych dosáhl kdybych dal call init? Nebo jsi call init smazal z původního programu záměrně?
Uživatelský avatar
Pawalo
Příspěvky: 87
Registrován: 06 říj 2005, 00:00
Bydliště: Tábor
Kontaktovat uživatele:

#23 Příspěvek od Pawalo »

Kdyby si dekrementoval vicekrat tak by ses vratil na nejaky cislo a od toho by to pokracovalo. Ale pak uz to nebude plnit cistou funkci pocitani zapnuti.
Kdyby si v prubehu programu znova volal init tak bys znova prenastvil procesor, coz by mohlo prepsat nastaveni kery si udelal v prubehu programu , moch by se ti zhroutit program a delat nepredvidatelny efekty. Coz nechces. Takze celkovou inicializaci jen po zapnuti a pak uz ne. Pak uz jen prenastavovat periferie.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“