Advertisement
Guest User

Untitled

a guest
Apr 27th, 2015
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.59 KB | None | 0 0
  1. #include <P16F877A.INC> ; definicje specyficzne dla mikrokontrolera
  2. __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _LVP_OFF
  3.  
  4. UDATA
  5. l1 RES 1
  6. l2 RES 1
  7. l3 RES 1
  8. sekundy_d RES 1
  9. sekundy_j RES 1
  10. minuty_d RES 1
  11. minuty_j RES 1
  12. sekundy_d_left RES 1
  13. sekundy_j_left RES 1
  14. minuty_d_left RES 1
  15. minuty_j_left RES 1
  16. licznik RES 1
  17. temp RES 1
  18.  
  19. RST CODE 0x000 ; wektor resetu procesora
  20. pagesel main ; wybór strony pamięci programu
  21. goto main ; skok do początku programu
  22. PGM CODE
  23. main
  24. ; Inicjalizacja niezbędnych komponentów
  25. bcf STATUS, RP0 ; wybór banku 0
  26. bcf STATUS, RP1
  27. clrf PORTA ; inicjalizacja PORTA przez zerowanie zatrzasków wyjściowych
  28. bsf STATUS, RP0
  29. movlw B'00000110' ; przełączenie wejść na cyfrowe
  30. movwf ADCON1 ; poprzez odłączenie przetwornika A/C
  31. clrf TRISA ; ustawienie wyprowadzeń PORTA na wyjścia
  32. clrf TRISB ; ustawienie wyprowadzeń PORTB na wyjścia
  33. bcf STATUS, RP0
  34. ; Rozwiązanie zadania
  35. ;tutaj ustawia sie czas to co ma pokazac sie na liczniku +1
  36. movlw d'1'
  37. movwf minuty_d
  38. movlw d'1'
  39. movwf minuty_j
  40. movlw d'6'
  41. movwf sekundy_d
  42. movlw d'6'
  43. movwf sekundy_j
  44. ;tutaj ustawia sie ile czasu do konca okresu przykladowo w sekundach jest jednosci 9 sek czyli 0 sekund do konca, dodaj 1 i wpisz
  45. movlw d'1'
  46. movwf minuty_j_left
  47. movlw d'6'
  48. movwf sekundy_d_left
  49. movlw d'6'
  50. movwf sekundy_j_left
  51. start
  52. call disp
  53. decfsz sekundy_j_left, f
  54. goto sec_j_handle
  55. movlw d'10'
  56. movwf sekundy_j
  57. movlw d'10'
  58. movwf sekundy_j_left
  59. decfsz sekundy_d_left, f
  60. goto sec_d_handle
  61. movlw d'6'
  62. movwf sekundy_d
  63. movlw d'6'
  64. movwf sekundy_d_left
  65. decfsz minuty_j_left, f
  66. goto min_0_handle
  67. movlw d'1'
  68. movwf minuty_j
  69. movlw d'6'
  70. movwf sekundy_d
  71. movlw d'1'
  72. movwf sekundy_j
  73. movlw d'6'
  74. movwf sekundy_d_left
  75. movlw d'1'
  76. movwf sekundy_j_left
  77. ; jezeli usuniesz dwie instrukcje pod spodem to po doliczeniu do 0 zacznie odliczac z powrotem od 2:30 w dol
  78. movlw d'1'
  79. movwf minuty_j
  80. movlw d'1'
  81. movwf sekundy_d
  82. call disp
  83. goto $-1
  84. goto end_min_0_handle
  85. min_0_handle
  86. decf minuty_j, f
  87. end_min_0_handle
  88. goto zero_sec_d
  89. sec_d_handle
  90. decf sekundy_d, f
  91. zero_sec_d
  92. goto end_sec_j_handle
  93. sec_j_handle
  94. decf sekundy_j, f
  95. end_sec_j_handle
  96. goto start
  97. disp
  98. movlw d'50'
  99. movwf licznik
  100. cnt_delay
  101. decfsz licznik, f
  102. goto update
  103. goto finish
  104. update
  105. call refresh
  106. goto cnt_delay
  107. finish
  108. return
  109. refresh
  110. movf minuty_d, w
  111. call convert ; wywołaj procedurę konwersji
  112. movwf PORTB ; wysłanie na port PORTB
  113. movlw B'00000001' ; włączenie wyświetlacza DS1
  114. movwf PORTA
  115. call delay_20ms ; odczekaj kilka ms
  116. movf minuty_j, w
  117. call convert ; wywołaj procedurę konwersji
  118. movwf temp ;ZAPALENIE KROPKI PRZY DZIESIETNYCH MINUTY
  119. bsf temp, 7
  120. movf temp, w
  121. movwf PORTB ; wysłanie na port PORTB
  122. movlw B'00000010' ; włączenie wyświetlacza DS2
  123. movwf PORTA
  124. call delay_20ms ; odczekaj kilka ms
  125. movf sekundy_d, w
  126. call convert ; wywołaj procedurę konwersji
  127. movwf PORTB ; wysłanie na port PORTB
  128. movlw B'00000100' ; włączenie wyświetlacza DS3
  129. movwf PORTA
  130. call delay_20ms ; odczekaj kilka ms
  131. movf sekundy_j, w
  132. call convert ; wywołaj procedurę konwersji
  133. movwf PORTB ; wysłanie na port PORTB
  134. movlw B'00001000' ; włączenie wyświetlacza DS4
  135. movwf PORTA
  136. call delay_20ms ; odczekaj kilka ms
  137. return
  138.  
  139. convert
  140. addwf PCL, f
  141. dt B'00000000' ; xxx
  142. dt B'00111111' ; 0
  143. dt B'00000110' ; 1
  144. dt B'01011011' ; 2
  145. dt B'01001111' ; 3
  146. dt B'01100110' ; 4
  147. dt B'01101101' ; 5
  148. dt B'01111101' ; 6
  149. dt B'00000111' ; 7
  150. dt B'01111111' ; 8
  151. dt B'01101111' ; 9
  152.  
  153. delay_20ms ;20ms
  154. movlw D'2' ; załaduj liczbę powtórzeń pętli l3
  155. movwf l3 ; do zmiennej l3
  156. l2_pocz2
  157. movlw D'20' ; załaduj liczbę powtórzeń pętli l2
  158. movwf l2 ; do zmiennej l2
  159. goto $+1
  160. goto $+1
  161. goto $+1
  162. goto $+1
  163. l1_pocz2
  164. movlw D'40' ; załaduj liczbę powtórzeń pętli l1
  165. movwf l1 ; do zmiennej l1
  166. decfsz l1, f ; zmniejsz zmienną l1
  167. goto $-1 ; wróć do poprzedniej instrukcji (decfsz)
  168. decfsz l2, f ; zmniejsz zmienną l2
  169. goto l1_pocz2 ; wróć do miejsca ładowania zmiennej l1
  170. decfsz l3, f ; zmniejsz zmienną l3
  171. goto l2_pocz2 ; wróć do miejsca ładowania zmiennej l2
  172. return
  173. END ; dyrektywa END kończy treść programu
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement