; Mazani programove FLASH 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 ; tady je dulezite _WRT_PROTECT_OFF ; nebo nejaka castecna varianta, odblokovat cast pameti ; jinak ta pamet flash nepujde smazat ;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 retfie ; a pryc start: bsf bit0 bcf bit1 banksel TRISB ; nasledujici kod je zbytek minuleho programu ; je vicemene nezajimavy, preskakejte to F7 ; az do mista, kde zacinaji NOPy 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 ; tahle spousta NOPu je tu schvalne. ; na ni budeme totiz ukazovat, jak to maze ; tady se podivejte do View- Program Memory - kde vsude jsou ; ty NOPy NOP ma kod 000000 nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop tady: ; od teto adresy smazu program nop ; - no, nei to uplne pravda ! nop ; blok se zaokrouhli tak, aby licoval na 32 bytu nop ; tedy na adresu aaaa aa0 0000 nop ; to je n nasem pripade dost nahore, nop ; smazeme tedy i cast ptredchoziho kodu ! nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop BSF STATUS,RP0 BSF STATUS,RP1 ; stranka 3 BSF EECON1, EEPGD ; pamet PROGRAMU FLASH !!! BSF EECON1,WREN ; MUSIM povolit zapis stejne jako u datove EEPROM BSF EECON1, FREE ; a budu mazat BCF STATUS,RP0 ; stranka 2 movlw low tady MOVWF EEADR ; zápis dolni pulky adresy , ta je v registru W ; bity 4-0 jsou ignorovany ; (musi se to zarovnat na blok 32 slov) movlw high tady MOVWF EEADRH ; zapis horni pulky adresy bcf INTCON, GIE ; zakazuji preruseni BSF STATUS,RP0 ; stranka 3 ; startovaci sekvence pro zapis MOVLW 55h ; tady to samozrejme jenom maze 32 slov z FLASH MOVWF EECON2 MOVLW 0AAh MOVWF EECON2 BSF EECON1, WR nop ; tady jsou zase 2 NOPy, stejne jako u read, proste se preskoci nop ; A TADY PROCESOR CHCIPNE, DOKUD SE PAMET NEVYMAZE !!!! ; alespon to tvrdi manual. ; simulator ale bezi dal hned nop stalemazu: nop nop btfsc EECON1, WR goto stalemazu ; no a tady se kouknete do Program Memory ; jak to dopadlo. ; musite to okno zavrit a znovu otevrit, ; aby se refreshnulo. ; podivejte se do zalozek OpcodeHex - MAchine - Symbolic ; a uvidite, co jsme smazali. Smazane misto je 3FFF ; !!!! Je to umyslne udelano tak, ze to maze i kus kodu ! ; 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 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