Estoy trabajando con un derivado 80C51, el P89C668HFA . Por el momento, estoy tratando de obtener algunas funciones muy básicas: solo quiero 1) deshabilitar la alternancia de ALE y 2) hacer que los puertos de E/S cambien. Escribí un poco de código para lograr esto:
MOV 08EH,#003H ; set lowest bit of AUXR low to disable ALE toggling
START:
MOV 080H,#000H ; Port 0
MOV 090H,#000H ; Port 1
MOV 0A0H,#000H ; Port 2
MOV 0B0H,#000H ; Port 3
MOV 080H,#0FFH
MOV 090H,#0FFH
MOV 0A0H,#0FFH
MOV 0B0H,#0FFH
SJMP START
END
La salida de mi ensamblador coincide con el binario hecho a mano con el que comencé. Cuando saco el dispositivo del reinicio, el pin ALE sigue alternando, pero no PSEN #, y los pines del puerto de E/S están todos altos. Dada esa información, y el hecho de que puedo programar correctamente el dispositivo y verificar que el programa es correcto, creo que el dispositivo funciona correctamente, pero parece que el código no se ejecuta correctamente (si es que lo hace).
Agradecería cualquier idea sobre el tema, los hilos que podría extraer, etc. Gracias.
Tal vez tenga un problema con el comportamiento de inicio de este chip.
En la hoja de datos de la página 64 se describe la ejecución del código de restablecimiento de encendido. Si no hace nada con el byte de estado especial, el procesador iniciará (por defecto de fábrica) la ROM de arranque interna y no la aplicación que ha programado.
Se sugiere programar el byte de estado a 0x00, para que la ejecución del código comience en la dirección 0x0000. Aquí es donde probablemente se coloque su programa sin ningún tratamiento especial.
Hay una sección sobre cómo borrar y programar el byte de estado a través de un registro en Intel-Hex-File en la página 67 :
Varias funciones de escritura
:nnxxxx03ffssddcc
Dónde:
nn = número de bytes (hex) en el registro
xxxx = campo obligatorio, pero el valor es "no me importa"
03 = función de escritura
ff = código de subfunción
ss = código de selección
dd = entrada de datos (según sea necesario)
cc = código de subfunción de suma de comprobación = 04 (Borrar vector de arranque y byte de estado)
ff = 04
ss = no me importa
Ejemplo:
:020000030400F7 borrar vector de arranque y byte de estado
Código de subfunción = 06 (byte de estado del programa o vector de arranque)
ff = 06
ss = 00 byte de estado del programa
01 vector de arranque del programa
Ejemplo:
:030000030601FCF7 vector de arranque del programa con 0FCH
Arsenal
elalcedelmediodía
CasaMich
elalcedelmediodía
Arsenal