Scrivi il codice di assemblaggio per il sistema di controllo del semaforo utilizzando 8086?
; Definire gli indirizzi di memoria per il controllo del semaforo
TL_RED eq 00H
TL_GIALLO equ 01H
TL_VERDE equ 02H
TL_CONTROL equ 03H
; Definire le porte I/O per il controllo del semaforo
OUTPUT_PORT equ 04H
; Definire i valori di ritardo
DELAY_TIME pari a 10000
org 100H
; Il programma principale inizia qui
principale:
movimento al, TL_RED; Inizializza il semaforo al rosso
mov [TL_CONTROL], al
ciclo jmp; Vai al ciclo
ciclo continuo:
movimento al, [TL_CONTROL]; Leggi lo stato attuale del semaforo
cmp al, TL_RED; Controlla se il semaforo è rosso
sì, rosso; Se rosso, passa allo stato rosso
cmp al, TL_GIALLO; Controlla se il semaforo è giallo
sì, giallo; Se giallo, passa allo stato giallo
cmp al,TL_GREEN; Controlla se il semaforo è verde
sì, verde; Se verde, passa allo stato verde
rosso:
movimento, OUTPUT_PORT; Seleziona la porta di uscita per la luce rossa
fuori al, 01H; Accendi la luce rossa
ritardo della chiamata; Ritardo di DELAY_TIME millisecondi
movimento, OUTPUT_PORT; Seleziona la porta di uscita per la luce rossa
fuori alle, 00H; Spegni la luce rossa
movimento al, TL_YELLOW; Imposta lo stato del semaforo successivo su giallo
mov [TL_CONTROL], al
ciclo jmp; Vai al ciclo
giallo:
movimento, OUTPUT_PORT; Seleziona la porta di uscita per la luce gialla
fuori al, 01H; Accendi la luce gialla
ritardo della chiamata; Ritardo di DELAY_TIME millisecondi
movimento, OUTPUT_PORT; Seleziona la porta di uscita per la luce gialla
fuori alle, 00H; Spegni la luce gialla
movimento al, TL_GREEN; Imposta lo stato del semaforo successivo su verde
mov [TL_CONTROL], al
ciclo jmp; Vai al ciclo
verde:
movimento, OUTPUT_PORT; Selezionare la porta di uscita per la luce verde
fuori al, 01H; Accendi la luce verde
ritardo della chiamata; Ritardo di DELAY_TIME millisecondi
movimento, OUTPUT_PORT; Selezionare la porta di uscita per la luce verde
fuori alle, 00H; Spegni la luce verde
movimento al, TL_RED; Imposta lo stato del semaforo successivo su rosso
mov [TL_CONTROL], al
ciclo jmp; Vai al ciclo
ritardo:
mov cx, DELAY_TIME; Inizializza il contatore per il ritardo
xo dx, dx; Cancella registro dx
ritardo_loop:
ciclo_ritardo_loop; Ciclo fino a quando il contatore raggiunge lo zero
ritirarsi