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)
.