Ok ho capito!
quindi in pratica è come eseguire :
BTFSC REGISTRO,BIT
SE NON è ZERO
SE E' ZERO
qui invece sinttatticamente significa spostati di ICF1 posizioni a partire da quella a zero, (estrema destra) e piazza un 1 (uno) , quindi se facendo l'AND ovvero
per esempio ICF1 = 2 allora sposta un 1 (uno) in posizione 2 a sinistra, poi esegui una AND e valuta il risultato
0110.0101
0000.0100 Vero
oppure
0110.0001
0000.0100 Falso
Altra osservazione, partendo dalla tua osservazione in merito agli interrupt, mi sembra strano che però con il convertitore ADC non ci siano questi brutti effetti!
In sistanza facendo la prova non mi dà nessuna imperfezione.
leggi qui:
Arduino - Knob
Servo myservo;
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
Citazione:
Originalmente inviato da romoloman ICF1 è una costante numerica che rappresenta il valore posizionale del BIT ICF1,
1<<ICF1 esegue un left shift di 1 di ICF1 posizioni, a quel punto viene fatto un & con il registro del timer e se il risultato è vero (!=0) viene eseguito il codice.
PS: Consiglio, lascia perdere l'assembler con gli AVR usa il C e un buon compilatore (AVR-GCC 4.7.0) il codice risultante è meglio di quello che puoi fare tu.... |