Ayuda a comprobar si hay errores en el programa ensamblador
Existen los siguientes problemas:
1. Después de que el retraso de la clave rebote, el valor de la clave no se vuelve a leer, es decir:
L8: ACALL. DELAY
CJNE A, #0FFH, SAVE
Debes insertar entre estas dos instrucciones: MOV A, P1, de lo contrario la A que uses para comparar seguirá siendo la primera vez que lees it A
2. Después de detectar una pulsación de tecla, no esperó a que se soltara la tecla antes de detectar la siguiente. A juzgar por su programa, el timbre sonará después de detectar que se presiona un botón. A menos que pueda controlar bien el tiempo de presionar el botón, no puede exceder el tiempo del timbre. Por lo tanto, se recomienda agregar la liberación de la tecla de espera, es decir:
INC R0
DJNZ R2, SET
Inserte estas dos instrucciones: p>
RELEASE: MOV A, P1
CJNE A, #0FFH, RELEASE Si detecta que la tecla aún está presionada continuará detectando hasta que se suelte
<; p>ACALL DELAY; Continuar retrasando el reboteMOV A, P1
CJNE A, #0FFH, RELEASE Después del rebote, confirme nuevamente que la tecla ha sido liberada
El código detrás de usted parece muy confuso, mi comprensión general es: comienza leyendo el valor clave 8 veces y lo almacena en la unidad a partir de 31H, y luego, en el ciclo posterior, lo ejecuta 3 veces y luego lee el valor de la clave 8 veces, y siempre que haya una de estas 8 veces. Si presiona la tecla derecha (igual que los valores de las teclas 1.º, 2.º y 3.º al principio respectivamente), la posición 00H será válida. , y luego sonará el timbre, pero no habrá trabajo sustancial.
Además, P3.2 en su diagrama esquemático es la línea de control. P3.2 no se ve en el programa, pero P3.5 sí.
Espero que puedas especificar tus necesidades y tus propias ideas de programación para que otros puedan ayudarte. No tiene sentido simplemente publicar programas.