; tohle je komentar. Co je za strednikem, to se nepreklada LIST P=PIC16F1708 ; typ procesoru, PRED include #include p16F1708.inc ; nacucne uvedeny file ; podivejte se, co je v nem ; najdeme ho v C:\Program Files (x86)\Microchip\MPLABX\v3.15\mpasmx code ; tady zacina kod programu __CONFIG _CONFIG1, _WDTE_OFF ; vypiname WatchDog org 0 ; org nasledujici instrukce je na adrese ..... goto start ; sem si dejte breakpoint org 4 retfie ; navrat z preruseni, zatim nic - naucime se pozdeji start: ; do WATCH si dejte registr BSR ; po RESETu má v sobe 0 , ale je dobrým zvykem se na nic nespolehat a vynulovat ho clrf BSR movlw 0 movwf FSR0H movlw 35 movwf FSR0L ; tady jsme nacpali do registru FSR0 cislo 0x0035 ; do wiew -WATCH si pridejte FSR0 movlw 15 movwf 32 ; cislo 15 ukladame do bunky 32 ; Window - Pic Memory Views - File registers ; a podivame se do pameti, kam se to ulozilo ; pamet RAM - file registers movwf 0 ; cislo 15 ukladame do bunky 35 ; protoze v registru FSR je prave ted cislo 35 ; podivejte se do incf FSR0 ; TOHLE JE ZRADA ; zvysi o 1 pouze FSR0L ; NE cely sestnactibitovy FSR0 incf FSR0L ; tohle je tedy stejne jako inc FSR0 movwf 0 ; ukladame do bunky 37, protoze ve FSR0 je cislo 37 incf FSR0 movwf INDF0 ; ukladame do bunky 38 movlw INDF0 ; ????? co udela tohle ???? ; za INDF0 si dosadte jeho ciselny ekvivalent ; presne tak to totoz dela prekladac incf INDF0 ; zvysuje o 1 bunku 38 incf INDF0 incf INDF0 movlw 5 addwf INDF0,1 ; scitam registr W s bunkou 38 addwf INDF0,1 addwf INDF0,0 ; take scitam, ; ale vysledek jsem ulozil do registru W ; tady je FSR0H == 0, ; a 7. bit FSR0L == 0 takze jsme na strance 0 movlw 18 incf FSR0H ; tim jsme se prepnuli na stranku 2 ; fakt opravdu na stranku 2 ; ujasnete si, ktere bity registru FSR ovladaji stranku movwf INDF0 ; ukladame do bunky 38 na strance 2 nop nop bsf FSR0L,7 ; prepnuli jsme se na stranku 3 ; opet se podivejte, co je v registru FSR0 ; a uvedomte si, ktere bity rozhoduji o strance movwf INDF0 ; ukladame do bunky 38 na strance 3 nop nop clrf FSR0H movlw 20 movwf FSR0L movlw 56 movwi FSR0++ ; ulozime do bunky , na kterou ukazuje FSR0 movwi FSR0++ ; a potom FSR 0 1 zvysime movwi FSR0++ ; tahle instrukce inkrementuje CELY FSR0 , pracuje s celym registrem movwi FSR0++ movwi ++FSR0 ; tady nejdrive FSR0 zvysime o 1, a potom pouzijeme movwi ++FSR0 ; pro adresaci ; v ukladani cisel do RAM bude tedy dira movlw 75 movwi FSR0-- ; ulozime a snizime FSR0 movwi FSR0-- ; tahle instrukce dekrementuje CELY FSR0 , pracuje s celzm registrem movwi FSR0-- movwi --FSR0 ; nejdrive snizime FSR , potom pouzijeme pro ulozeni hodnoty movwi --FSR0 ; existuje take instrukce moviw ; ktera uklada data obracene, tedy ; z bunky pameti do rwgistru W movlw 04 movwf FSR0L movlw 56 movwf INDF0 ; ????? kam jsme ulozili cislo 56 ? movlw 75 movwf INDF0 ; a kam jsme ted ulozili cislo 75 ???? movlb 0 movlw 0x5f movwf 20 movlw 0xa0 movwf FSR1L clrf FSR1H movlw 5 sem: movwf 1 ; divejte se do file Registers na stranku 1 incf FSR1L decfsz 20 goto sem nop ; az budete vedet, co dela czklzs vzse, dejte si sem breakpoint a F5 movlw 0x25 movwf 20 movlw 0xa0 movwf FSR1L clrf FSR1H tam: incf 1 ; opet se divane do File Registers na stranku 1 incf FSR1L incf FSR1L decfsz 20 goto tam ; pokud to vsecno chapete az sem ; tak muzete rict, ze umite neprime adresovani goto $ end ; end znamena "a tady prestan prekladat" ; NENI !!!! to konec programu pro PICa, ; ve funkcnim PICovi ZADNY KONEC PROGRAMU neni, musi to stale neco delat ; end equ code define org navesti jsou prikazz pro PREKLADAC, ; tedy pro program, ktery ze slov dela instrukce (cisla !!!! ) ; proto take po techto instrukcich nenajdete ; ve hex file ani stopy