Ottimizzare codice C su PIC
Salve a tutti. Ho scritto questo codice per pilotare 4 triac (effetti luce). Ora vorrei implementare altri "effetti" nel programma ma sono già a metà della ROM. (usata 50%). Come posso ottimizzare il codice? Il problema è che devo aggiungere altri effetti e non so come fare
- Codice: Seleziona tutto
//////LUCI 4 CH /////////////
unsigned bit zero_crossing; stato;
unsigned char i; imp; contatore;
unsigned int tempo;
unsigned char porta;
/////////////////////////LETTURA ANALOGICA GP0/////////////////////////////////
unsigned int adc(){
unsigned int pot;
unsigned int valore1;
pot=ADC_Read(0);
valore1=pot/30;
return valore1;
}
/////////////////////////yy//''ìì////ok/////////////
void interrupt (void){
if (INTCON.GPIF){ //se c'è stato interrupt
if(i>=84+tempo*4)
{
i=60;
++contatore;
}
if((gpio.f3==1) && (stato==0)) //se gp3 è 1 e stato 0 allora
{
i++;
for(imp=0; imp<=400; imp++) {
gpio^=porta;
delay_us(2);
gpio^=porta;
}
stato=1;
INTCON.GPIF=0;
}
if ((gpio.f3==0) && (stato==1)) //se c'è stato un fronte di discesa
{
for(imp=0; imp<=400; imp++){
gpio^=porta;
delay_us(2);
gpio^=porta;
}
stato=0;
INTCON.GPIF=0;
}
}
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void main() {
stato=0; //inizializza variabile
i=0;
zero_crossing=0;
contatore=0;
CMCON = 7; //Disabilita comparatore
ADCON0 = 0b000000001; //Aisabilita convertitore A/D
ANSEL = 0b00000001; //Tutte le porte in digitale tranne gp0
TRISIO = 0b00001001; //Tutti i pin in OUT tranne gpio3
IOC= 0b001000; //imposta interrupt su pin 3
INTCON.GPIE =1; //abilita interrupt generale
INTCON.GIE =1; //abiita interrupt su porta gpio
gpio.f1=1; //imposta le uscite a 1
gpio.f2=1;
gpio.f4=1;
gpio.f5=1;
while(1)
{
unsigned int valore;
//////////////////////////// GIOCO 1 //////////////////////////////////////////////////////////////////////////////////////////////////
if(contatore<10){
if(i<=60)
{
porta=0b000000;
valore=adc();
tempo=valore;
}
if ((i>=60)&&(i<66+valore))
{
porta=0b010000;
}
if ((i>=66+valore) && (i<72+valore*2))
{
porta=0b100000;
}
if ((i>=72+valore*2)&&(i<78+valore*3))
{
porta=0b000100;
}
if ((i>=78+valore*3)&&(i<84+valore*4))
{
porta=0b000010;
}
}
}
}
