Guest User

Untitled

a guest
Jun 23rd, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.16 KB | None | 0 0
  1. ; -------------------------------------------------------------------------------------------
  2. ; Szymon Witamborski
  3. ; Program wyswietla 000009 na wyswietlaczu segmentowym
  4. ; -------------------------------------------------------------------------------------------
  5.  
  6. ; Stale, dla obslugi wysietlacza
  7. ; ------------------------------
  8. DZIEWIEC EQU 01101111B ; wyswietli 9
  9. ZERO EQU 00111111B ; wyswietli 0
  10.  
  11. ; Stale, dla Timera
  12. ; -----------------
  13. T0_G EQU 0 ; GATE: do startu potrzeba tylko TR0=1
  14. T0_C EQU 0 ; C/T: liczymy z zegara
  15. T0_M EQU 1 ; MODE: tryb 16-bitowy
  16.  
  17. TMOD_SET EQU T0_M+T0_C*4+T0_G*8 ; Wszystkie parametry dla Timera 0
  18.  
  19. T0_VAR EQU 65536-922 ; ok. 1ms
  20. TH0_SET EQU T0_VAR/256 ; starsze bity dla TH0
  21. TL0_SET EQU T0_VAR%256 ; mlodsze bity dla TL0
  22.  
  23. LICZNIK EQU 40
  24. LICZ5 EQU 41
  25.  
  26. DANE EQU 42
  27. CYFRY EQU 48
  28.  
  29. LICZ200 EQU 59
  30.  
  31. SEKUNDY EQU 60
  32. MINUTY EQU 61
  33. GODZINY EQU 62
  34. STOS EQU 63
  35.  
  36.  
  37. BYLO5 EQU 0
  38. BYLO1 EQU 1
  39. BYLO200 EQU 2
  40.  
  41. BYLAMINUTA EQU 3
  42. BYLAGODZINA EQU 4
  43.  
  44. ; Koniec danych
  45. ; -------------
  46.  
  47.  
  48. ; Skok do poczatku programu
  49. ; -------------------------
  50. LJMP START
  51.  
  52. ; Przerwanie Timera 0
  53. ; -------------------
  54. ORG 0BH
  55. ORL TL0,#TL0_SET ; mlodsze bity
  56. MOV TH0,#TH0_SET ; starsze bity
  57. SETB BYLO1
  58. RETI
  59.  
  60.  
  61. ; Reszta programow
  62. ; ----------------
  63. ORG 100H
  64.  
  65.  
  66.  
  67. ; ###################################################################################
  68. ; ################ S T A R T P R O G R A M U ###################
  69. ; ###################################################################################
  70.  
  71. START:
  72.  
  73. ; Ustawienie Timera 0
  74. ; -------------------
  75. MOV TMOD,#TMOD_SET ; TMOD
  76. MOV TH0,#TH0_SET ; starsze bity
  77. MOV TL0,#TL0_SET ; mlodsze bity
  78.  
  79.  
  80. MOV LICZNIK,#0
  81. CLR BYLO5
  82. CLR BYLO1
  83. MOV LICZ5,#0
  84. MOV LICZ200,#0
  85.  
  86. MOV SEKUNDY,#0
  87. MOV MINUTY,#0
  88. MOV GODZINY,#0
  89.  
  90. MOV CYFRY, #00111111B ; zero
  91. MOV CYFRY+1,#00000110B ; jeden
  92. MOV CYFRY+2,#01011011B ; dwa
  93. MOV CYFRY+3,#01001111B ; trzy
  94. MOV CYFRY+4,#01100110B ; cztery
  95. MOV CYFRY+5,#01101101B ; piec
  96. MOV CYFRY+6,#01111101B ; szesc
  97. MOV CYFRY+7,#00000111B ; siedem
  98. MOV CYFRY+8,#01111111B ; osiem
  99. MOV CYFRY+9,#01101111B ; dziewiec
  100.  
  101. MOV DANE,CYFRY
  102. MOV DANE+1,CYFRY
  103. MOV DANE+2,CYFRY
  104. MOV DANE+3,CYFRY
  105. MOV DANE+4,CYFRY
  106. MOV DANE+5,CYFRY
  107.  
  108. ; Ustawienie przerwan
  109. ; -------------------
  110. SETB ET0 ; Przerwanie Timera 0
  111. SETB EA ; Przerwania w ogole
  112.  
  113. SETB TR0 ; start Timera 0
  114.  
  115.  
  116. PETLA:
  117. ; Zdarzenie 1ms
  118. ; -------------
  119. JNB BYLO1,PTL10
  120. CLR BYLO1
  121.  
  122. LCALL WYSWIETL
  123.  
  124. ; Wywoluje zdarzenie 5ms
  125. ; ----------------------
  126. INC LICZ5
  127. MOV A,LICZ5
  128. CJNE A,#5,PTL10
  129. SETB BYLO5
  130. MOV LICZ5,#0
  131.  
  132. PTL10:
  133. ; Zdarzenie 5ms
  134. ; -------------
  135. JNB BYLO5,PTL15
  136. CLR BYLO5
  137. INC LICZ200
  138.  
  139. ; Wywoluje zdarzenie 5*200ms
  140. ; --------------------------
  141. MOV A,LICZ200
  142. CJNE A,#50,PTL15
  143. MOV LICZ200,#0
  144. SETB BYLO200
  145.  
  146. PTL15:
  147. ; Zdarzenie 5*200ms
  148. ; -----------------
  149. JNB BYLO200,PTL100
  150. CLR BYLO200
  151. CPL P1.7
  152.  
  153. INC SEKUNDY
  154. MOV A,SEKUNDY
  155. CJNE A,#60,PTL20
  156.  
  157. ; Wywoluje zdarzenie minuty
  158. ; -------------------------
  159. SETB BYLAMINUTA
  160. MOV SEKUNDY,#0
  161. PTL20:
  162. MOV R2,SEKUNDY
  163. MOV R1,#0
  164. LCALL ZMIEN_CYFRE
  165.  
  166.  
  167. PTL100:
  168.  
  169. LJMP PETLA
  170.  
  171.  
  172. ; Procedury
  173. ; ---------
  174.  
  175. ; Zmiana cyfry
  176. ; Potrzebuje:
  177. ; R2: liczba
  178. ; R1: offset segmentu wyswietlacza
  179. ; --------------------------------
  180.  
  181. ZMIEN_CYFRE:
  182. MOV A,R1 ; skopiuj offset segmentu wyswietlacza
  183. ADD A,#DANE ; dodaj adres danych wyswietlacza, A = &DANE + offset
  184. MOV R1,A ; W R1 siedzi teraz adres danej dla segmentu
  185.  
  186. MOV A,R2 ; pobieramy cyfre
  187. DA A ; zmieniamy na BCD, w 4 mlodszych bitach sa jednosci
  188. ; w 4 starszych dziesiatki
  189. ANL A,#00001111B ; wyciagamy jednosci
  190.  
  191. ADD A,#CYFRY ; dodajemy adres tablicy cyfry, wiec A teraz wskazuje na kod
  192. ; odpowiedniej cyfry
  193. MOV R0,A ; potrzebne do adresowania posredniego, do R0 kopiujemy wart. A
  194. MOV A,@R0 ; zeby potem do A trafilo to co jest pod adresem (kod danej cyfry)
  195. MOV @R1,A ; kopiujemy wartosc z A (kod cyfry) do tego co pod adresem w R1
  196. ; (adres danej segmentu)
  197.  
  198. ; Dziesiatki
  199. ; ----------
  200. INC R1 ; zwiekszamy adres w R1, czyli adres nast. segmentu
  201.  
  202. MOV A,R2 ; pobieramy znowu cyfre
  203. DA A ; -> BCD
  204. SWAP A ; zamiana 4 bitow starszych z mlodszymi, teraz w 4 mlodszych
  205. ; sa dziesiatki
  206. ANL A,#00001111B ; wyciagamy dziesiatki
  207.  
  208. ADD A,#CYFRY ; j/w
  209. MOV R0,A
  210. MOV A,@R0
  211. MOV @R1,A
  212.  
  213. RET
  214.  
  215. WYSWIETL:
  216. SETB P1.6 ; zgaszenie wyswietlacza
  217.  
  218. MOV DPTR,#SEGMENTY
  219. MOV A,LICZNIK
  220. MOVC A,@A+DPTR
  221. MOV DPTR,#0FF30H
  222. MOVX @DPTR,A
  223.  
  224. MOV A,#DANE
  225. ADD A,LICZNIK
  226. MOV R0,A
  227. MOV A,@R0
  228. MOV DPTR,#0FF38H
  229. MOVX @DPTR,A
  230.  
  231. INC LICZNIK
  232. MOV A,LICZNIK
  233. CJNE A,#6,WYS_KONIEC
  234.  
  235. MOV LICZNIK,#0
  236.  
  237.  
  238. WYS_KONIEC:
  239. CLR P1.6 ; wlaczenie wyswietlacza
  240. RET
  241.  
  242.  
  243.  
  244.  
  245.  
  246. ; Wskazniki do wyboru wyswietlacza
  247. ; --------------------------------
  248. SEGMENTY:
  249. DB 00000001B
  250. DB 00000010B
  251. DB 00000100B
  252. DB 00001000B
  253. DB 00010000B
  254. DB 00100000B
  255. DB 01000000B
  256. DB 10000000B
Add Comment
Please, Sign In to add comment