Buscamos urgentemente programación de ensamblaje de microcontroladores: conteo de claves (0-255).
Hay dos métodos para lograr el efecto, uno es el método de contrainterrupción. Se trata de diseñar un contador de 8 bits. Cuando el contador llegue a 256, se activará una interrupción y luego se transferirá el programa de interrupción de borrado correspondiente. Otro método es el método del contador suave. Es para definir un contador suave, y luego cada vez que llega un pulso, el estado del contador suave se detectará primero. Si el valor del contador suave no llega a 256, entonces el dígito de las unidades se incrementará en uno. llega a 256, irá al programa de compensación. En este momento, el conteo podrá comenzar desde 000.
Aquí se utiliza el método de contador suave. La conexión del hardware es la siguiente: el puerto p0 está conectado a los ocho segmentos del tubo digital, y p2.4 a p2.6 del puerto p2.7 están conectados a los dígitos de las unidades, decenas y centenas respectivamente. La interrupción externa 1 está conectada al botón. La tabla de códigos debe modificarla usted mismo. El programa funciona bien en la placa casera. Cabe señalar que es mejor conectar un condensador 103 entre la interrupción 1 y tierra. Evite múltiples desencadenantes. La frecuencia de conteo de este programa no es muy alta, aproximadamente 3 veces por segundo. Pero debería funcionar para entradas clave. Si cree que la frecuencia de conteo es demasiado baja, puede contactarme. Mantener presionado este programa no continuará aumentando a menos que lo suelte y presione nuevamente.
GEJ EQU 35H; Definir el registro de unidades
SHIJ EQU 36H; Definir el registro de decenas
BAIJ EQU 37H; Definir el registro de centenas
QIANJ EQU 38H; Definir registro de miles
CON EQU 39H; Definir contador suave
ORG 00H; Programar primera dirección
AJMP START; INICIO
ORG 13H
AJMP INTT1
ORG 30H;dirección INICIO
INICIO: LCALL CHUSHI;llamar a la subrutina de inicialización
SETB EA
SETB EX1
SETB IT1
PRINCIPAL: LCALL XIANSHI; subrutina de visualización de llamada
AJMP PRINCIPAL; PRINCIPAL para ejecución
CHUSHI: MOV GEJ, #0; borrar 0
MOV SHIJ, #0; borrar 0
MOV BAIJ, #0;
MOV QIANJ, #0; borrar 0
MOV CON, #0; borrar 0
RET; XIANSHI
LCALL XIANSHI
INC CON
MOV A, CON
CJNE A, #256, SIGUIENTE
AJMP QING
NEXT: INC GEJ; incrementa el contador de unidades en uno
MOV A, GEJ transferencia de datos
CJNE A, # 10, OVER; Juicio de comparación
MOV GEJ, #0; Borrar a 0
INC SHIJ; Contador de decenas más uno
MOV A, SHIJ
CJNE A, #10, OVER; juicio de comparación
MOV SHIJ, #0; claro a 0
INC BAIJ; contador de cien más uno
MOV A, BAIJ; transferencia de datos
CJNE A, #10, OVER; juicio de comparación
MOV BAIJ, #0; contador de miles más uno
MOV A, QIANJ; transferencia de datos
CJNE A, #10, OVER; juicio de comparación
MOV QIANJ, # 0; 0
OVER: RETI; interrumpir retorno
QING: MOV GEJ, #0
MOV SHIJ, #0
MOV BAIJ, #0
MOV QIANJ, #0
MOV CON, #0
LCALL XIANSHI
RETI
XIANSHI: MOV DPTR, #TABLE; Obtener datos de la tabla
p>
MOV R1, #20; Asignar R1 20 veces
BUCLE: MOV A, GEJ; Transferencia de datos
MOVC A, @A DPTR Obtener la dirección correspondiente
MOV P2, #0EFH; abre el primer dígito desde la izquierda
MOV P0, A; envía el código de segmento
LCALL DELY1MS; subrutina
MOV A, SHIJ; transferencia de datos
MOVC A, @A DPTR; obtener la dirección correspondiente
MOV P2, #0DFH;
p>
MOV P0, A; enviar código de segmento
LCALL DELY1MS; retraso
MOV A, BAIJ
MOVC A, @ A DPTR; obtener dirección
MOV P2, #0BFH; abrir el tercer bit
MOV P0, A; LCALL DELY1MS; retraso
MOV A, QIANJ; transferencia de datos
MOVC A, @A DPTR; obtener dirección
MOV P2, #07FH; dígito
MOV P0, A; enviar código de segmento
LCALL DELY1MS; retraso
DJNZ R1, LOOP menos una rotación distinta de cero
RET; retorno
DELY1MS: MOV R7, #250; subrutina de retardo
DL1: NOP; instrucción vacía
NOP;
DJNZ R7 , DL1; menos uno, giro distinto de cero
RET; retorno
TABLA: DB 028H, 0EBH, 032H, 062H, 0E1H, 064H, 024H, 0EAH, 020H , 060H
FIN; La compilación finaliza