Advertisement
tsounakis

Intel 8085 #3 (Pain)

Apr 30th, 2022
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.51 KB | None | 0 0
  1. ; D7 D6 D5 D4 D3 D2 D1 D0 / Hex
  2. ; R Y G - - R Y G
  3. ; 0 0 1 0 0 1 0 0 => 24D
  4. ; 0 1 0 0 0 1 0 0 => 44D
  5. ; 1 0 0 0 0 0 0 1 => 81D
  6. ; 1 0 0 0 0 0 1 0 => 82D
  7.  
  8. ; ΚΑΤΑΧΩΡΗΤΕΣ ΠΟΥ ΧΡΗΣΙΜΟΠΟΙΟΥΝΤΑΙ:
  9. ; (Α -> συσσωρευτής)
  10. ; B -> (κύριο) χρονόμετρο
  11. ; D -> δευτερεύον χρονόμετρο
  12. ; C -> πλήθος αυτοκινήτων προ του κόμβου και επί της επαρχιακής οδού
  13. ; E -> σημαία για επίτρεψη μεταβολής χρονομέτρου
  14. ; H -> σημαία για επίτρεψη μεταβολής δευτερεύοντος χρονομέτρου
  15.  
  16. jmp START
  17.  
  18. START: ei
  19. mvi B, 0H ; το χρονόμετρο
  20. mvi C, 0H ; το πλήθος των αυτοκινήτων ->
  21. ; προ του κόμβου
  22. mvi H, 0H ; σημαία για το χρονόμετρο
  23. ; jmp NGCR
  24.  
  25. NGCR: mvi A, 24D ; θέση των σημ/τών Εθνική πράσινο ->
  26. ; και επαρχιακό κόκκινο
  27. out PORT_OUT ; ένδειξη στους σηματοδότες
  28. sub A
  29. push PSW
  30. cmp C
  31. jz NGCR ; όσο το πλήθος των αυτοκινήτων είναι ->
  32. ; μηδενικό, επαναλ. του βρόχου
  33. pop PSW
  34. cmp D
  35. jz TIMER ; εκτέλεση του αλγορίθμου για ->
  36. ; για την περίπτωση που υπάρχει ->
  37. ; ουρά στον κόμβο
  38. mov B, D
  39. sub A
  40. mov D, A ; μηδενισμός του δευτερεύοντος χρονόμετρου
  41.  
  42. TIMER: call DELAY ; κλήση της ρουτίνας Delay.
  43. dcr B
  44. mvi A, 3D
  45. cpi B ; αν το Β > 3 συνέχισε
  46. jz TIMER_END ; αν όντως, τότε λήγει
  47. jmp TIMER ; αλλιώς επαναλ. το βρόχο
  48. sub A
  49. cmp B
  50. jz START ; αν η ουρά δεν είναι άδεια ->
  51. ; εκτελείται το πρόγραμμα εξ αρχής
  52. jmp TIMER_END ; ειδάλλως λήγει
  53.  
  54. TIMER_END: mvi E, 0B
  55. mvi B, 3D ; χρονόμετρο σωστή ένδειξη 3 δ.
  56.  
  57. NYCR: mvi A, 44H
  58. out PORT_OUT ; ένδειξη σηματοδοτών
  59. sub A
  60. call DELAY
  61. dcr B
  62. cmp B
  63. jnz NYCR ; όσο το Β είναι διάφορο (>) του ->
  64. ; επανάλαβε το βρόχου
  65.  
  66. NRCG: mvi A, 81H
  67. out PORT_OUT ; ένδειξη σηματοδοτών
  68. sub A
  69. cmp C
  70. jnz NRCG ; αν η ουρά προ του κόμβου δεν είναι ->
  71. ; άδεια, επανάλαβε το βρόχο.
  72. mvi E, 1B ; σημαία για επίτρεψη μεταβολής χρονομέτρου HIGH
  73. mov H, E ; σημαία το ίδιο για δευτερεύον χρ.
  74. adi 3D
  75. mov B, A ; ορισμός του χρ. σε 3 δ.
  76.  
  77. NRCY: mvi A, 82H
  78. out PORT_OUT ; ένδειξη σηματοδοτών
  79. sub A
  80. cmp Β
  81. jnz NRCY ; όσο το Β είναι διάφορο (>) του ->
  82. ; επανάλαβε το βρόχο
  83. mvi H, 0B
  84.  
  85. jnz NGCR
  86.  
  87. INTRO: push PSW ; «σπρώχνει» στην στοίβα τα περιεχόμενα ->
  88. ; του συσσωρευτή και του F σημαίας έτσι ->
  89. ; με το πέρας της εκτέλεσης να μην χαθούν
  90. inr C
  91.  
  92. mov A, 1B
  93. cmp E
  94. jnz INTRO_END
  95. mov A, 1B
  96. cmp H
  97. jz INTRO_CONT
  98. mvi D, 60D ; το δευτερεύον χρονόμετρο αρχικοποείται
  99.  
  100. INTRO_CONT: mov A, 1D
  101. cmp C
  102. jnz FIRST ; αν η ουρά είναι άδεια, λήγει
  103. mov A, 13D
  104. cmp B
  105. jz TIMER_CONT2
  106. jnz mvi B, 3D ; θέτει το χρονόμετρο ίσο με 3
  107.  
  108. TIMER_CONT2: mov A, B
  109. sui 10D
  110. mov B, A
  111. jmp INTRO_END
  112.  
  113. INTRO_END: pop PSW
  114. ret
  115.  
  116. FIRST: mvi B, 60D
  117. jmp INTRO_END
  118.  
  119. RELINQ: push PSW ; «σπρώχνει» στην στοίβα τα περιεχόμενα ->
  120. ; του συσσωρευτή και του F σημαίας έτσι ->
  121. ; με το πέρας της εκτέλεσης να μην χαθούν
  122. sub A
  123. cmp C
  124. jz RELINQ_END
  125. dcr B
  126.  
  127. RELINQ_END:
  128. pop PSW
  129. ret
  130.  
  131. RST6.5: call INTRO ; με την ενεργοποίηση του ανιχνευτή ->
  132. ; εισόδου καλείται η υπορουτίνα INTRO
  133. ret
  134.  
  135. RST5.5: call RELINQ ; με την ενεργοποίηση του ανιχνευτή ->
  136. ; εξόδου καλείται η υπορουτίνα RELINQ
  137. ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement