Estoy haciendo un robot que puede seguir líneas, evitar obstáculos y seguir flechas. Escribí el código para seguir la línea y la flecha, pero no sé cómo implementar interrupciones con más de dos niveles de prioridad. ¿Puede alguien decirme cómo usar interrupciones para más de dos niveles de prioridad?
Código fuente -
unsigned short current_duty, old_duty, current_duty1, old_duty1;
void InitMain() {
ANSEL = 0; // Configure AN pins as digital
ANSELH = 0;
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;
PORTA = 255;
TRISA = 255; // configure PORTA pins as input
PORTB = 0; // set PORTB to 0
TRISB = 0; // designate PORTB pins as output
PORTC = 0; // set PORTC to 0
TRISC = 0; // designate PORTC pins as output
PORTD = 0; // set PORTC to 0
TRISD = 0; // designate PORTC pins as output
PWM1_Init(5000); // Initialize PWM1 module at 5KHz
PWM2_Init(5000); // Initialize PWM2 module at 5KHz
}
void main() {
InitMain();
current_duty = 255; // initial value for current_duty
current_duty1 = 255; // initial value for current_duty1
PWM1_Start(); // start PWM1
PWM2_Start(); // start PWM2
PWM1_Set_Duty(current_duty); // Set current duty for PWM1
PWM2_Set_Duty(current_duty1); // Set current duty for PWM2
while (1) { // endless loop
PORTD.F4=1;
PORTD.F5=0;
PORTD.F6=1;
PORTD.F7=0;
if (PORTB.F1==1) { // turn L moter L pwm1
PWM1_Set_Duty(50);
PWM2_Set_Duty(175);
delay_ms(500);
PWM1_Set_Duty(150);
PWM2_Set_Duty(150);
}
if (PORTB.F3==1) { // turn R moter L pwm1
PWM1_Set_Duty(175);
PWM2_Set_Duty(50);
delay_ms(500);
PWM1_Set_Duty(150);
PWM2_Set_Duty(150);
}
if (PORTB.F2==1 && PORTB.F3==1) { // turn R moter L pwm1
PWM1_Set_Duty(175);
PWM2_Set_Duty(25);
delay_ms(500);
PWM1_Set_Duty(150);
PWM2_Set_Duty(150);
}
if (PORTB.F2==1 && PORTB.F1==1) { // turn R moter L pwm1
PWM1_Set_Duty(25);
PWM2_Set_Duty(175);
delay_ms(500);
PWM1_Set_Duty(150);
PWM2_Set_Duty(150);
}
}
}