//** file prova pic 18f45k20**// #include //--setto bit configurazione pic--// #pragma config FOSC=INTIO67 #pragma config WDTEN=OFF #pragma config PWRT=ON #pragma config MCLRE=OFF #pragma config BOREN=OFF #pragma config LVP=OFF #pragma config CPD=OFF #define max_value 30; unsigned long vai; unsigned long run; unsigned long c; unsigned short long i; unsigned char ability; //DEFINISCO RB0 COME SWC #define SWC PORTBbits.RB0 //FUNZIONE CONTROLLO PRESSIONE TASTO SWC// void push(void){ LATD=0; //CHIAMATA LUCI SUPER CAR// if(SWC!=1){ LATD=0; ability=0x01; //ACCENDO MODULO DI CONVERSIONE// ADCON0bits.ADON=0x01; LATD=0b00000001; for(i=0;i<150000;i++){ } } //CHIAMATA ROTAZIONE LED// if(SWC!=1){ ability=0x02; LATD=0b00000011; for(i=0;i<150000;i++){ } } //CHIAMATA COVERTITORE ADC// if(SWC!=1){ ability=0x03; LATD=0b00000111; for(i=0;i<150000;i++){ } } //CHIMATA LAMPEGGIO LED// if(SWC!=1){ LATD=0b00001111; ability=0x04; //SPENGO MODULO DI CONVERSIONE// ADCON0bits.ADON=0x00; for(i=0;i<150000;i++){ } } //SPEGNI LED// if(SWC!=1){ LATD=0b10000000; ability=0x00; for(i=0;i<1000000;i++){ } } } //CONVERSIONE ADC// void ADC(void){ //ABILITO LA CONVERSIONE// ADCON0bits.GO=0x01; //IL FLAG ADIF DEL REGISTRO PIR CONTROLLA SE LA CONVERSIONE E FINITA CIOE' A 1// while(ADIF=0){ } //CALCOLO E CASTING// run=(((unsigned long)ADRESH)<<8)|ADRESL; vai=run<<=3; } //***inizio programma****// //ADC Configurazione e comando //Guardando lo schema del 44-Pin Dimostrativi in Appendice, il potenziometro //(RP1) uscita è collegata al pin RA0 / AN0 del PIC18F45K20. //I passaggi di base necessari per convertire la tensione ADC su questo pin sono: //1 Configurare il pin RA0 / AN0 come un ingresso analogico in ANSEL. //2 Impostare i riferimenti di tensione ADC in ADCON1. //3 Impostare la giustificazione risultato, ADC sorgente di clock, e il tempo di acquisizione in ADCON2. //4 Selezionare il canale e accendere l'ADC in ADCON0. //5 Avviare la conversione in ADCON0 void main(void){ //OSCINT 16 MZ// OSCCONbits.IRCF2=1; OSCCONbits.IRCF1=1; OSCCONbits.IRCF0=1; //PONGO A 0 REGISTRO LATA// LATA=0x00; //SETTO REIGISTRO A TUTTI INPUT COMPRESO RA0 CHE STO UTILIZZANDO // TRISA=0xff; LATB=0x00; TRISB=0xFF; LATC=0x00; TRISC=0xff; //LATD COME OUT// LATD=0x00; //TRISD COME OUT// TRISD=0x00; LATE=0xff; TRISE=0x00; //ABILITO INPUT DIGIT SU RB0// ANSELHbits.ANS12=0; //DISABILITO RA0 COME INPUT DIGITALE// ANSELbits.ANS0=1; //SETTAGGIO TENSIONE DI RIFERIMENTO SU TENSIONE INTERNA +VCC -VDD// ADCON1bits.VCFG=0; ADCON1bits.VCFG0=0; //SCHELGO IL CANALE DI CONVERSIONE ADC (RA0) SETTO IL FLAG DI START E ACCENDO IL MODULO ADC// ADCON0=0b00000001; //SETTO GIUSTIFICAZIONE REGISTRO CONVERSIONE A DESTRA SETTO RITARDO ACQUISIZIONE 20 TDA E IPOSTO FREQUENZA CONVERSIONE SU OSCILLATORE INTERNO// ADCON2=0b10111111; //INIZIO CONVERSIONE// LATD=0x00; while(1){ push(); //SE ABILITY é 1 LED SUPER CAR SE 0 SPEGNI// if(ability==1){ push(); ADC(); //SE NUMERO MAGGIORE DI 8100 FERMA LED// if(vai<8100){ //PONGO LATDO A 1// LATDbits.LATD0=1; //CONTOLLO LATD7 è DIVERSO DA 1 SE SI SALTA ISTRUZIONE INVERTI SCORRIMENTO// while(LATDbits.LATD7!=1){ LATD<<=1; //TEMPO RITORDO LED// for(c=0;c>=1; //TEMPO RITARDO LED// for(c=0;c con questa chiamata alla pressione di SWC si blocca tolto va tutto ok PS se si entra non si esce più while(1){ ADC(); push();--------------------------------->con questa chiamata alla pressione di SWC si blocca tolto va tutto ok PS se si entra non si esce più //TEMPO RITORDO LED// for(c=0;c