Код: //Inicializaciqta RCONbits.IPEN=1; //Razreshawane na prioriteta na prekyswaniqta INTCON=0b00100000; //TMR0 iterupt enabled. INTCON2=0b10000000; //TMR0 - LOW priority INTCON3=0b00000000; PIR1=0b00000000; PIR2=0b00000000; PIE1=0b00001000; //I2C prekyswaneto e razresheno PIE2=0b00000000; IPR1=0b00001000; //I2C e s wisok prioritet IPR2=0b00000000; status0=0;status1=0;
PIR1bits.SSPIF=0; PIE1bits.SSPIE=1; //I2C iterrupt enabled IPR1bits.SSPIP=1; //Visok priopritet za I2C SSPCON2bits.SEN = 1; //S code straching
SSPADD = 0b11011000; OpenI2C(SLAVE_7, SLEW_OFF);
SSPCON1bits.CKP = 1; SSPSTATbits.BF=0; SSPCON1bits.SSPOV=0;
INTCONbits.GIEL=1;INTCONbits.GIEH=1; T0CONbits.TMR0ON=1; //ISR------------------------------------------------- unsigned char flags; PIR1bits.SSPIF=0;
flags=(SSPSTATbits.BF)|(SSPSTATbits.D_A<<1)|(SSPSTATbits.R_W<<2);
switch(flags) { case 0b011: addr = SSPBUF; addr = 1; break; case 0b001: if(addr==1) //Priet e adresa { switch(status0) { case 0: ch_sel = SSPBUF; status0++;break; case 1 : ch_val= SSPBUF; status0++;break; } } temp= SSPBUF; break; case 0b100: case 0b101: temp = SSPBUF; SSPBUF = 0x05; break; case 0b110: case 0b111: temp = SSPBUF; SSPBUF = 0x04; break; case 0b010: //NACK temp = SSPBUF; break; } if(status0==2) { if(ch_sel<=7) { chd[ch_sel]=ch_val; status0=0; } else if(ch_sel==8) { switch(ch_val) { case 0: SetChanADC(ADC_CH0);break; case 1: SetChanADC(ADC_CH1);break; case 2: SetChanADC(ADC_CH1);break; } } }
SSPCON1bits.CKP = 1; temp=SSPBUF; //Za da izchisti BF flaga. |