Quel codice non si riesce a sistemarlo, e il prof mi ha detto di fare una cosa più semplice, semplicissimo, senza interrupt; allora io ho scritto quanto segue, il programma me lo compila ma se qualcuno può darmi qualche consiglio su come poterlo migliorare accetto molto volentieri...
Manca la parte relativa all'impostanzione dell'ora (con i pulsanti), ma non importa...

codice:
void main(){
char ore, minuti, secondi; //variabili di tipo char contenenti meno di 255 valori.
unsigned int orologio;//variabile di tipo unsigned int contenente più di 255 valori.
char display[10]={63,6,91,79,102,109,125,7,127,111};//variabile di tipo char contenente meno di 255 valori.
char ore_d, ore_u, minuti_d, minuti_u=0;//variabile di tipo char contenente meno di 255 valori.
char Block=0;//variabile di tipo char contenente meno di 255 valori.
//***** impostazioni porte *****
ADCON1=6;
trisa=255;
trisc=0;
trisb=0;
trisd=0;
porta=0;
portd=0;
portc=0;
portb=0;
//*******************************
start:
ore=0;
poro: //etichetta di salto
minuti=0;
tato: //etichetta di salto
secondi=0;
ocio: //etichetta di salto
orologio=0;
End:

//***** pulsanti ***** (SBAGLIATI, DA CORREGGERE)
pulsante_a:
if(Block==2){
if(porta.F1)minuti++;
if(minuti==60)minuti=0;
if(porta.F3)Block++;
if(Block==1){
if(porta.F1)ore++;
if(ore==24)ore=0;
//********************

ore_d=ore/10;
ore_u=(ore-(ore_d*10));
portc=4;
portd=display[ore_u];
delay_ms(1);
portc=8;
portd=display[ore_d];
delay_ms(1);
goto pulsante}
minuti_d=minuti/10;
minuti_u=(minuti-(minuti_d*10));
portc=1;
portd=display[minuti_u];
delay_ms(1);
portc=2;
portd=display[minuti_d];
delay_ms(1);
goto pulsante}
if (Block==3)Block=0;
portb.F0=~portb.F0;
if(orologio==124)secondi++;
if(orologio==124)goto ocio
portb.F0=~portb.F0;
if(secondi==1)minuti++;
if(secondi==1)goto tato
if(minuti==2)ore++;
if(minuti==2)goto poro
if(ore==24)
goto start
minuti_d=minuti/10;
minuti_u=(minuti-(minuti_d*10));
portc=1;
portd=display[minuti_u];
delay_us(1993);
portc=2;
portd=display[minuti_d];
delay_us(1993);
ore_d=ore/10;
ore_u=(ore-(ore_d*10));
portc=4;
portd=display[ore_u];
delay_us(1993);
portc=8;
portd=display[ore_d];
delay_us(1993);
orologio++;
goto End
}
Vorrei andare sul sicuro quindi vorrei consegnare questo tipo di listato più semplice, anche se meno professionale, al prof gli basta che per giovedì funzioni ottimamente il sistema di conteggio (incremento secondi, minuti, ore). I secondi vanno fatti lampeggiare (alla frequenza di un secondo) su un led di una serie di otto di una scheda attaccata ad una porta del PIC (b).
L'incremento dei minuti e delle ore vanno fatti incrementare su una scheda con 4 display 7 segmenti in MUX nel seguente modo: H H M M.
Qualcuno mi potrebbe dare qualche consiglio su delle modifiche che posso apportare con tranquillità?
Grazie mille...
:master: