No, tampoco es asi, el output_low(PIN_B6); ha de estar fuera del for para que se apague al finalizar el conteo del for si no, se apagara cuando pasen los 500ms, sin que i se haya incrementado ni una sola vez, la instruccion correcta es asi:
void main(){
while(true){
if(input(PIN_B7) == 1){
for (i=0; i<100 ; i++){
output_high(PIN_B6);
delay_ms(500);
}
output_low(PIN_B6);
}
}
}
la accion durara unos 50 seg encendido al pulsar y luego se apagara porque es la multiplicacion de 500ms x 100 veces del for
Supongamos que quieres que este encendido 10 segundos cuando pulsas, cambias el 100 del for o cambias el 500 del delay.
Si cambias el delay serian 100ms de delay, y 100ms x 100 veces del for =10000ms, en total que son 10 segundos encendido.
Y si cambias el 100 del for pones 20 (i=0; i<20; i++) y 500ms x 20 veces del for = 10000 ms que son 10 segundos encendido.
Añado, para esos fallos tan tocanarices que no encuentras, necesitas un debugger con proteus por ejemplo y veras donde esta el fallo casi al instante, solo has de crear un fichero cof en el compilador y lo cargas en el pic como si fuese el hex pero en lugar de darle a play en proteus le das a step y se abrira una ventana donde veras en este caso la variable i y la accion que se realiza y el incremento actuando sobre el puerto RB6 al accionar RB7.