; zakladni nastaveni pro programy bez preruseni .include "p33EV32GM002.inc" .bss ktery: .space 2 zacstack: .space 20 konstack: .text ; sekce pro psani programu ; na zacatku zdrojaku jsme defaultne v sekci .text .global __reset .org 0 ; opet je to relativni oproti zacatku uyivatelske EEPROM __reset: ; tedz relativni oproti adrese 0x0200 clr PORTB clr TRISB clr ANSELB mov #zacstack, W15 ; yde jsme nastavili do STACK POINTERu zacatek STACKu mov #konstack, W0 mov W0, SPLIM ; tady jsme nastavili konec stacku. ; adresa, ktera je v bunce SPLIM, je maximalni mozna adresa pro W15 ; *********** zacina inicializace SPI mov SPI1BUF, W0 ; prazdne cteni pro smazani Overflow error mov SPI1BUF, W0 clr SPI1STAT mov #0x0520 , W0 mov W0 , SPI1CON1 ; xxx0 0101 0010 0000 ; | |||| |||| |||| ; | |||| |||| ||00 primary prescaller :64 ; | |||| |||0 00 secondary prescaller :8 ; | |||| ||| hodiny jsou tedy 7.37MHz / 2 / 64 / 8 = 7197 Hz ; | |||| ||| pro 16 bitu je to 2.2 ms na vyslani jednoho cisla ; | |||| ||1 MSTEN Master mód ; | |||1 0 CKE==1 CKP==0 vybirame 3. variantu hodin na Figure 3-2 ; | ||| ; | ||0 SMP jakkoli - stejne nic nebudeme prijimat ; | |1 MODE16 vysilam 16 bitu ; | 0 DISDO chceme vysilat data na SDO ; 0 DISSCK chceme generovat hodiny clr SPI1CON2 bset SPI1STAT , #SPIEN ; zapiname modul SPI mov #14394 , W0 ; na preruseni s periodou 1 sec mov W0 , PR2 mov #0x8030 , W0 ; 1x0x xxxx x011 0x0x delime 256 , hodiny Fosc/2 mov W0 ,T2CON bclr IFS0, #T2IF ; pro jistotu nuluji pozadavkove bity bclr IFS0, #SPI1IF bset IEC0, #T2IE ; povoluji preruseni od citace bset IEC0, #SPI1IE ; povoluji preruseni od SPI bset INTCON2, #GIE ; generalni povoleni preruseni cyklus: nop nop ; sem prijde to, co se v programu nop ; dela stale porad dokolecka nop goto cyklus __T2Interrupt: ; takhle se to MUSI jmenovat nop bclr IFS0, #T2IF ; nuluji pozadavkovy bit btg ktery , #0 ; licha nebo suda sekunda mov #0xffff , W0 ; v liche sekunde zapisuji 0xffff , v sude 0x00 btss ktery , #0 mov #0x00 , W0 call odvysilejpoSPI ; v reg. W0 je cislo, ktere budu vysilat nop retfie odvysilejpoSPI: mov SPI1BUF, W1 ; SPIBUF MUSIME precist mov W0, SPI1BUF ; start vysilani dat na SPI return __SPI1Interrupt: ; SPI odvysilal data bclr IFS0 , #SPI1IF btg PORTB , #15 ; neguji bit, abych poznal, zda se preruseni zavolalo retfie .end ; tady prestan prekladat ; !!!!!! end NENI !!!!!! konec programu