; 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 ; file si otev?eme v n?jakém textovém editoru (nap?. PSPad Editor, WordPaD, poznámkový blok, ..... ) 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 Variables nebo Watches si dejte WREG ; do Variables nebo Watches si dale dejte registr BSR ; po RESETu má v sobe 0 , ale je dobrým zvykem se na nic nespolehat a vynulovat ho clrf BSR clrf 22 ; nasledujici instrukce nuluji bunky, to zatim klidne preskocte incf BSR clrf 22 incf BSR clrf 22 clrf BSR ; a odtud je to zajimave, divame se na BSR movlw 83 movwf 22 ; do Variables si prihodíme bunku 22 ; proste do sloupce Name napiseme adresu - 0x22 ; no a divame se, co to dela. ; take si pustime okno File Registers a tam se take divame movlw 02 movwf BSR movlw 25 movwf 22 ; do Variables si prihodíme bunku 0x122 ; vidime, ze zapisujeme do uplne jide bunky, protoze mame jinak BSR ; a take si bunku najedem v okne File Registers movlw 03 movwf BSR movlw 12 movwf 22 ; do Variables si prihodíme bunku 0x1A2 ; vidime, ze zapisujeme do uplne jide bunky, protoze mame jinak BSR ; dobre je to videt v prehledu bunek v tab. TABLE 3-4 ; samozrejme se divame i do File Registers nop nop nop clrf BSR movlw 56 movwf 75 ; ukladame co Common RAM movlw 5 movwf BSR ; prepiname na stranku 5 clrw movf 75,0 movlw 1f ; banka 31 movwf BSR ; prepiname na stranku 5 clrw movf 75,0 ; a vidime, ze cteme stale totez cislo nop movlw 01 movwf BSR ; do Variables si prihodime PORTC, TRISC, LATC ; podivame se do file p16F1708.inc - otevreme si v textovem editoru ; najdeme si PORTC, TRISC, LATC a podivame se na prislusne EQU ; v adresari C:\Program Files (x86)\Microchip\MPLABX\v3.15\mpasmx ; nebo nejakem podobnem, kam jste si to nainstalovali ; a divame se na hodnoty pomoci EQU ; vidime, ze kazdy registr ma jinou adresu ; zaroven se podivame do datasheetu procesoru ; na stranu 26 , TABLE 3-4: PIC16(L)1708 MEMORY MAP (BANKS 0-7) ; a ujasnime si, kam se co pokousime zapsat movlw 85 movwf PORTC movlw 17 movwf TRISC movlw 78 movwf LATC ; ukladame stale do TRISC, protoze jsme v bance 1 movlb 02 ; a protoze banka se prepina casto, ; je v procesoru instrukce primo pro zapis do reg. BSR ; movlw 02 ; movwf BSR movlw 85 movwf PORTC movlw 78 movwf LATC movlw 17 movwf TRISC ; a tady ukladame trikrat do LATC , protoze jsme v bance 2 ; s bankou 0 - PORTC - to nezkousejte, tam je trochu problem ; viz kapitola PORTY movlw PORTC ; a tady si fakt ujasnete, jestli opravdu rozumite, co se tady deje nop ; prihodte si WREG do Variables movlw TRISC nop movlw LATC ; a tady rve prekladac: Warning[202] C:\USERS\KUBALIK\MPLABX01\DRUHY.X\PAMET02.ASM 122 : ; Argument out of range. Least significant bits used. ; Proc rve ? ; co se ulozi do W ? ; hlasku najdete v okne OUTPUT ; !!!!!! hlasky Warning si vzdy zkontrolujte, i kdyz se program prelozi ; casto indikuji semantickou chybu nop nop nop ; existuje nastroj, ktery za vas nastavi stranku. ; je to makro banksel ; banksel NENI prikaz pro procesor, je to prikaz pro prekladac. ; banksel NENI prikaz pro procesor, je to prikaz pro prekladac. ; banksel NENI prikaz pro procesor, je to prikaz pro prekladac. ; banksel NENI prikaz pro procesor, je to prikaz pro prekladac. ; banksel vyrobi instrukci movlb neco podle toho, co mu zadate ; v simulatoru si otevreme okno Program Memory ; Windows - Pic memory wievs - Program Memory ; divejte se do Program Memory, cvaknete si mysi na ni, ; a pri simulaci pomoci F7 se divejte do Program Memory ; vidime, ze banksel se preklada jako movlb banksel 0x268 nop banksel 0x123 nop banksel 0x2ef nop nop banksel PORTC nop banksel LATC nop banksel TRISC nop ; a tady uz mame napsano, jak se to doopravdy dela banksel TRISC movlw 25 movwf TRISC movlw 25 clrf 0x09 ; tohle vynuluje registr W ; registr W je totiz take nekde ulozen, a to na bunce 9 banksel 0 movlw 35 movwf 30 clrw movf 35 , 0 ; nula znamena uloz do registru W clrw movf 35 , 1 ; jedna znamena uloz zpatky do bunky ; prikaz se zda nesmyslny, proc ukladat cislo z bunky ; do te same bunky ; ale movf nastavuje bity STATUS registru ; takze tato instrukce testuje, zda je obsah bunky roven 0 movf 35 ; tady nemame urcenou destinaci ; prekladac doplni ,1 ; takze ukladame zpet do bunky 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