Hermano, no te preocupes, el error L121: IMPROPER FIXUP al usar grandes números de interrupción en la serie STC8 es muy común. Aunque hayas instalado el complemento oficial para extender los números de interrupción, lo más probable es que la configuración interna de Keil no esté correctamente ajustada.
Puedes revisar en orden las siguientes causas más probables:
1. No has cambiado al enlazador extendido (LX51) — Causa más frecuente
El enlazador predeterminado BL51 de Keil C51 tiene un soporte deficiente para interrupciones mayores al número 31, y fácilmente genera el error L121.
- Solución: Haz clic en el ícono de la “varita mágica” en Keil (Options for Target) → Ve a la pestaña
Device → Marca la casilla Use Extended Linker (LX51) instead of BL51. Luego vuelve a compilar todo nuevamente (“Rebuild All”). En el 90% de los casos, este paso resuelve el problema inmediatamente.
2. El complemento se instaló en una ruta incorrecta de Keil
Si tienes varias versiones de Keil instaladas en tu computadora (por ejemplo, MDK-ARM y C51 instalados juntos, o instalados en diferentes unidades), es posible que el parche oficial se haya aplicado en un directorio que no estás utilizando actualmente.
- Solución: Verifica que la ruta donde se descomprimió el parche sea efectivamente el directorio raíz de Keil que estás usando (en especial, comprueba si los archivos del compilador en la carpeta
C51\\BIN fueron reemplazados correctamente).
3. La versión de Keil C51 es demasiado antigua
El parche oficial para extensión de interrupciones requiere una versión mínima de Keil. Si tu versión es demasiado vieja (por ejemplo, anterior a la v9.54), incluso tras aplicar el parche, el ensamblador subyacente podría no reconocer las direcciones de desplazamiento para grandes interrupciones.
- Solución: Te recomendamos actualizar Keil C51 a la versión v9.60 o superior.
4. Archivos temporales de compilación antiguos están interfiriendo
A veces, después de instalar el parche, los archivos .obj antiguos pueden interferir durante el proceso de enlazado.
- Solución: No pulses solo “Build”, haz clic en “Rebuild All” para limpiar completamente todos los archivos generados previamente y volver a compilar desde cero.
Primero prueba el paso 1 (cambiar a LX51). Si aún así no funciona, te sugerimos tomar una captura de pantalla de la ventana “Target” y la pestaña “Device” en la varita mágica y compartirla para ayudarte mejor.