[HWnews] Makra pro 18xxxx

Michal G. MichalGregor@seznam.cz
Sobota Březen 20 09:40:29 CET 2004


> 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 :).

Instrukce skpc zprehlednuji program a ubiraji navesti (kdo je ma porad
vymyslet):

Maly priklad:
    movf ADRES,W
    clrc
    sublw    K_KONSTANTA

    movlw    K_TEXT_VYBITO ;Adresa textu
    skpc
    movlw    K_TEXT_NABITO ;Adresa textu

    call    Vypis_Text

Po uprave:

    movf ADRES,W
    clrc
    sublw    K_KONSTANTA

    movlw    K_TEXT_VYBITO ;Adresa textu
    bc   Skoc ;(nevim jestli je to spravne, zatim jsem to v zacatcich na
PIC18)
    movlw    K_TEXT_NABITO ;Adresa textu

Skoc
    call    Vypis_Text



Michal Gregor




>
> 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
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> HW-list@mailman.nethouse.cz
> http://nethouse.cz/mailman/listinfo/hw-list
>




Další informace o konferenci Hw-list