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