Hola, no sé bien que es lo que debe realizar el programa, es un contador regresivo dependiendo del valor que capture del dip-sw ?, arranca automáticamente ?, que debe suceder cuando llegue a cero ?
Veo los siguientes problemas:
1. Con el dip-sw estas llevando al puertob los valores 1, cuando este se cierra; pero si está abierto el dip-sw el puertob queda en alta impedancia, no en cero como debería ser, así no captura ningún valor correcto
2. El muestreo del display requiere un tiempo, digamos que cambie cada segundo, acá lo tienes cambiando sólo a la velocidad del delay de encendido, pasa todo el tiempo en este loop.
3. Sólo un display muestra valores del 1 al 8 mientras el otro permanece apagado, el otro display sólo muestra el valor 9,
El programa, según mi interpretación, tiene estos errores de lógica que impiden al circuito funcionar.
Saludos.
Nota. el archivo .hex se está creando correctamente, sólo que es el resultado de la lógica que tengas en el archivo .c