#include "p24FJ128GA306.h" // zatim tady nejsou zadne fuses, takze vsechno je default // zejmena : FRC oscilator, Watchdog enabled - !!!!! Musi se vypnout v UP // tento file je udelan z file citace // citace ale tentokrat obsluhuji pomoci preruseni void main (void) { int i; typedef unsigned char BYTE; typedef unsigned int WORD; typedef unsigned long DWORD; i = 10; 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; /* chceme blikat s diodou LED1 v intervalu 1sec použijem TMR1 4000000 / 1 = 4000000 , tímto číselm musíme dělit. Zkusíme dát děličku na 256 4000000 / 256 = 15625, tohle číslo dáme do PR1 */ PR1 = 15625; TMR1 = 0; T1CON = 0x8030 ; /* 1x0x xxxx x011 xx0x */ /* citace 2 a 3 nastavime jako jeden 32-bitovz citac. nechame blikat LKED s periodou 5 sekund, a nebudeme pouzivat u citace delicku. 4MHz musime vydelit: 4000000 / 0,2 = 20000000 20000000D DEC je 1312D00 HEX ulozime tedy 0x131 do PR3 , a 0x2D00 do PR2 */ PR2 = 0x2D00; PR3 = 0x0131; T2CON = 0x8008; /* 1x0x xxxx x000 1x0x */ /* povoluji preruseni */ IEC0bits.T1IE = 1; IEC0bits.T3IE = 1; /* v 32-bitovem citaci generuje preruseni vyssi cast, tedz T3 */ while(1) { asm( "nop" ); } /* od while */ } // zaviraci zavorka od main // takhle vypada definice interruptu void __attribute__((interrupt)) _T1Interrupt(void) { IFS0bits.T1IF = 0; /* shazujeme pozadavkovy bit */ PORTDbits.RD4 = !PORTDbits.RD4 ; /* Blikame s LED1 1x ya 1 sec */ } /* zaviraci od podprogramu _T1Interrupt retfie prida prekladac sam, je to dano atributem interrupt */ void __attribute__((interrupt, shadow, auto_psv)) _blabol(void) { int i; i = 5; } /* preruseni _blabol nebude nikde v Interrupt Vector Table, protoze *.gld script tento nazev nezna */ void __attribute__((interrupt, shadow, auto_psv)) _T3Interrupt(void) { IFS0bits.T3IF = 0; /* interrupt flag */ PORTDbits.RD5 = !PORTDbits.RD5 ; /* Blikame s LED2 1x za 5sec */ } /* preruseni muze mit mnoho dalsich atributu - shadow - auto_psv ........... ktere rikaji prekladaci, co a jak ma udelat v obsluznem programu - blize viz text na IVT se podivejte do Voew - Program Memory - adresa 0x01A a 0x024 do preruseni si dejte breakpoint a divejte se, co to dela */