; tohle je komentar. Co je za strednikem, to se nepreklada LIST P=PIC16F88 #include p16F88.inc ; nacucne uvedeny file ; podivejte se, co je v nem #define bitik STATUS,0 #define str1 bsf STATUS,6 #define bit0 STATUS, RP0 #define bit1 STATUS, 6 pocitatko equ 20 ; ********** NASTAVENI F U S E S ; a tohle nadefinuje fuses pro programovatko ; vsecnny potrebne konstanty jsou v include file, oddil ; Configuration Bits ; procesor ma dva konfiguracni registry, proto je to tam dvakrat ;Program Configuration Register 1 __CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_IO & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF ;Program Configuration Register 2 __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF org 0 ; org nasledujici instrukce je na adrese ..... nop nop ; tohle NOIP je tady kvuli in-circuit-debuggeru ; PICKIT2 - viz file pickit2_pouziti.doc - ; nebo datasheet 16F88 -kap. 15.14 goto start org 4 bcf PIR1, TMR2IF ; tady s periodou 65 ms decfsz pocitatko retfie movlw .15 movwf pocitatko comf PORTA nop ; tady s periodou 1 sec nop BSF STATUS,RP1 BSF STATUS,RP0 ; stranka 3 BSF EECON1 , RD ; odstartování čtení – nastaven bit RD nop ; POZOR !!!! dve instrukce po BSF EECON1 , RD nop ; se neudelaji - preskoci se. ; proto je tady 2x NOP BCF STATUS,RP0 ; stranka 2 MOVF EEDATA , 0 ; a data jsou k dispozici v registru W ; jsem na strance 2 stale movwf PORTB ; nacpeme to na port, at uz je to cokoli btfss STATUS, Z ; pokud jsme narazili na 0 v tabulce goto prer01 ; a tady znovu nastavujeme pocatecni hodnoty adres movlw low tabulka MOVWF EEADR ; zápis dolni pulky adresy , ta je v registru W movlw high tabulka MOVWF EEADRH ; zapis horni pulky adresy bcf STATUS, RP0 ; stranka 0 bcf STATUS, RP1 retfie ; a pryc z preruseni prer01: bsf STATUS, RP1 bcf STATUS, RP0 incf EEADR btfsc STATUS,Z ; pokud je EEADR 0, tak jsme pretekli incf EEADRH ; a musime zvystit EEADRH prer02: bcf STATUS, RP0 ; stranka 0 bcf STATUS, RP1 retfie ; a pryc start: bsf bit0 bcf bit1 banksel TRISB ; direktiva prekladace banksel vygeneruje sptravne nastaveni ; bitiku ve STATUS registru pro ten registr, ; ktery je napsan za za ni ; podivejte se do Wiew - Program Memory - instrukce pro ; nastaveni bitiku STATUS jsou tam DVAKRATY !!! ; jednou jsme je napsali my, podruje je udelela instrukce ; banksel ; samozrejme, budete to pouzivat jenom jednou, ; tady je to napsano tak, abyste videli, co to dela. ; dalsi vyhodou banksel je to,ze prekladac ; potom vi, ve ktere bance ma prepnutou pamet, a nebouri se ; - zakomentujte si banksel a podivejte se na Messages po prekladu movlw 00 ; 0110 0000 - port B skoro cely vystupni krome bitu 5 a 6 - movwf TRISB ; tam je PICKIT movlw 0f0 ; horni polovina portu A je vstyupni, dolni vystupni movwf TRISA movlw 66 ; x110 x100 ; 4Mhz , z vnitrniho oscilatoru , frkvrnce 8MHz / 2 movwf OSCCON ; stranka 1 movlw 07 movwf CMCON ; vypinam komparatory clrf ANSEL ; nastavuji port A jako digitalni, vypinam prevodnik ; jeste vypinam registr ADCON0, ale ten je na strance 0 movlw .255 movwf PR2 ; registr periody pro citac PR2 bsf PIE1,TMR2IE ; poustim preruseni pro TMR2 bcf bit0 ; stranka 0 bcf ADCON0,ADON ; a cely modul A/D prevodniku vypinam ; T2CON je x111 111x napriklad ff postscaller deli 16 prescaller deli 16 citac zapnut movlw 0ff movwf T2CON clrf PIR1 ; pri jistotu nuluji vsechny pozadavky na preruseni clrf INTCON clrf PORTA ; muluji porty clrf PORTB movlw .15 movwf pocitatko BSF STATUS,RP0 BSF STATUS,RP1 ; stranka 3 BSF EECON1, EEPGD ; pamet PROGRAMU FLASH !!! BCF STATUS,RP0 ; stranka 2 movlw low tabulka MOVWF EEADR ; zápis dolni pulky adresy , ta je v registru W movlw high tabulka MOVWF EEADRH ; zapis horni pulky adresy BCF STATUS,RP0 BCF STATUS,RP1 ; stranka 0 bsf INTCON, PEIE ; a povoluji preruseni od periferii bsf INTCON, GIE ; finalne poustim preruseni smycka: nop nop nop goto smycka ; nasledujici prikazy si prohlednete ve view - ProgramMemory ; uvidite cisla primo narvana do pameti programu org 100 db 55,66,77,88,99,0AA,0BB,0CC ; db nacpe do 14 bitu byty postupne za sebe, takze bohuzel ; ten jeden byte se urezava dw 55,66,77,88,99,11,22,33,44,55,66,77,88,99,1111,3fff dw 2456, 1f1f ; dw je ta spravna direktiva, nacpe do 14 bitu jedno slovo, ; pokud je to slovo rozumne dlouhe - do 14 bitu - je vse v poradku org 120 dw 'N', 'a','z','d','a','r',' ','T','o','m','a','s','i' ; tohle nahore funguje, ale je to zoufalost s temi '' a , org 138 de "Nazdar Tomasi ! To je skvele, ze jsme objevili ten spravny prikaz ", 0 ; takze to spravna direktiva je proste de ; a teprve tady zacne nase tabulka org 2f0 ; 2f0 jsme zvolili schvalne, aby bylo videt, ; ze po preteceni EEADR se inkrementuje EEADRH ; dejte si tam breakpoint a divejte se tabulka: de "Nazdar Tomasi ! To je skvele, ze jsme objevili ten spravny prikaz " de "Slava ! slava ! " dw 0 de "A za tu 0 by to uz nemelo prelezt" 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 define org navesti jsou prikazy pro PREKLADAC, ; tedy pro program, ktery ze slov dela instrukce (cisla !!!! ) ; proto take po techto instrukcich nenajdete ; v hex file ani stopy ; a take je samozrejme neuvidite ve Watch - Program Memory