Advertisement
Guest User

Untitled

a guest
May 24th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.10 KB | None | 0 0
  1. CSEG AT 0
  2. JMP START
  3.  
  4. CSEG AT 0x100
  5.  
  6. RAND3:
  7. MOV A,R6
  8. MOV B,#13 ; do B wpisz 0Dh
  9. MUL AB ; mnozenie A przez B, wynik wpisywany jest do rejestrów B i A (bardziej znaczacy bajt do B, mniej znaczacy bajt do A)
  10. ADD A,#171 ; dodaj do A liczbe 0ABh
  11. MOV R6,A
  12. MOV B,#3
  13. DIV AB ; dziel A przez B, calkowita czesc do A, reszta do B
  14. RET ; powrot do miejsca wywolania podprogramu
  15.  
  16. KONIEC:
  17. CLR TR0 ;On/off timera: 1-on, 0-off
  18. MOV A,#255
  19. CPL A
  20. MOV P2,A
  21. RESTART:
  22. MOV A,#0xFF ; wartosc odpowiadajaca braku wcisniecia przycisku
  23. CJNE A,P3,START ; porownuje A ze stanem P3, jezeli ROZNE to jump do RESTART
  24. SJMP RESTART
  25.  
  26. ZWIEKSZ:
  27. CLR TR0
  28. INC R4
  29. JMP MAIN
  30.  
  31. ZMNIEJSZ:
  32. CLR TR0
  33. DEC R4
  34. JMP MAIN
  35.  
  36. START:
  37. MOV R4,#200 ; do R4 podaj domyslny czas swiecenia (podana wartosc x 1/20 s)
  38.  
  39. MAIN:
  40. LCALL RAND3 ; wywolanie "podprogramu" w celu losowania liczby 1-3
  41. MOV R1,B ; do R1 przenies wylosowana liczbe
  42. MOV A,#1
  43. LOOP1:
  44. RL A ; przesun o 1 bit w lewo, czyli 1->2, 2->4, 2->1 itd.
  45. DJNZ R1,LOOP1 ; dekrementacja R1, dopoki R1 != 0 to skok, to ustawia liczbe odpowiadajaca swieceni diodu (np. 0100000)
  46. MOV R2,A ; do R2 wrzuc ktora dioda ma sie swiecic
  47. CPL A ; zaneguj akumulator (swiecenie na niskim stanie)
  48. MOV P2,A ; ustaw diody
  49.  
  50. MOV A,R4
  51. MOV R3,A ; do R3 wrzuc domyslny czas swiecenia
  52. TIMER:
  53. MOV TH0,#0xff ; starszy bajt TIMERa0 ustawiony na 255
  54. MOV TL0,#0xfd ; mlodszy bajt TIMERa0 ustawiony na 253
  55. MOV TMOD,#01 ; 16-bitowy timer 0
  56. SETB TR0 ; startujemy timer 0
  57. CLR TF0 ; wyczyszczenie Bitu ustawianego w momencie przepelnienia na timerze 0
  58.  
  59. ; sprawdzenie, czy wcisniety przycisk odpowiadajacy diodzie
  60. MOV A,P3 ; pobierz do A ustawienie przyciskow (ustawienie typu: 1101111)
  61. MOV B,R2 ; do B wstaw ktora dioda ma sie swiecic (ustawienie typu: 0100000)
  62. CPL A ; zaneguj A, czyli ustawienie typu: 0010000
  63. ANL A,B ; wymnozenie logiczne A i B, wynik do A
  64. JNZ KONIEC ; jezeli A != 0 to skok, co odpowiada sytuacji, gdy A = B, a wiec wcisnieto przycisk odpowiadajacy diodzie
  65.  
  66. ; sprawdzenie, czy wcisniety przycisk odpowiadajacy zwiekszeniu czasu swiecenia
  67. MOV A,P3 ; pobierz do A ustawienie przyciskow (ustawienie typu: 1101111)
  68. MOV B,#10000000b
  69. CPL A ; zaneguj A, czyli ustawienie typu: 0010000
  70. ANL A,B ; wymnozenie logiczne A i B, wynik do A
  71. JNZ ZWIEKSZ ; jezeli A != 0 to skok, co odpowiada sytuacji, gdy wcisniety S7
  72.  
  73. ; sprawdzenie, czy wcisniety przycisk odpowiadajacy zmniejszniu czasu swiecenia
  74. MOV A,P3 ; pobierz do A ustawienie przyciskow (ustawienie typu: 1101111)
  75. MOV B,#01000000b
  76. CPL A ; zaneguj A, czyli ustawienie typu: 0010000
  77. ANL A,B ; wymnozenie logiczne A i B, wynik do A
  78. JNZ ZMNIEJSZ ; jezeli A != 0 to skok, co odpowiada sytuacji, gdy wcisniety S6
  79.  
  80. RET_POINT:
  81. JNB TF0,$ ; sprawdza TF0, jezeli TF0 == 0 to skok
  82. DJNZ R3,TIMER ; dekrementacja R3 i jezeli R3 != 0 to skok
  83. CLR TR0 ; On/off timera: 1-on, 0-off - CLR daje 0
  84.  
  85. JMP MAIN
  86.  
  87. END
  88.  
  89.  
  90.  
  91. ///////LAB 2
  92.  
  93. CSEG AT 0
  94. JMP 100h
  95.  
  96. CSEG AT 100h
  97. start:
  98. MOV A,P3
  99.  
  100. petla:
  101. CJNE A,P3,dioda
  102. SJMP petla
  103.  
  104. dioda:
  105. MOV R0,P3
  106. MOV A,P2
  107. XLR A,R0
  108. CPL A
  109. MOV P2, A
  110. sjmp start
  111. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement