Bonjour je vous écris pour la première fois après avoir parcouru je ne sais combien de page. Voila j'ai un code à ecrire afin de compter le nombre que renvoit mes capteurs moteur afin d'en déduire la vitesse pour cela j'ai fait appel à une interruption timer et une interruption sur les Port B du 4 au 7. J'ai essayé de tourner le programme dans tout les sens mais rien n'y fait je ne comprend pas pourquoi cela ne marche pas. L'interruption changement d'état ne marche pas et l'interruption timer elle se met en marche à la fin de mon programme principal très bizarre je vous joint mon code.
Autre précision je programme en mikroC plus simple pour les PWM. Merci d'avance.
Code:#define LED7 PORTB.F7 #define LED6 PORTB.F6 #define LED5 PORTC.F6 #define LED4 PORTC.F7 #define LED3 PORTB.F3 #define LED2 PORTB.F2 #define LED1 PORTB.F1 #define LED0 PORTB.F0 #define poussoir PORTE.F2 #define freqPWM 1500 #define in1 PORTB.F0 #define in2 PORTB.F1 unsigned conv_an_num() { return Adc_Read(0); } unsigned int tension_ref; int i=0; int cpt=0; int cnt=0; int buff=0; void test(){ if(PIR1.TMR1IF) { LED3=1; buff++; cnt++ ; TMR1H = 0x80; TMR1L = 0x00; LED3=0; // clear TMR1IF } if(INTCON.RBIF) { LED4=1; cpt++; LED4=0; } PIR1.TMR1IF = 0; INTCON.RBIF=0; INTCON.RBIE=1; } void interrupt() { test(); } void main() { TRISA=0x00; TRISB=0x00; PORTB=0x00; TRISC=0; TRISE =0x00; PORTE=0x00; PORTA=0x00; ADCON1 = 2; PWM1_Init(freqPWM); PWM2_Init(freqPWM); T1CON = 1; // Timer1 settings PIR1.TMR1IF = 0; // clear TMR1IF TMR1H = 0x80; // Initialize Timer1 register TMR1L = 0x00; PIE1.TMR1IE = 1; // enable Timer1 interrupt cnt = 0; // initialize cnt INTCON = 0xC0; // Set GIE, PEIE do { if (cnt == 1) { // if cnt is 76 PORTB = ~PORTB; // then toggle PORTB leds and cnt = 0; // reset cnt //acquerir donné } if(cpt>=40) { if(buff>0&&buff<1) { LED2=1; Delay_ms(50); LED2=0; Delay_ms(50); } if(buff>1&&buff<3) { LED2=1; LED3=1; Delay_ms(50); LED2=0; LED3=0; Delay_ms(50); } if(buff>3) { LED2=1; LED3=1; LED4=1; Delay_ms(50); LED2=0; LED3=0; LED4=0; Delay_ms(50); } cpt=0; buff=0; } else { PWM1_Start(); PWM2_Start(); for(i=0;i<255;i+=5) { PWM1_Change_Duty(i); PWM2_Change_Duty(i); Delay_ms(500); } PWM1_Stop(); PWM2_Stop(); } } while (1); }
-----