Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; D7 D6 D5 D4 D3 D2 D1 D0 / Hex
- ; R Y G - - R Y G
- ; 0 0 1 0 0 1 0 0 => 24D
- ; 0 1 0 0 0 1 0 0 => 44D
- ; 1 0 0 0 0 0 0 1 => 81D
- ; 1 0 0 0 0 0 1 0 => 82D
- ; ΚΑΤΑΧΩΡΗΤΕΣ ΠΟΥ ΧΡΗΣΙΜΟΠΟΙΟΥΝΤΑΙ:
- ; (Α -> συσσωρευτής)
- ; B -> (κύριο) χρονόμετρο
- ; D -> δευτερεύον χρονόμετρο
- ; C -> πλήθος αυτοκινήτων προ του κόμβου και επί της επαρχιακής οδού
- ; E -> σημαία για επίτρεψη μεταβολής χρονομέτρου
- ; H -> σημαία για επίτρεψη μεταβολής δευτερεύοντος χρονομέτρου
- jmp START
- START: ei
- mvi B, 0H ; το χρονόμετρο
- mvi C, 0H ; το πλήθος των αυτοκινήτων ->
- ; προ του κόμβου
- mvi H, 0H ; σημαία για το χρονόμετρο
- ; jmp NGCR
- NGCR: mvi A, 24D ; θέση των σημ/τών Εθνική πράσινο ->
- ; και επαρχιακό κόκκινο
- out PORT_OUT ; ένδειξη στους σηματοδότες
- sub A
- push PSW
- cmp C
- jz NGCR ; όσο το πλήθος των αυτοκινήτων είναι ->
- ; μηδενικό, επαναλ. του βρόχου
- pop PSW
- cmp D
- jz TIMER ; εκτέλεση του αλγορίθμου για ->
- ; για την περίπτωση που υπάρχει ->
- ; ουρά στον κόμβο
- mov B, D
- sub A
- mov D, A ; μηδενισμός του δευτερεύοντος χρονόμετρου
- TIMER: call DELAY ; κλήση της ρουτίνας Delay.
- dcr B
- mvi A, 3D
- cpi B ; αν το Β > 3 συνέχισε
- jz TIMER_END ; αν όντως, τότε λήγει
- jmp TIMER ; αλλιώς επαναλ. το βρόχο
- sub A
- cmp B
- jz START ; αν η ουρά δεν είναι άδεια ->
- ; εκτελείται το πρόγραμμα εξ αρχής
- jmp TIMER_END ; ειδάλλως λήγει
- TIMER_END: mvi E, 0B
- mvi B, 3D ; χρονόμετρο σωστή ένδειξη 3 δ.
- NYCR: mvi A, 44H
- out PORT_OUT ; ένδειξη σηματοδοτών
- sub A
- call DELAY
- dcr B
- cmp B
- jnz NYCR ; όσο το Β είναι διάφορο (>) του ->
- ; επανάλαβε το βρόχου
- NRCG: mvi A, 81H
- out PORT_OUT ; ένδειξη σηματοδοτών
- sub A
- cmp C
- jnz NRCG ; αν η ουρά προ του κόμβου δεν είναι ->
- ; άδεια, επανάλαβε το βρόχο.
- mvi E, 1B ; σημαία για επίτρεψη μεταβολής χρονομέτρου HIGH
- mov H, E ; σημαία το ίδιο για δευτερεύον χρ.
- adi 3D
- mov B, A ; ορισμός του χρ. σε 3 δ.
- NRCY: mvi A, 82H
- out PORT_OUT ; ένδειξη σηματοδοτών
- sub A
- cmp Β
- jnz NRCY ; όσο το Β είναι διάφορο (>) του ->
- ; επανάλαβε το βρόχο
- mvi H, 0B
- jnz NGCR
- INTRO: push PSW ; «σπρώχνει» στην στοίβα τα περιεχόμενα ->
- ; του συσσωρευτή και του F σημαίας έτσι ->
- ; με το πέρας της εκτέλεσης να μην χαθούν
- inr C
- mov A, 1B
- cmp E
- jnz INTRO_END
- mov A, 1B
- cmp H
- jz INTRO_CONT
- mvi D, 60D ; το δευτερεύον χρονόμετρο αρχικοποείται
- INTRO_CONT: mov A, 1D
- cmp C
- jnz FIRST ; αν η ουρά είναι άδεια, λήγει
- mov A, 13D
- cmp B
- jz TIMER_CONT2
- jnz mvi B, 3D ; θέτει το χρονόμετρο ίσο με 3
- TIMER_CONT2: mov A, B
- sui 10D
- mov B, A
- jmp INTRO_END
- INTRO_END: pop PSW
- ret
- FIRST: mvi B, 60D
- jmp INTRO_END
- RELINQ: push PSW ; «σπρώχνει» στην στοίβα τα περιεχόμενα ->
- ; του συσσωρευτή και του F σημαίας έτσι ->
- ; με το πέρας της εκτέλεσης να μην χαθούν
- sub A
- cmp C
- jz RELINQ_END
- dcr B
- RELINQ_END:
- pop PSW
- ret
- RST6.5: call INTRO ; με την ενεργοποίηση του ανιχνευτή ->
- ; εισόδου καλείται η υπορουτίνα INTRO
- ret
- RST5.5: call RELINQ ; με την ενεργοποίηση του ανιχνευτή ->
- ; εξόδου καλείται η υπορουτίνα RELINQ
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement