/* * File: PIC12F1572_ISR.c * Author: elektronika w srode * * */ // CONFIG1 #pragma config FOSC = INTOSC // (INTOSC oscillator; I/O function on CLKIN pin) #pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled) #pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR) #pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled) #pragma config BOREN = OFF // Brown-out Reset Enable (Brown-out Reset disabled) #pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin) // CONFIG2 #pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off) #pragma config PLLEN = OFF // PLL Enable (4x PLL disabled) #pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset) #pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.) #pragma config LPBOREN = OFF // Low Power Brown-out Reset enable bit (LPBOR is disabled) #pragma config LVP = ON // Low-Voltage Programming Enable (Low-voltage programming enabled) #include #define _XTAL_FREQ 500000 // zawsze potrzebne dla makra __delay_ms() // Definicje pinów #define LED_BLUE PORTAbits.RA4 #define LED_RED PORTAbits.RA5 //void __interrupt() przerwania(void) //{ // if(INTCONbits.INTF) // { // LED_RED=1; // __delay_ms(2000); // LED_RED=0; // INTCONbits.INTF = 0; // Wyczyszczenie flagi przerwania // } //} //// Funkcja główna //void main(){ // OPTION_REGbits.nWPUEN = 0; // potrzebne aby wł±czyć PULL-UP (podci±gnięcie do +) na pinach // WPUAbits.WPUA2 = 1; // wł±czenie podci±gnięcia PULL-UP na pnie RA2 // TRISAbits.TRISA4 = 0; // PORT RA4 jako wyj¶cie // TRISAbits.TRISA5 = 0; // PORT RA5 jako wyj¶cie // ANSELAbits.ANSA2 = 0; // wył±czenie przetwornika analogowego na pinie RA2 aby uzyskać dostęp do funkcji specjlanych jakimi jest INT // INTCONbits.GIE = 1; // wł±cznie przerwań globalnie - je¶li wył±czone żadne przerwanie nie będzie obsłużone // OPTION_REGbits.INTEDG = 0; // ustawienie w jaki sposób przerwanie będzie rozpoznawane - przez zbocze opadaj±ce // INTCONbits.INTE = 1; // wł±czenie przerwania INT na jedynie dostępnym pinie RA2 // LED_BLUE = 0; // LED_RED = 0; // // while(1){ // LED_BLUE = 1; // __delay_ms(250); // LED_BLUE = 0; // __delay_ms(250); // } // return; //} unsigned char licznik; //zmienna globalna gdyż musi być widoczna w funkcji main jak i w funkcji przerwania void __interrupt() przerwania(void){ if(INTCONbits.INTF){ licznik =8; INTCONbits.INTF = 0; } } void main(void) { //OPTION_REGbits.nWPUEN = 0; // potrzebne aby wł±czyć PULL-UP (podci±gnięcie do +) na pinach //WPUAbits.WPUA2 = 1; // wł±czenie podci±gnięcia PULL-UP na pnie RA2 TRISAbits.TRISA4 = 0; // PORT RA4 jako wyj¶cie TRISAbits.TRISA5 = 0; // PORT RA5 jako wyj¶cie ANSELAbits.ANSA2 = 0; // wył±czenie przetwornika analogowego na pinie RA2 aby uzyskać dostęp do funkcji specjlanych jakimi jest INT INTCONbits.GIE = 1; // wł±cznie przerwań globalnie - je¶li wył±czone żadne przerwanie nie będzie obsłużone OPTION_REGbits.INTEDG = 0; // ustawienie w jaki sposób przerwanie będzie rozpoznawane - przez zbocze opadaj±ce INTCONbits.INTE = 1; // wł±czenie przerwania INT na jedynie dostępnym pinie GP2 LED_BLUE = 0; LED_RED = 0; licznik= 0; while(1){ if(licznik > 0){ LED_RED = 1; licznik--; } else LED_RED = 0; LED_BLUE = 1; __delay_ms(250); LED_BLUE = 0; __delay_ms(250); } return; }