Napisati sklopovni kod za sustav kontrole semafora koristeći 8086?
; Definirajte memorijske adrese za kontrolu semafora
TL_RED jednako 00H
TL_ŽUTO jednako 01H
TL_GREEN equ 02H
TL_CONTROL ekvivalent 03H
; Definirajte I/O portove za kontrolu semafora
OUTPUT_PORT equ 04H
; Definirajte vrijednosti kašnjenja
DELAY_TIME jednako 10000
org 100H
; Ovdje počinje glavni program
glavni:
mov al, TL_RED; Pokrenite semafor na crveno
mov [TL_CONTROL], al
jmp petlja; Skoči na petlju
petlja:
mov al, [TL_CONTROL]; Pročitajte trenutno stanje semafora
cmp al, TL_CRVENO; Provjerite je li na semaforu crveno svjetlo
je red; Ako je crveno, skoči u crveno stanje
cmp al, TL_ŽUTO; Provjerite je li na semaforu žuto svjetlo
je žuto; Ako je žuto, skoči u žuto stanje
cmp al, TL_ZELENO; Provjerite svijetli li zeleno svjetlo na semaforu
je zelena; Ako je zeleno, skoči u zeleno stanje
crveno:
mov al, IZLAZNI_PORT; Odaberite izlazni priključak za crveno svjetlo
izlaz al, 01H; Upali crveno svjetlo
odgoda poziva; Odgoda od DELAY_TIME milisekundi
mov al, IZLAZNI_PORT; Odaberite izlazni priključak za crveno svjetlo
van al, 00H; Ugasi crveno svjetlo
mov al, TL_YELLOW; Postavite status sljedećeg semafora na žuto
mov [TL_CONTROL], al
jmp petlja; Skoči na petlju
žuta boja:
mov al, IZLAZNI_PORT; Odaberite izlazni priključak za žuto svjetlo
izlaz al, 01H; Uključite žuto svjetlo
odgoda poziva; Odgoda od DELAY_TIME milisekundi
mov al, IZLAZNI_PORT; Odaberite izlazni priključak za žuto svjetlo
van al, 00H; Ugasi žuto svjetlo
mov al, TL_GREEN; Status sljedećeg semafora postavite na zeleno
mov [TL_CONTROL], al
jmp petlja; Skoči na petlju
zelena:
mov al, IZLAZNI_PORT; Odaberite izlazni priključak za zeleno svjetlo
izlaz al, 01H; Upalite zeleno svjetlo
odgoda poziva; Odgoda od DELAY_TIME milisekundi
mov al, IZLAZNI_PORT; Odaberite izlazni priključak za zeleno svjetlo
van al, 00H; Ugasi zeleno svjetlo
mov al, TL_RED; Postavite status sljedećeg semafora na crveno
mov [TL_CONTROL], al
jmp petlja; Skoči na petlju
odgoditi:
mov cx, DELAY_TIME; Pokreni brojač kašnjenja
xor dx, dx; Obriši registar dx
petlja_odgode:
petlja odgoda_petlja; Vrti petlju dok brojač ne dosegne nulu
ret