[HWnews] Makra pro 18xxxx

jiri@bezstarosti.cz jiri@bezstarosti.cz
Pátek Březen 19 19:44:30 CET 2004


Vedel jsem ze se u tohoto trochu rozepisu, tak az ted :).

Ty makroinstrukce mi nikdy nechybely at jsou ci nikoli, nepouzivam je, rad
vidim rovnou co pisu :). Ale v okamziku existence BC, BNC, BZ, BNZ ...
muzete pouzivat rovnou to, co jste temi makry myslel i jeste jinak :).

Velice rychle prijdete na to, ze u PIC18 se o banky az tak moc nestarate. To
A si klidne muzete v zapisu usetrit. Ono kdyz je to do ACCESS banky, tak to
sam kompilator pozna a A tomu prizpusobi, pokud je to jinam, tak zase to A
hodi kam patri, takze ze ne do ACCESS. Proste kdyz udelate tohle:

CBLOCK 0
  TMP0
ENDC

a tohle:

CBLOCK 0x200
  TMP1
ENDC

tak pri pristupu do TMP0 pouzije kompilator rovnou tu ACCESS banku a u TMP1
ji nepouzije a to automaticky, stejne jako rovnou bez definovani toho A
nastavi co hazite napr. do PORTB rovnou spravne. Takze to A nemusite nikam
ani psat :).

Tim je tedy situace jednodussi a s tim A se alespon nespletete. Protoze je
zde pristupny W registr jako WREG, tedy jako jakykoli jiny registr, muzete
pouzivat fintu bez prehazovani bank napr. takovouto:

MOVFF	NECO1,WREG
XORLW	b'10101010'
MOVFF	WREG,NECO1
...

nebo ale take:

MOVLW	b'10101010'
LFSR	FSR2,NECO1
XORWF	INDF2,F

coz sice naboura FSR2, ale je to kratsi a pokud Vam jedno FSR nebude v softu
chybet a muzete jej takto pouzivat ... nebo si jej obcas odlozit ;).

Pomoci MOVFF prehodite cokoli kamkoli (a jeste bez nabourani W), protoze
tohle je bez bankovani - pouziva se zde cela adresa registru.

U spousty aplikaci se da bohate vyuzivat 3x FSR, protoze aplikace narocnejsi
na pamet nemivaji az tolik promennych pro beh, ale spise nejaka data, ktera
je obsluhovat pres smernik daleko efektivnejsi nez jakkoli jinak a co je
potreba pro beh programu se pak casto vejde cele do ACCESS + BANKx, cimz
mate hromadu registru pristupnych rovnou (256 + 128 v ACCESS) bez toho,
abyste kdekoli v programu jinde nez na pocatku vubec bankoval. Proste se
rozhodnete mit cely program prepnuty do BANK1, z BANK0 pouzijete ACCESS
banku a zbytek pameti se pouzije za pomoci FSR pres INDF, POSTINC ... a
maximalne MOVFF - stale je to pohodlnejsi, nez bankovat. Dale si muzete v
ACCESS bance udelat jeden registr, ktery si reknete, ze nikde nepouzijete
jinak nez ke kratke konstrukci typu - prehod do nej neco z jine banky pomoci
MOVFF, zpracuj to tam ci osahej to v bitech a pripadne vrat to pomoci MOVFF,
no a v preruseni pouzivejte jiny nez v programu samotnem. W registr tim
zustane neporusen (tedy podle one akce co provedete).

Vyjimku z meho tvrzeni by mohly byt napr. PIC18 s CAN, kterezto maji mimo
"primy dosah bez bankovani" dostupne nektere registry pro CAN, ale to uz je
spise kosmeticky detail a stejne se i tam da bankovani vyhnout.

Kdyz uz jsem zase zabredl do tech prog. praktik, prostudujte si ten
instrukcni soubor PIC18 odzhora dolu instrukci po instrukci ne jen zbezne.
Nevedet napr. ze existuje ADDWF ale take ADDWFC nebo dale ze DECF a INCF
nastavuji i C a dalsi priznaky (nejen Z), by mohlo docela bolet, stejne jako
pekne instrukce INFSNZ ci DCFSNZ a dalsi. Prace s pameti programu jako
tabulkami je pak fajn - predstavte si typ s externi pameti, ktera je treba
SRAM - jakysi mix dvou architektur.

PIC18 jsou proste MCU pro opravdove fajnsmekry a nektere veci, ktere nikdo
nepopisuje v nich vlastne jsou a ta magie zustava na kazdem, co s tim dokaze
- klidne se to da pouzivat i jako "obycejnou" PIC16 :). Prikladem si
vytvorit klidne 2x STACK a rvat tam veci pomoci neprimeho adresovani za
pomoci FSR a jeho posuvu rovnou jednou instrukci - to sice asi neni uplne po
lopate nikde popsano, ale staci trochu promyslet co to dela a ne jen videt
instrukce a tak je pouzivat. Co mne dohani k silenstvi je to, ze nekdo
nevidi "jiny zasobnik" s prislusnymi POP a PUSH a uz to tam podle nej proste
neni, protoze to proste neni nikde "primo napsano" :).

Predpoklada se (mam alespon takovy dojem), ze tenhle MCU pouzije stejne
dobre "casovatel", "mag", "krotitel brouku" jako "popisovac deje" - ty
posledni zminene nesnasim - otrocky pisi a co jim kdo nerekne je nenapadne
(bohuzel ti byvaji nejpracovitejsi), "krotitel brouku" se tak vetsinou
narodil a nemuze za to :))).

Pokud jsem se nekde dopustil preklepu ci prehmatu omluvte mne, uz mi to dnes
nechce moc zapalovat :(.

--
Jiri Bezstarosti



-----Original Message-----
From: Michal G. [mailto:MichalGregor@seznam.cz]
Sent: Thursday, March 18, 2004 9:40 PM
To: HW-News
Subject: [HWnews] Makra pro 18xxxx


Pokusim se prepsat program na 18F452 a hned jsem narazil na mensi problem.
Asembler nema definovany makroinstrukce skpc, skpz, clrc atd. Ma to nejaky
hlubsi duvod?
Aby jsem nemusel vsechno prepisovat, vytvoril jsem si makro soubor:
skpz macro
 btfss STATUS,Z,A
 endm
 
skpnz macro
 btfsc STATUS,Z,A
 endm
 
B equ 1 ;Přístup přes BSR

(neni to jeste cele dokoncene) Posledni radek mam, abych nemusel za
instrukci psat dlouze BANKED.
Neni to slepa cesta?
 
Michal Gregor



Další informace o konferenci Hw-list