_CONFIG4(0x00FFFF ) _CONFIG3(0x00FFFF ) // _CONFIG2(0x0098FF ) int FRC osc // _CONFIG2(0x0099FF ) /fungovalo * int FRC osc with postscaller and PLL */ _CONFIG2(0x009bfe ) /* funguje primary osc HS with PLL 8 x 4 = 32MHz */ _CONFIG1(0x003F7F ) typedef struct { unsigned B0:1; unsigned B1:1; unsigned B2:1; unsigned B3:1; unsigned B4:1; unsigned B5:1; unsigned B6:1; unsigned B7:1; unsigned B8:1; unsigned B9:1; unsigned B10:1; unsigned B11:1; unsigned B12:1; unsigned B13:1; unsigned B14:1; unsigned B15:1; } BITY; BITY ridreg1; #define FLGTMR5 ridreg1.B0; unsigned int pocitms = 0 ; void inicializace(void ) { // 32MHz / 2 = 16MHz // TMR5 ma vyrabet 1 ms preruseni 16000 x musime delit PR5 = 16000; TMR5 = 0; T5CON = 0x8000 ; /* 1x0x xxxx x000 xx0x delime 1 */ ridreg1.B0 = 0; ridreg1.B1 = 0; ridreg1.B2 = 0; ridreg1.B3 = 0; ridreg1.B4 = 0; ridreg1.B5 = 0; ridreg1.B6 = 0; ridreg1.B7 = 0; ridreg1.B8 = 0; ridreg1.B9 = 0; ridreg1.B10 = 0; ridreg1.B11 = 0; ridreg1.B12 = 0; ridreg1.B13 = 0; ridreg1.B14 = 0; ridreg1.B15 = 0; ODCB = 0; ODCC = 0; ODCD = 0; ODCE = 0; ODCF = 0; ODCG = 0; /* ona je tam defaultne 0, takze je to trochu nadbytecne porty NEBUDOU se otevrenym kolektorem */ PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0; PORTG = 0; /* az dame nektery pin vystupni, aby bylo jasne, jaka hodnota tam bude */ ANSB = 0x0004; /* 0000 0000 0000 0100 */ /* vstup pro prevodnik je analogovy */ TRISB = 0xF2F5; /* xxxx 0010 1111 0101 - viz file porty.xls , d8le i pro ostatn9 tris */ TRISC = 0xFFFF; /* tento port je nepouyitelny - krystaly */ TRISD = 0xFF0F; /* 1111 xxxx 0000 111x piny 15 - 12 tam nejsou, ale do registru neco zapsat musime a bity 3 -1 jsou zatim s otaznikem, ale nastavenim jako vstup nic nezkayime */ TRISE = 0xF0; /* odvodte si zami */ TRISF = 0xFC; TRISG = 0xFF7F; CNPU5 = 0x0001; CNPU4 = 0xC000; /* Pull-Up rezistory, ale fakt netusim jestli to pujde */ /* povoluji preruseni */ IEC1bits.T5IE = 1; } /* of inicializace */ /* ********************************************** ceka po dobu (kolik +1) milisekund tedy cekejms(0) ceka 1 ms ??? mozna problem, pokud by se vyskytnul interrupt s dobou provadeni delsi nez 1 ms */ void cekejms( unsigned int kolik ) { TMR5 = 0; pocitms = kolik; ridreg1.B0 = 1; while( ridreg1.B0 ) asm("NOP" ); } // ****************************************************** void __attribute__((interrupt)) _T5Interrupt(void) { IFS1bits.T5IF = 0; /* shazujeme pozadavkovy bit */ if(ridreg1.B0 && pocitms ) pocitms-- ; else ridreg1.B0 = 0; } // ************************************************