a programar um mux 8:1 problemas nas portas de saida

Mas colega tu estas a carregar isso num int que sao 2 bytes(16bits) e depois mandas escrever no pino esse valor todo!

r0 = bitRead(count,0);
r1 = bitRead(count,1);//r1 é sao 2 bytes
r2 = bitRead(count,2);

A funçao digitalWrite só aceita como argumentos o pino e o valor que pode ser LOW ou HIGH

Syntax

digitalWrite(pin, value)

Parameters

pin: the pin number

value: HIGH or LOW

Returns

none

O que esperas que aconteça aqui:

digitalWrite(5, r0);//r0 é um int que tentas escrever num bit do porto!
    digitalWrite(6, r1);
    digitalWrite(7, r2);
  for ( count=0; count<=7; count++)
  {
   
    r0 = bitRead(count,0);
    r1 = bitRead(count,1);
    r2 = bitRead(count,2);

O resultado final disto vai ser:
r0 = 0;//Em binario é 0b00000000;
r1= 1;//Em binario é 0b00000001;
r2= 2;//Em binario é 0b00000010;
Mas isso acontece internamente nao precisas de correr esse for para atribuires isso!
Fazeres r2 = 2 é a mesma coisa que r2= 0b00000010;