En primer lugar, creo que te perdiste un símbolo | :
TCCR1A = ((1 << COM1A1) | (1 << COM1A0) (1 << CS11) | (1 << WGM13) );
TCCR1A = ((1 << COM1A1) | (1 << COM1A0) | (1 << CS11) | (1 << WGM13) );
Segundo:
- Los bits
COM1A1 y COM1A0 están en el registro TCCR1A
- Los bits
CS11 y WGM13 están en TCCR1B
TCCR1A y TCCR1B son registros diferentes, pero funcionan en el mismo temporizador, timer1. Configuran un comportamiento diferente y se ubican en registros separados, simplemente porque todos los bits no caben en un solo byte.
Observe que COM1A1 es simplemente un alias para el número 7 , así que es el alias COM1A0 para el número 6 , WGM13 es un alias para el número 4 y CS11 para 1 . Depende de usted, el usuario, verificar si está escribiendo los bits correctos en los registros correctos. El compilador no no comprueba esto por ti.
Por ejemplo, las siguientes tres líneas tendrán el mismo código de ensamblaje resultante:
TCCR1A = ( 1 << COM1A1 );
TCCR1A = ( 1 << PB7 );
TCCR1A = ( 1 << ICNC1 );
Las tres líneas darán como resultado las siguientes dos instrucciones de ensamblaje idénticas:
ldi r24, 0x80
out 0x2F, r24
TCCR1(A|B) no se puede acceder como un único registro de 16 bits como TCNT1(H|L) .