Problemas con la programación del microcontrolador (ansioso, gracias por tu ayuda)
Parece que el programa del cartel no ha sido depurado y tiene algunas imperfecciones, como las siguientes:
ORG 0000H
LTMP START debería ser LJMP, el siguiente; Igual que
ORG 0070H; esta es la dirección alta y debe estar detrás de 001B.
LTMP MAIN
ORG 001BH debe intercambiarse con 0070
ATMP SERVE; esto debería ser AJMP SERUE, lo mismo a continuación.
INICIO: JB P1.0, ST es incorrecto.
MOV P2, # 0FH;
MOV R0, #0FH; Debería ser 0F0, si el oscilador de cristal es 12.
MOV R1, #0D8H
MOV B, # 02H
LCALL MAIN; Ejecute este aquí. El programa se transferirá a MIAN para su ejecución, espere adentro y no volverá a ejecutarse.
MOV P0, #0FH; Los siguientes programas no se ejecutarán.
MOV R0, #0B0H; No
MOV R1, #3CH;
MOV B, #96H; no
LCALL MAIN; no se ejecutará
MAIN: MOV TM0D, #01H aquí debe ser TMOD. >
MOV TL0, R0
MOV TH0, R1
SETB TR0
SETB ET0
SETB EA
STMP $
SERUE: MOV TL0, R0
MOV TH0, R1
DTNZ B, BUCLE
OLR TR0; debería ser CLR tiene razón
LOOP: RETI
END; compilado hasta este punto END no significa el final del programa, solo significa eso. el segmento del programa termina aquí. Debería ser SJMP $, que termina dinámicamente.
ST: END; este programa no será compilado;
;;;;;;;; ;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;
El El siguiente es el programa que compilé. Todavía uso un temporizador para retrasar.
La depuración pasó. Para referencia del cartel, espero que sea útil
;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0;
AJMP MIAN;
ORG 000BH
AJMP AGA; Entrada de interrupción
ORG 0030H
MIAN: MOV TMOD, #01H Modo de trabajo 1
p>
MOV TH0, #0B1H ; Valor de asignación 20MS
MOV TL0, #0E0H
SETB EA ; Activar interrupción
SETB ET
0; active la interrupción T0
JB P1.0, $; compruebe si P1.0 es 0, no espere.
MOV P2, #0FH; P2 baja. Salida de bit de nivel alto.
SETB TR0; Iniciar T0
CLR A; Bit de bandera
Esperar interrupción
AGA: CJNE A, 0, LOOP; el bit de bandera es 0, ejecución secuencial (segunda interrupción de 15 MS, la bandera es 1, cambie a LOOP)
MOV P0, #0FH; P0 Los cuatro bits inferiores del puerto generan un nivel alto
MOV TH0, #15H; asigna el valor 15MS
MOV TL0, #0A0H
SETB 00H; el bit de bandera a 1
RETI; Regreso
LOOP: CLR TR0; Retraso 15MS para. p> FINAL