RE: Návrch programu pro PIC16F628

Cizek Milan cizek.milan@seznam.cz
Středa Červen 2 22:10:46 CEST 2004


Ahoj,

> >A taky zde neni patrno jestli volane procedury nuluji priznakovy bit 
> >daneho
> preruseni.

Nenuluji, ani jedna. :)

> Toto je velice zasadni otazka. Pokud treba v teto casti kodu:
> 
> 	btfss INTCON,RBIF ; RB7..RB4
> 	goto $+5
> 	btfsc W,4  ; FANCTRL1
> 	call IH_FANCTRL1 ; prozatím neimplementováno
> 	btfsc W,5  ; FANCTRL2
> 	call IH_FANCTRL2 ; prozatím neimplementováno
> 
> mate jako podprogram IH_FANCTRL1 zatim jen nejaky RETURN, 
> cimz zavani to ze to neni prozatim implementovano a nikde 
> nesmaznete INTCON,RBIF, pak se po ukonceni podprogramu 
> preruseni od nej vyvola preruseni dalsi a bude to prerusovat 
> tak dlouho, dokud jen nevynulujete.

Ano, mam to prazdne, zatim. Podle me to ale neni to, co by vadilo. Objevil
jsem jeste jednu chybu pri inicializaci: movwf PIE1, mel jsem nastavenou
spatnou banku, diky cemuz jsem to naplnil do PIR1. Pak se vyvolalo navic
preruseni pro RX/TX. Kdyz se to pokousim krokovat, tak jedine misto, kam to
vleze (zavola se call) je IH_DS, tam hned na prvnim miste provadim bcf
INTCON,INTF. Pak uz se tedy nezavola nic, ale stale je program zacyklen mezi
org 4-retfie. Tak me pouze napada, jestli se nevola jeste nejake preruseni,
ktere nemam podchycene...?

> Dale:
> 	movlw PORTB  ; aktualní PORTB -> W
> 
> neudela uplne co si myslim ze jste myslel tou poznamkou, ale 
> naplni W adresou PORTB. Pokud budete chtit nabrat z PORTB, 
> pak bude lepe pouzit:
> 
> 	movf	PORTB,W

OK.

> Navic to nabrani hodnoty z PORTB zrusi tem "mysmas" co vznika 
> pri nastaveni RBIF a dovoli Vam jej vubec smazat :).

Jaky mysmas? :o)

> Dale by bylo fajn si odlozit tu nabranou hodnotu z portu 
> jeste nekam mimo W, protoze ty podprogramy co volate dale, 
> treba ohledne prijmu ze seriaku budou W celkem jiste 
> vyzadovat, nebo zpracujte ten port jako prvni. Je mi jasne, 
> ze ten PORTB se snazite sliznout co nejdrive, tak si po tom 
> nabrani do W tu hodnotu z W proste odlozte do nejakeho TMP 
> registru, pokud chcete ten port obslouzit treba nutne z 
> nejakeho duvodu az jako posledni.

Ano, uz to vidim.

> 	btfsc W,4
> 
> je pak nesmysl. Pro btfsc se W neda pouzit, nebo alespon ne u 
> PIC16, ale az u PIC18 a W se pak pise jako WREG, protoze 
> PIC16 jej nemaji mapovan do pameti dat, ale uplne mimo, takze 
> instrukce btfsc do nej proste nemuze a pro test bitu v tom W 
> si zase bud musite prehodit to W do nejakeho registru v 
> pameti, nebo pokud jej prehazovat nehodlate a setrite treba 
> pameti dat, pak to lze udelat:
> 
> 	andlw B'00010000'
> 	btfss	STATUS,Z
> 	call IH_FANCTRL1
> 
> cimz se call preskoci, pokud je ve ctvrtem bitu W 0 a call se 
> provede, pokud v nem nula neni a tedy neni vysledek nula a 
> STATUS,Z se nenastavil :).

Tyhle 3 radky si necham za domaci ukol. :-)

Mimochodem bych se chtel zeptat, jaky je postup ladeni v pripade, kdy zavisi
na nejakem "vnejsim" podnetu (treba impulzech na RB0). Konkretne, je mozne
nejak na PC nasimulovat mnou napsany protokol mezi PIC<>DS cidlem? Pouzivam
MPLAB IDE, i kdyz parallax jsem mel radsi. Ten ale neumi 16F628.

> Mimo nejste, to bude dobry.

PS: vy me neznate, ale ja znam vas web. :)

Milan





Další informace o konferenci Hw-list