Fio v3 time or interrupt problem

i am try 433 mhz decoder code for read but fio dont working

arduino uno is working but fio not working

void setup()
{
Serial.begin(57600);
PORTB &= ~(1<<PORTB0);
TCCR1A = 0b00000000; //B00000000;
TIMSK1 = ( _BV(ICIE1) | _BV(TOIE1) );

i cant understant which port is using timeing in fio

how make it please help me

full code thins but in uno d8 is working but in fio v3 not working

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

#define INPUT_CAPTURE_IS_RISING_EDGE() ((TCCR1B & _BV(ICES1)) != 0)
#define INPUT_CAPTURE_IS_FALLING_EDGE() ((TCCR1B & _BV(ICES1)) == 0)
#define SET_INPUT_CAPTURE_RISING_EDGE() (TCCR1B |= _BV(ICES1))
#define SET_INPUT_CAPTURE_FALLING_EDGE() (TCCR1B &= ~_BV(ICES1))

// Reset RX state data
#define WEATHER_RESET() {short_count = packet_bit_pointer = 0; weather_rx_state = RX_STATE_IDLE; current_bit = BIT_ZERO; }

// Pulse Widths. Each sensor is a little different, but they all fall in this range
#define SHORT_PULSE_MIN 50 // 200us
#define SHORT_PULSE_MAX 189 // 758us
#define LONG_PULSE_MIN 190 // 760us
#define LONG_PULSE_MAX 330 // 1650us

// Preamble
#define SYNC_COUNT 20

// Rx States
#define RX_STATE_IDLE 0
#define RX_STATE_RECEIVING 1
#define RX_STATE_PACKET_RECEIVED 2

#define BIT_ZERO 0
#define BIT_ONE 1

typedef unsigned int uint;
typedef signed int sint;

uint captured_time;
uint previous_captured_time;
uint captured_period;
uint current_bit;
uint packet_bit_pointer;
uint short_count;
uint weather_rx_state;

boolean previous_period_was_short = false;
byte packet[25];

double windGust = 0.0;
double windAvg = 0.0;

// Overflow interrupt vector
ISR(TIMER1_OVF_vect)
{
}

// ICR interrup vector
ISR(TIMER1_CAPT_vect)
{
captured_time = ICR1;

if(INPUT_CAPTURE_IS_RISING_EDGE())
SET_INPUT_CAPTURE_FALLING_EDGE();
else
SET_INPUT_CAPTURE_RISING_EDGE();

captured_period = (captured_time - previous_captured_time);
if(weather_rx_state == RX_STATE_IDLE)
{
if(((captured_period >= SHORT_PULSE_MIN) && (captured_period <= SHORT_PULSE_MAX)))
short_count++;
else if((captured_period >= LONG_PULSE_MIN) && (captured_period <= LONG_PULSE_MAX))
{
if(short_count > SYNC_COUNT)
{
weather_rx_state = RX_STATE_RECEIVING;

}
else
WEATHER_RESET();
}
else
WEATHER_RESET();
}
else if(weather_rx_state == RX_STATE_RECEIVING)
{
if((captured_period >= SHORT_PULSE_MIN) && (captured_period <= SHORT_PULSE_MAX))
{
if(previous_period_was_short)
{
if(current_bit == BIT_ONE)
packet[packet_bit_pointer >> 3] |= (0x80 >> (packet_bit_pointer&0x07));
else if (current_bit == BIT_ZERO)
packet[packet_bit_pointer >> 3] &= ~(0x80 >> (packet_bit_pointer&0x07));

packet_bit_pointer++;
previous_period_was_short = false;
}
else
previous_period_was_short = true;
}
else if((captured_period >= LONG_PULSE_MIN) && (captured_period <= LONG_PULSE_MAX))
{
current_bit = !current_bit;

if(current_bit == BIT_ONE)
packet[packet_bit_pointer >> 3] |= (0x80 >> (packet_bit_pointer&0x07));
else if (current_bit == BIT_ZERO)
packet[packet_bit_pointer >> 3] &= ~(0x80 >> (packet_bit_pointer&0x07));

packet_bit_pointer++;
}
else
{
if(packet_bit_pointer > 40)
weather_rx_state = RX_STATE_PACKET_RECEIVED;
else
WEATHER_RESET();
}
}

previous_captured_time = captured_time;
}

void setup()
{
Serial.begin(57600);
TCCR1A = 0b00000000; //B00000000;
TIMSK1 = ( _BV(ICIE1) | _BV(TOIE1) ); //?SE YARIYOO
Serial.println("[OS V3 Sensor Capture/Decode]");
WEATHER_RESET();
}

void loop()
{
// weather packet ready to decode
if(weather_rx_state == RX_STATE_PACKET_RECEIVED)
{
// Shift bits right 1
for (int j = packet_bit_pointer/8+1; j > 0; j--)
{
packet[j] >>= 1;
if ((packet[j - 1] & 0x01) == 1)
packet[j] |= (1 << (7));
}
packet[0] >>= 1;

switch(packet[0])
{

case 0x58: DecodeWind(); break;

}

WEATHER_RESET();
}
}

// WGR800 Wind speed sensor
// Sample Data:
// 0101100010010001001000000010010000001011000000110100100000001110000000001111110011101010
// --------------------------------xxxxDDDDxxxxxxxxG2G2G1G1xxxxA2A2A1A1----CCCC------------
//
//DDDD = Direction
//G1.G2 = Gust Speed (m per sec)
//A1.A2 = Avg Speed(m per sec)
const char windDir[16][4] = { "N ", "NNE", "NE ", "ENE", "E ", "ESE", "SE ", "SSE", "S ", "SSW", "SW ", "WSW", "W ", "WNW", "NW ", "NNW"};
void DecodeWind()
{
// check the packet CRC
if (!ValidCRC(18))
{
Serial.println("Wind: CRC Error!");
return;
}

// Wind Direction
int wind_dir = GetNibble(9);

// Gust speed
windGust = ((GetNibble(13) * 100) + GetNibble(12)) * .01;

// Avg speed
windAvg = ((GetNibble(16) * 100) + GetNibble(15)) * .01;

// Convert meter per sec to MPH
windGust = windGust * 2.23693181818;
windAvg = windAvg * 2.23693181818;

Serial.print("Wind Gust: ");
Serial.print(windGust);

Serial.print(" Wind Avg: ");
Serial.print(windAvg);

Serial.print(" Dir: ");
Serial.println(windDir[wind_dir]);
}

// CRC = the sum of nibbles 1 to (CRCpos-1);
bool ValidCRC(int CRCPos)
{
bool ok = false;
int start = 1;
byte check = GetNibble(CRCPos);
byte crc = 0;
for (int x = start; x < CRCPos; x++)
{
byte test = GetNibble(x);
crc += test;
}

int tmp = ((byte)(crc) & (byte)(0x0f));

if (tmp == check)
ok = true;

return ok;
}

// Grab nibbile from packet and reverse it
byte GetNibble(int nibble)
{
int pos = nibble / 2;
int nib = nibble % 2;
byte b = Reverse(packet[pos]);
if (nib == 1)
b = (byte)((byte)(b) >> 4);
else
b = (byte)((byte)(b) & (byte)(0x0f));

return b;
}

// Reverse the bits
byte Reverse(byte b)
{
int rev = (b >> 4) | ((b & 0xf) << 4);
rev = ((rev & 0xcc) >> 2) | ((rev & 0x33) << 2);
rev = ((rev & 0xaa) >> 1) | ((rev & 0x55) << 1);
return (byte)rev;
}