80 83


K U R S
W drugiej czÍÅ›ci artykuÅ‚u
część 2
kontynuujemy opis funkcji
rejestrÛw SFR w procesorach
PIC16F8x, ktÛrych dobra
znajomośĘ jest niezbÍdna do
efektywnego wykorzystywania
tych mikrokontrolerÛw.
OmÛwimy kolejny rejestr z obszaru
SFR - TMR0 REGISTER (o adresie
01h). Jest to 8-bitowy licznik (liczÄ…cy
do przodu), ktÛrego zawartośĘ moÅ‚na
zapisywaĘ (zakres 0...255) i odczytywaĘ.
Po wpisaniu wartości inkrementacja
licznika jest zatrzymywana na czas
trwania dwÛch cykli instrukcyjnych,
niezaleÅ‚nie od ürÛdÅ‚a zliczanych impul-
sÛw. Trzeba to uwzglÍdniĘ przy obli-
czaniu wartości wpisywanej do liczni-
ka. Licznik TMR0 mołe pracowaĘ
w dwÛch trybach: timera i licznika. Wy- WystÍpuje tutaj opÛünienie miÍdzy zbo- Przedstawmy przykÅ‚ad inicjalizacji
bÛr trybu jest realizowany przez odpo- czem zewnÍtrznego impulsu, a odpowia- licznika TMR0. Preskaler przypisany
wiednie ustawienie bitu T0CS w OP- dajÄ…cym mu zwiÍkszeniem stanu licz- jest do TMR0 i dzieli wstÍpnie we-
TION_REG (rys. 4). nika (pomiar czasu pomiÍdzy dwoma wnÍtrzny przebieg Fosc/4 przez 32.
NaleÅ‚y dodaĘ, Å‚e pomiÍdzy ürÛdÅ‚o zboczami sygnaÅ‚u zewnÍtrznego obar- bcf STATUS,RP0 ;bank0
impulsÛw a licznik moÅ‚na wÅ‚Ä…czyĘ pro- czony jest bÅ‚Ídem Ä…4*tosc). Synchroni- clrf TMR0 ;zeruj TMR0
gramowany preskaler (wstÍpny dziel- zacja przebiegu podawanego na RA4/ ;i preskaler
nik), poprzez wyzerowanie bitu PSA T0CKI odbywa siÍ poprzez dwukrotne bsf STATUS,RP0 ;bank1
w OPTION_REG. Programowanie stopnia prÛbkowanie wyjÅ›cia preskalera w kaÅ‚- bcf OPTION_REG,T0CS ;przebieg
podziaÅ‚u preskalera nastÍpuje przez dym cyklu rozkazowym (fazy: Q2 i Q4). ;Fosc/4
ustawienie bitÛw PS0...PS2 rÛwnieÅ‚ Z tego powodu poziom wysoki na wyj- bcf OPTION_REG,PSA ;preskaler
w OPTION_REG. W trybie timera ściu preskalera musi trwaĘ co najmniej ;do TMR0
(T0CS=0) ürÛdÅ‚em zliczanych impulsÛw 2*tosc, aby mÛgÅ‚ byĘ w ogÛle wykryty bcf OPTION_REG,PS0 ;preskaler
jest wewnÍtrzny sygnaÅ‚ o czÍstotliwoÅ›ci przez ukÅ‚ad prÛbkowania. ;1/32
oscylatora mikrokontrolera podzielonej Przepełnienie licznika TMR0 mołe bcf OPTION_REG,PS1
przez cztery. W trybie licznika generowaĘ przerwanie. W momencie bsf OPTION_REG,PS2
(T0CS=1) ürÛdÅ‚em impulsÛw jest sygnaÅ‚ przepeÅ‚nienia ustawiana jest flaga T0IF
zewnÍtrzny podawany na wyprowadze- w rejestrze INTCON. Flaga ta musi byĘ bcf STATUS,RP0 ;bank0
nie RA4/T0CKI. Poprzez odpowiednie zerowana przez procedurÍ obsÅ‚ugi prze- movlw stala_zliczania
ustawienie bitu T0SE w OPTION_REG rwania. Przerwanie zostanie zgłoszone, ;interesująca nas wartość
mołna wybraĘ zbocze impulsu, przy jełeli bit maski T0IE w INTCON RE- movwf TMR0 ;wpis do licznika
ktÛrym nastÍpuje inkrementacja liczni- GISTER bÍdzie jedynkÄ…. Schemat blo- OczywiÅ›cie moÅ‚na wpisaĘ caÅ‚y bajt
ka. Zliczanie zewnÍtrznych impulsÛw kowy TMR0 przedstawiony jest na rys. do OPTION_REG. W przykÅ‚adzie uÅ‚yto
jest synchronizowane wewnÍtrznym 8, a specyfikacjÍ rejestrÛw z nim zwiÄ…- celowo rozkazÛw bcf i bsf, aby poka-
sygnaÅ‚em zegarowym mikroprocesora. zanych pokazano na rys. 9. zaĘ moÅ‚liwośĘ ustawienia poszczegÛl-
nych bitÛw.
Kolejne cztery rejestry obszaru SFR:
EECON1, EECON2, EEDATA i EEADR
(rys. 10) obsÅ‚ugujÄ… 64 bajty pamiÍci
danych typu EEPROM (od adresu 00h
do adresu 3fh), ktÛre moÅ‚na zapisywaĘ
i odczytywaĘ podczas normalnej pracy
mikrokontrolera.
DostÍp do tej pamiÍci jest moÅ‚liwy
tylko w sposÛb poÅ›redni. W EEDATA
zawarta jest dana, ktÛra jest zapisywa-
na lub odczytywana. Adres tej danej
wpisany jest do 8-bitowego rejestru EE-
Rys. 8.
ADR. Poniewał zaimplementowane są
Elektronika Praktyczna 1/2002
80
K U R S
movf W,dana
movwf EEDATA ;zapisanie danej
bsf STATUS,RP0 ;bank 1
bcf INTCON,GIE ;zablokowanie
;wszystkich przerwań
bsf EECON1,WREN ;pozwolenie
;na wpis
movlw 0x55 ;konieczna sekwencja
;inicjujÄ…ca wpis
movwf EECON2
Rys. 9.
movlw 0xaa
movwf EECON2
bsf EECON1,WR ;start wpisu WR=1
bsf INTCON,GIE ;odblokowanie
;przerwań
_sprwrbtfsc EECON1,WR
;sprawdzanie bitu WR
goto _sprwr ;WR=1
bcf EECON1,WREN ;wpis kompletny
;i zablokowanie następnego
bcf STATUS,RP0 ;bank0
Rys. 10. Producent zaleca, aby w trakcie wy-
konywania sekwencji zapisywania do
tylko 64 bajty, to dwa najstarsze bity tości 55h i AAh do rejestru EECON2. EECON2 były zablokowane wszystkie
EEADR muszÄ… byĘ wyzerowane. Bez tej operacji zapis do pamiÍci nie przerwania. Dobrym zwyczajem jest teÅ‚
Przed operacjÄ… zapisywania wywoÅ‚y- rozpocznie siÍ. Dopiero teraz wpisanie utrzymywanie bitu WREN w stanie
wana jest procedura automatycznego ka- jedynki do bitu WR inicjuje operacjÍ zero, a wpisywanie jedynki tylko na
sowania zawartoÅ›ci komÛrki pamiÍci, zapisu do pamiÍci. Po jej zakoÒczeniu czas wpisu do pamiÍci EEPROM. Zale-
do ktÛrej bÍdzie wpisywana nowa war- zerowany jest bit WR i wpisywana jest ca siÍ teÅ‚, aby po kaÅ‚dym zapisie wy-
tośĘ. Czas zapisywania jest kontrolowa- jedynka do EEIF (rejestr EECON1). Je- konaĘ procedurÍ weryfikacji (odczytanie
ny przez specjalny wewnÍtrzny timer Å‚eli wpis do pamiÍci EEPROM zosta- zapisanego bajtu i porÛwnanie z zapisy-
i moÅ‚e siÍ zmieniaĘ w zaleÅ‚noÅ›ci od nie nieoczekiwanie przerwany przez ze- wanym). Wszystkie przedstawione tutaj
temperatury i napiÍcia zasilania. Usta- rowanie wymuszone na wejÅ›ciu MCLR mechanizmy majÄ… na celu uchronienie
wienie bitu zabezpieczenia przed od- lub zerowanie od watchdoga, to do bi- przed wpisaniem przypadkowych da-
czytem powoduje, ze programator nie tu WRERR zostanie wpisana jedynka. nych do pamiÍci, w ktÛrej przechowy-
ma dostÍpu do pamiÍci EEPROM, ale W takim przypadku naleÅ‚y powtÛrzyĘ wane sÄ… zazwyczaj dośĘ istotne dane.
mikrokontroler moÅ‚e realizowaĘ opera- operacjÍ wpisu. Typowy czas zapisu Do omÛwienia pozostaÅ‚y jeszcze re-
cje zapisu i odczytu. wynosi ok. 10ms. IstniejÄ… dwa sposoby jestry: PCLATCH (adresy 0ah i 8ah),
Aby odczytaĘ dane z pamiÍci nale- sprawdzenia, Å‚e bajt jest juÅ‚ zapisany. PCL (adresy 02h i 82h), INDF (adresy
Å‚y wpisaĘ adres odczytywanej komÛrki Pierwszy z nich polega na odblokowa- 00h i 80h) oraz FSR (adresy 04h
do EEADR. Wpisanie jedynki do bitu niu przerwania od kompletnego zapisu i 84h). Rejestr PCL zawiera 8 mniej
RD rejestru EECON1 (rys. 11) inicjuje EEPROM (bit EEIE=1 w INTCON REGIS- znaczÄ…cych bitÛw licznika rozkazÛw.
operacjÍ odczytu z pamiÍci. Bitu tego TER). WÛwczas po zakoÒczeniu wpisu MoÅ‚na go zapisywaĘ i odczytywaĘ. Re-
nie mołna wyzerowaĘ programowo. Jest zgłaszane jest przerwanie. W procedurze jestr PCLATCH zawiera 5 bardziej zna-
zerowany automatycznie po zakoÒczeniu obsÅ‚ugi naleÅ‚y wyzerowaĘ flagÍ EEIF. czÄ…cych bitÛw licznika i nie moÅ‚na go
operacji odczytu. Dane pojawiajÄ… siÍ Drugi sposÛb polega na sprawdzaniu bezpoÅ›rednio odczytywaĘ ani zapisywaĘ.
w EEDATA tak szybko, Å‚e moÅ‚na je w pÍtli czy EEIF=1, lub czy WR=0 (bit Na rys. 12 przedstawiono sposÛb two-
czytaĘ juÅ‚ w nastÍpnej instrukcji. Za- EEIE=0). PoniÅ‚ej podano przykÅ‚ad pro- rzenie licznika rozkazÛw PC z rejestrÛw
wartośĘ EEDATA nie zmienia siÍ do cedury wykorzystujÄ…cej sprawdzanie PCL i PCLATCH w dwu rÛÅ‚nych sytua-
momentu nastÍpnego odczytu lub zapi- w pÍtli bitu WR. cjach.
su do pamiÍci. PrzykÅ‚ad procedury od- _wreeprom movlw adree MoÅ‚liwośĘ wpisywania do rejestru
czytu komÛrki o adresie 10h w pamiÍci movwf EEADR ;zapisanie adresu PCL, i tym samym wykonywania sko-
EEPROM:
adree equ 0x10 ;adres 10h
_rdeeprom movlw adree ;adres w W
movwf EEADR
bsf STATUS,RP0 ;bank 1
bsf EECON1,RD ;inicjuj odczyt
bcf STATUS,RP0 ;bank 0
movf EEDATA,W ;dana z pamięci do W
Zapisywanie do pamiÍci EEPROM
nie jest juł tak proste. W pierwszej ko-
lejności naleły wpisaĘ do EEADR ad-
res, a do EEDATA zapisywany bajt. Na-
stÍpnie trzeba ustawiĘ bit WREN rejes-
tru EECON1 (wpisaĘ jedynkÍ). Bit ten
jest zerowany po włączeniu zasilania.
Wprowadzenie dodatkowego bitu, ktÛry
trzeba ustawiaĘ przed operacją zapisu,
pomaga uniknąĘ bÅ‚Ídnych zapisÛw do
pamiÍci po wÅ‚Ä…czeniu zasilania,
zanikach napiÍcia lub przy bÅ‚Ídnym
wykonywaniu programu. To jeszcze nie
wszystko. Naleły wykonaĘ teraz specy-
ficznÄ… operacjÍ wpisania sekwencji war-
Rys. 11.
Elektronika Praktyczna 1/2002
82
K U R S
....... - wpisz zawartośĘ W do komÛrki o ad-
....... resie 20h. CzÍsto jednak jest potrzebny
_rdconst addwf PCL,f ;do PCL bufor danych w pamiÍci RAM. Poszcze-
;wynik operacji PCL+W gÛlne elementy tego bufora sÄ… adreso-
retlw 0x35 wane za pomocÄ… wskaünika, ktÛry jest
retlw 0x00 zawarty w jakimÅ› rejestrze. Do tego
retlw 0x12 ;powrót z proc. mołna wykorzystywaĘ mechanizm adre-
;_rconst w W zawarte 0x12 sowania pośredniego. Aby zaadresowaĘ
retlw 0x44 komÛrkÍ pamiÍci naleÅ‚y do rejestru
W wyniku działania tego fragmentu FSR wpisaĘ jej adres. Jełeli chcemy
programu, do komÛrki z_staÅ‚a pamiÍci odczytaĘ komÛrkÍ o adresie zawartym
RAM zostanie wpisana stała 12h. Gdy- w FSR, to trzeba teraz odczytaĘ zawar-
by w momencie wywołania _rdconst tośĘ INDF.
w rejestrze W była wartośĘ np. 0, to Jełeli chcemy wpisaĘ daną pod ad-
do z_stała zostanie wpisana wartośĘ res określony w FSR, to trzeba tą daną
35h. Trzeba pamiÍtaĘ, aby wartośĘ W wpisaĘ do INDF. PokaÅ‚emy to na przy-
w momencie wywołania _rdconst nie kładzie odczytywania danych z bufora:
zawieraÅ‚a wiÍkszego przesuniÍcia niÅ‚ movlw 0x0c
ostatni rozkaz retlw. Kompilator asem- movwf FSR ;do FSR adres
blera MPASM zawiera dyrektywÍ DT, ;poczÄ…tku bufora danych
ktÛra pozwala uniknąĘ Å‚mudnego wpi-
sywania retlw dla wiÍkszych tablic da- movf INDF,w ;do W zawartość
Rys. 12.
nych. ;komórki o adresie 0ch
W naszym przykÅ‚adzie procedurÍ .....
kÛw, wykorzystywana jest w procedu- _rdconst moÅ‚na zapisaĘ inaczej: .....
rach odczytywania stałych umieszczo- _rdconst addwf PCL,f incf FSR,f ;FSR=FSR+1 następna
nych w pamiÍci programu. Przeanalizuj- dt 0x35,0x00,0x12,0x44, ;pozycja w buforze
my to na przykładzie: a kompilator sam juł wpisze konieczne movf INDF,w ;do W zawartość
z_stała equ 0x0f instrukcje retlw. ;komórki o adresie 0dh
movlw 0x02 ;do W przesunięcie Rejestry INDF i FSR słułą do po- .....
;wzglÄ™dem adresu _rdconst Å›redniego adresowania pamiÍci RAM. Na tym koÒczymy opisywanie rejes-
call _rdconst KaÅ‚dÄ… komÛrkÍ tej pamiÍci moÅ‚na za- trÛw z obszaru SFR.
movwf z_stała ;zapamiętanie adresowaĘ bezpośrednio podając jej ad- Tomasz Jabłoński, AVT
;stałej w komórce pamięci ram res w kodzie rozkazu, np. movwf 0x20 tomasz.jablonski@ep.com.pl
Elektronika Praktyczna 1/2002
Elektronika Praktyczna 1/2002
83
83


Wyszukiwarka

Podobne podstrony:
żuraw 80
Dynapath 20M M074 80 1
OLYMPUS µ [mju] III 80 instrukcja obsługi
cmd=kom jedno,80&serwis=1
Fanuc 11M MS [HM] M433 80

więcej podobnych podstron