no se bien que micro estas usando, ni que oscilador, en todo caso deberias ver la hoja de datos para ver que registros tiene asociados el TIMER que uses para las interrupciones. Algunos timer desbordan a 16bits y otros a 8bits, osea depende de eso cual uses, ademas deberias ver el PRESCALER para que los tiempos te cuadren en los 80ms y los 2 seg.
Cuando trabajas con delays, ya sea para evitar rebotes como dices o para los 2 seg, debes usar la interrupcion para evitar que el programa se quede "clavado" en esa instruccion de delay. Piensa que si por ejemplo tu micro tiene un tiempo de instruccion de 1useg, en 80ms el micro puede ejecutar 80000 instrucciones.
Si trabajas con interrupciones recuerda que esta ejecute lo menos posible, para retornar rapidamente al programa principal, para esto puedes usar algun registro como bandera "flag".
Por el tema del valor que presentas en el PORTB, hasta que no lo cambies el valor de alguno de los bits, este se mantendrá en esos valores.
Osea, puedes hacer un programa que sea de tres estados.
Estado 1: todos el PORTB en ceros, y que transcurridos por decir 5 segundos vuelva a esta posicion
Estado 2: habiendo presionado el pulsador y el tiempo que se mantuvo presionado supera los 2 seg, pones todo a 1
Estado 3: si has presionado el pulsador y el tiempo es menor a 2 seg, pones 10101010
Saludos,