Du musst erst das icp auseinanderfriemeln:
Code:
#include <avr/interrupt.h>
...
uint8_t sreg = SREG;
cli();
uint16_t icp1 = ICP1;
uint8_t portc = PORTC & 0xf0;
uint8_t portb = PORTB & 0x0f;
PORTB = portb | (icp1 & 0xf0); // bits 4..7
PORTC = portc | (icp1 & 0xf); // bits 0..3
SREG = sreg;
Offenbar verwendest du Interrupts. Das SREG mit cli() brauchst du, falls du PORTC oder PORTB in einer ISR änderst, damit die Änderungen nicht durch die Sequenz überschrieben werden.