Vous êtes sur la page 1sur 2

Sase realizeze un program astfel nct la apasarea butonului S1 sase aprindaledurile

de pe pozi?iile impare
(1, 3, 5,7), la a doua apasare sase aprindaledurile de pe pozi?iile pare (2, 4,
6, 8), iar la treia apasare sase stinga
toate ledurile.
#include<xc.h>
//config1
#pragma config WDTEN = OFF
#pragma config STVREN = ON
#pragma config XINST = OFF
#pragma config CP0 = OFF
// CONFIG2
#pragma config FOSC = HSPLL
#pragma config FCMEN = ON
#pragma config IESO = ON
#pragma config WDTPS = 32768
// CONFIG3
#pragma config EASHFT = ON
#pragma config MODE = XM16
#pragma config BW = 16
#pragma config WAIT = OFF
#pragma config CCP2MX = DEFAULT
#pragma config ECCPMX = DEFAULT
#pragma config PMPMX = DEFAULT
#pragma config MSSPMSK = MSK7
unsigned char led=0, led1=1;
int i,ok=0;
void interrupt intrerupere_ext (void)
{
if(INTCONbits.INT0IE && INTCONbits.INT0IF) {
if (ok==1){
LATD=0xAA;ok++;
}
else if(ok==2){
LATD=0x55;ok++;
}
else { LATD=0x00;ok=1;}
for (i=1;i<100;i++){
_delay(5000);
}
INTCONbits.INT0IF = 0; // resetare flag
}
}
int main()
{
TRISD=0x00;
LATD=0x00;
// intializare
WDTCONbits.ADSHR = 1;
MEMCONbits.EBDIS = 1;
TRISD = 0x0; // seteaza toti bitii portului D ca iesire
INTCONbits.GIE=1; // activarea ntreruperilor
INTCONbits.INT0IE=1; // activare ntreruperi externe pe pinul INT0
INTCONbits.INT0IF=0; // resetare bit de flag pentru INT0
INTCON2bits.INTEDG0=1; // activare intrerupere pe front crescator
while(1) {
}

return 0;
}

Vous aimerez peut-être aussi