Diseño curricular sobre principios y aplicaciones de microcomputadoras: control de semáforos
ORG 0000H
LJMP STAR1
A_BIT EQU 20H; ubicación de la memoria digital de la tienda
B_BIT EQU 21H digital de un solo dígito El almacenamiento ubicación espacial del número de diez dígitos del tubo
TEMP EQU 22H; la ubicación de almacenamiento del valor del contador
STAR1: MOV TEMP, #20 inicializa el contador
CLR P1.0; luz roja en dirección norte-sur
CLR P1 0.5, luz verde en dirección este-oeste
STLOP1: Llamado por ACALL y DISPLAY1 ; mostrar subrutina
DEC TEMP 1
El contador MOV A disminuye
CJNE A, #0, STLOP1; "
SETB P1.0; La luz roja en dirección norte-sur está apagada
SETB P1.5 ACALL y verde montaña
La llamada del la dirección este a oeste parpadea Proceso de luz amarilla BR /> STAR2: MOV TEMP, #20 Reinicie la cuenta atrás de 60 segundos
CLR P1.2 Luz verde en dirección norte-sur
CLR P1.3; Dirección Este Rojo Oeste
STLOP2: ACALL y pantalla 2; llamar a la subrutina del tubo digital
Disminución del contador DEC
MOV; A, TEMP
CJNE A, #0, STLOP2 para determinar si el contador
SETB P1.2
SETB P1.3
¿Montaña ACALL, llamada de subrutina, la luz amarilla parpadea
Por SJMP STAR1
DISPLAY1: MOV A, TEMP
MOV B, #10
DIV AB
MOV B_BIT, B bit B BR /> MOV A_BIT, A; diez
MOV DPTR, #NUMTAB especifica la dirección inicial de la tabla de búsqueda
MOV R0, #12;
DPL1: MOV R1, #250;
DPLOP1: MOV A, A_BIT un solo dígito
MOVC A , @A + DPTR; código de 7 segmentos de dígitos
MOV P0, A; enviar código de 7 segmentos
CLR P2.3;
ACALL y D1MS; 162 microsegundos
SETB P2.3; apagado un poco para evitar imágenes fantasma
MOV A, B_BIT, en decenas de dígitos
MOVC A _at_ A + DPTR; investigar 10 dígitos, 7 segmentos
MOV P0, A; enviar 10 7 segmentos
CLR a P2.2, abrir 10 significativos
CLR P2.0
CLR P2.1
ACALL D1MS DISPLAY
SETB P2.2 162 microsegundos casi 10 para evitar imágenes fantasma
> Ejecución del bucle DJNZ R1 DPLOP1 250 veces
DJNZ R0, implementación de circulación DPL1 250X4 = 1000
RET
DISPLAY2: MOV A , TEMP Convertir hexadecimal números en TEMP a números decimales BR /> MOV B, #10; 10 decimal/10 = decimal
DIV AB
MOV A_BIT, B, en B
MOV B_BIT 10,A;
A
MOV DPTR, #NUMTAB,
MOVC A especifica la dirección inicial de la tabla de búsqueda
MOV R0, #12; > DPL2: MOV R1, #250;
DPLOP2: MOV A, A_BIT con número, @A + DPTR; código de 7 segmentos del número de encuesta
MOV P0, A; Código de segmento de 7 bits
CLR P2. 0; encender un poco
ACALL y D1MS
Mostrar 162 microsegundos SETB P2.0; apagar un poco para evitar imágenes fantasma
MOV A, B_BIT DIEZ Número de dígitos MOVC A _at_ A + DPTR; Encuesta Código de 7 segmentos de 10 dígitos
MOV P0, A, envía 10 códigos de 7 segmentos
CLR P2.1 , ABRIR DIEZ PRINCIPALES
CLR P2.2 CLR P2.3
ACALL D1MS DISPLAY
SETB P2.1, 162 microsegundos APAGADO 10
ACALL D1MS DISPLAY
p>
DJNZ R1 DPLOP2, evita la ejecución del bucle 250 veces
DJNZ R0, ejecución del bucle DPL2 250X4 = 1000
RET
Montaña: MOV R3, #5;
RONDA: CLR P1.1 /> CLR P1.4
ACALL DELAY; la luz parpadea 5
SETB P1 .1, cada intervalo es de un segundo
SETB P1.4
retardo ACALL
DJNZ R3; redondo;
RET;
D1MS: MOV R7, #80; 2 + 2 p>
RETARDO: MOV R6,
YL3; : MOV R4, #100;
XL2: MOV R5, #71;
DL1: NOP; segunda subrutina de retardo
NOP
NOP
NOP
NOP
DJNZ R5, DL1
DJNZ R4, XL2
DJNZ; R6, YL3;
***Código de visualización del tubo digital del cátodo
NUMTAB uno: DB 03FH 0
FIN