Advertisement
heavenriver

ExEsame3.asm

Jun 16th, 2012
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;Un processore è interfacciato ad un TIMER (programmabile dal processore) e ad una periferica che gestisce un semaforo (SEMAF). Quest’ultima periferica è provvista anche di un registro contatore che indica il numero di autovetture passate davanti ad un semaforo.
  2. ;Normalmente il processore ogni 90 secondi (scanditi da TIMER) comanda il semaforo ad invertire l’abilitazione ai passaggi (da rosso a verde e viceversa). Prima di abilitare la commutazione del semaforo, il processore legge il numero di autovetture passate durante il periodo in cui il semaforo è a verde, se il numero di auto passate è maggiore di 50 unità allora il processore ritarda la commutazione del semaforo di  altri 30 secondi (per una sola volta, riprogrammando TIMER).
  3. ;Ogni qual volta che il processore legge il valore del numero di autovetture azzera il contatore di SEMAF. Naturalmente una volta che il processore ha mantenuto per altri 30 secondi il semaforo a verde deve riprogrammare TIMER per il normale funzionamento (far inviare una interruzione dopo 90 sec.).
  4. ;Progettare l’interfaccia del TIMER e di SEMAF.
  5. ;Inoltre progettare il software per la gestione delle interruzioni provenienti da TIMER.
  6.  
  7. org 400h
  8. timer equ 0h                ;Timer, adds another 30 seconds to traffic light switch delay when needed
  9. semaf equ 1h                ;Traffic lights, switches every 90 seconds
  10.                             ;If 50+ cars pass during that time, delays switch through timer
  11. colour equ 2h               ;Traffic lights colour: 0 for red, 1 for green
  12. maxcar equ 50               ;Cap number of cars
  13. delay db 0                  ;Checks if delay has taken place or not
  14. code
  15. jsr init
  16. seti
  17. main: jmp main              ;Loops until interrupt
  18. halt
  19. init: push R0
  20. movl #90, R0
  21. outl timer, R0              ;Initializes traffic lights timer to 90 seconds
  22. movl #0, delay              ;Initializes delay check to false
  23. start timer
  24. pop R0
  25. ret
  26. latency: push R1
  27. movl #30, R1
  28. outl timer, R1              ;Initializes traffic lights timer to 30 seconds
  29. movl #1, delay              ;Switches delay check to true
  30. start timer
  31. pop R1
  32. ret
  33. driver 0, 700h              ;Timer driver
  34. push R0
  35. inl semaf, R0
  36. cmpl #50, R0
  37. jn switch                   ;If less than 50 cars have passed, switches traffic lights colour
  38. movl #0, R0
  39. cmpl #delay, R0
  40. jnz switch                  ;If delay has already taken place, switches traffic lights colour
  41. jsr latency                 ;Delays switch by 30 seconds
  42. jmp closureB                ;Pops register without resetting timer
  43. switch: movl #0, R0
  44. outl semaf, R0              ;Resets car counter
  45. outl #colour, R0
  46. cmpl #0, R0                 ;Checks if traffic lights are red
  47. jz gogreen                  ;If so, switches to green
  48. movl #0, R0
  49. outl colour, R0             ;Switches traffic lights to red
  50. jmp closure
  51. gogreen: movl #1, R0
  52. outl colour, R0             ;Switches traffic lights to green
  53. closure: jsr init           ;Restarts timer
  54. closureB: pop R0
  55. rti
  56. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement