Advertisement
Chain_L

Untitled

Apr 4th, 2022
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;------------------------------------------------------------------------------
  2. LEDS        EQU P1          ; diody LED na P1 (0=ON)
  3. ;------------------------------------------------------------------------------
  4. TIME_MS     EQU 50          ; czas w [ms]
  5. CYCLES      EQU (1000 * TIME_MS)    ; czas w cyklach (f = 12 MHz)
  6. LOAD        EQU (65536 - CYCLES)    ; wartosc ladowana do TH0|TL0
  7. ;------------------------------------------------------------------------------
  8. CNT_50      EQU 30h         ; licznik w ramach sekundy
  9. SEC     EQU 31h         ; sekundy
  10. MIN     EQU 32h         ; minuty
  11. HOUR        EQU 33h         ; godziny
  12. ;------------------------------------------------------------------------------
  13. RIGHT       EQU 0           ; kierunek przesuwania LED
  14. ;------------------------------------------------------------------------------
  15.  
  16. ORG 0
  17.  
  18.     ;lcall  init_time       ; inicjowanie czasu
  19. time_loop:
  20.     lcall   delay_50ms      ; opoznienie 50 ms
  21.    
  22.     lcall   update_time     ; aktualizacja czasu
  23.     jnc time_loop       ; nie bylo zmiany sekund
  24.                     ; tutaj zmiana sekund
  25.     sjmp    time_loop
  26.  
  27. leds_loop:
  28.     mov R7, #10         ; opoznienie 500 ms
  29.     lcall   delay_nx50ms
  30.     lcall   leds_change_1       ; zmiana stanu diod
  31.     sjmp    leds_loop
  32.  
  33. ;---------------------------------------------------------------------
  34. ; Opoznienie 50 ms (zegar 12 MHz)
  35. ;---------------------------------------------------------------------
  36. delay_50ms:                     ; 2     lcall
  37.     mov     R5, #515            ; 1     515 * 97 = 49955
  38. delay_0_097ms:                  ;      
  39.     mov     R6, #47             ; 1    
  40.     djnz    R6, $               ; 2     2 * 47 = 94
  41.     djnz    R5, delay_0_097ms   ; 2     1 + 94 + 2 = 97
  42. fill:
  43.     mov     R4, #19             ; 1
  44.     djnz    R4, $               ; 2     2 * 19 = 38
  45.     nop                         ; 1
  46.     ret                         ; 2     2 + 1 + 49955 + 1 + 38 + 1 + 2 = 50000
  47.  
  48. ;---------------------------------------------------------------------
  49. ; Opoznienie n * 50 ms (zegar 12 MHz)
  50. ; R7 - czas x 50 ms
  51. ;---------------------------------------------------------------------
  52. delay_nx50ms:                       ; 2 - lcall
  53.     mov     A, R7                   ; 1
  54.     jz      finish                  ; 2
  55.     cjne    A, #1, lcall_delay_50ms ; 2
  56. raz:
  57.     lcall   delay_50ms
  58.     ret
  59. lcall_delay_50ms:
  60.     lcall delay_50ms
  61.     djnz    R7, lcall_delay_50ms
  62.  
  63.    
  64. finish:
  65.     ret
  66.  
  67. ;---------------------------------------------------------------------
  68. ; Opoznienie 50 ms z uzyciem Timera 0 (zegar 12 MHz)
  69. ;---------------------------------------------------------------------
  70. delay_timer_50ms:                   ;
  71.     clr     TR0                     ;
  72.     anl     TMOD, #11110000b        ;
  73.     orl     TMOD, #00000001b        ; 2     ustawienie konfiguracji timera 0
  74.     mov     TL0, #LOW(LOAD)         ; 2     wpisz odpowiednie wartosci do rejestrow licznika
  75.     mov     TH0, #HIGH(LOAD)        ; 2
  76.     clr     TF0                     ; 1     wyzeruj flage przepelnienia
  77.     setb    TR0                     ; 1     wlacz timer
  78.     mov     R6, #16                 ; 2 + 1 + 2 + 2 + 2 + 2 + 1 + 1 = 13
  79. dodaj: 
  80.     inc     TL0                     ; zwiekszenie wartosci licznika tak, zeby uwzglednial
  81.     djnz    R6, dodaj               ; rozkazy wykonane przed wlaczeniem timera
  82.     jnb     TF0, $                  ; 2     oczekiwanie na ustawienie flagi przepelnienia
  83.     ret        
  84.  
  85. ;---------------------------------------------------------------------
  86. ; Inicjowanie czasu w zmiennych: HOUR, MIN, SEC, SEC_100
  87. ;---------------------------------------------------------------------
  88. init_time:
  89.     mov     CNT_50, #49
  90.     mov     SEC, #59
  91.     mov     MIN, #59
  92.     mov     HOUR, #23
  93.    
  94.     ret
  95.  
  96. ;---------------------------------------------------------------------
  97. ; Aktualizacja czasu w postaci (HOUR : MIN : SEC) | CNT_50
  98. ; Przy wywolywaniu procedury co 50 ms
  99. ; wykonywana jest aktualizacja czasu rzeczywistego
  100. ;
  101. ; Wyjscie: CY - sygnalizacja zmiany sekund (0 - nie, 1 - tak)
  102. ;---------------------------------------------------------------------
  103. update_time:
  104.     clr     F0                  ;wyzerowanie flagi F0
  105.     inc     CNT_50              ;sprawdzanie czy CNT_50 jest mniejsze niz 50
  106.     mov     A, CNT_50
  107.     cjne    A, #50, koniec1
  108.     mov     CNT_50, #0
  109.     setb    F0
  110.    
  111.     inc     SEC                 ;sprawdzanie czy SEC jest mniejsze niz 60
  112.     mov     A, SEC
  113.     cjne    A, #60, koniec1
  114.     mov     SEC, #0
  115.  
  116.     inc     MIN                 ;sprawdzanie czy MIN jest mniejsze niz 60
  117.     mov     A, MIN
  118.     cjne    A, #60, koniec1
  119.     mov     MIN, #0
  120.    
  121.     inc     HOUR                ;sprawdzanie czy HOUR jest mniejsze niz 24
  122.     mov     A, HOUR
  123.     cjne    A, #24, koniec1
  124.     mov     HOUR, #0
  125.  
  126. koniec1:
  127.     mov     C, F0
  128.     ret
  129.  
  130. ;---------------------------------------------------------------------
  131. ; Zmiana stanu LEDS - dioda wedrujaca w obu kierunkach
  132. ;---------------------------------------------------------------------
  133. leds_change_1:
  134.  
  135.     ret
  136.  
  137. ;---------------------------------------------------------------------
  138. ; Zmiana stanu LEDS - narastajacy pasek od lewej
  139. ;---------------------------------------------------------------------
  140. leds_change_2:
  141.  
  142.     ret
  143.  
  144. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement