Advertisement
Guest User

Untitled

a guest
Jun 18th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.40 KB | None | 0 0
  1. ; liczy od 0 do 99.9 i się zeruje
  2. FLAGA EQU 20H
  3. CZAS EQU 21H
  4. JEDNOSCI EQU 22H
  5. DZIESIETNE_SEKUDNY EQU 23H
  6. DZIESIATKI EQU 24H
  7. SETNE_SEKUDNY EQU 25H
  8. TYSIECZNE_SEKUDNY EQU 26H
  9.  
  10. LJMP START
  11. ORG 03H ;EXT0 obsługa external 0
  12. RETI ; zabezpieczenie przed śmieciami
  13. ORG 0BH ; timer0
  14. LJMP STOPER
  15. ORG 13H ; ext1
  16. RETI
  17. ORG 1BH ; timer1
  18. RETI
  19. ORG 23H ; serial
  20. RETI
  21. ORG 100H
  22. START:
  23. LCALL LCD_INIT ; WSYZSTKIE PRZERWANIA PRZY OKAZJI SIE ZERUJA
  24. MOV FLAGA, #0
  25. MOV CZAS, #0
  26. MOV JEDNOSCI, #0
  27. MOV DZIESIATKI, #0
  28. MOV DZIESIETNE_SEKUDNY, #0
  29.  
  30. LCALL WYPISANIE
  31.  
  32. MOV TMOD, #21H ; ustawienie dla obu liczników trybu pracy 1
  33. MOV TH0, #256-136 ; 10 ms
  34. MOV TL0, #0 ; Pomiedzy TH0-TL0 (220) impulsami jest około 10 ms
  35. MOV TH1, #256-192 ; 300Bd
  36. MOV TL1, #256-192 ;
  37. SETB TR0
  38. SETB ET0
  39. SETB EA
  40. OBROT:
  41. LCALL WAIT_KEY ; zwraca numer klawisza przekonfertowany na od 0-15
  42. CJNE A, #15, OBROT ; DOPUKI NIE NACISNE ENTER TO SKACZ DO OBROT
  43. XRL FLAGA, #1 ; lub CPL FLAGA.0
  44. SJMP OBROT
  45.  
  46. STOPER: ; OBSLUGA PRZERWANIA
  47. MOV TH0, #256-36 ; CZESCI DOLNEJ (TL0) NIE RUSZAMY !
  48. PUSH PSW ; PRZERWANIE NIE MOZE NICZEGO ZNISZCZYC
  49. PUSH ACC ; -||- INNE PUSHE
  50. PUSH 0 ; PUSH AKTYWNEGO BANKU (TU R0), BEDZIE NA EGZAMINIE
  51. MOV A, FLAGA
  52. JZ POSTOJ
  53.  
  54. ;MOV A, CZAS
  55. ;ADD A, #1 ; NIE INC (inc NIE ustawia flag w tym przeniesienia polowkowego)
  56. ;DA A ; KOREKTA BCD, ZAMIENIA LICZENIE Z HEX NA DZIESIETNY, CZYLI PO 09 BEDZIE 10 A NIE 0A
  57. ;MOV CZAS,A
  58. ;LCALL WRITE_HEX
  59. LCALL WYPISANIE
  60. INC TYSIECZNE_SEKUDNY
  61.  
  62. MOV A, #10
  63. CLR C
  64. SUBB A, TYSIECZNE_SEKUDNY
  65. ;JZ ZWIEKSZ_JEDNOSCI
  66. JZ ZWIEKSZ_SETNE
  67.  
  68. ZWIEKSZ_SETNE:
  69. MOV TYSIECZNE_SEKUDNY, #0
  70. INC SETNE_SEKUDNY
  71. MOV A, #10
  72. CLR C
  73. SUBB A, SETNE_SEKUDNY
  74. JZ ZWIEKSZ_DZIESIETNE
  75.  
  76.  
  77. POSTOJ5:
  78. POP 0 ; I INNE POP
  79. POP ACC
  80. POP PSW
  81. RETI
  82.  
  83. ZWIEKSZ_DZIESIETNE:
  84. MOV SETNE_SEKUDNY, #0
  85. INC DZIESIETNE_SEKUDNY
  86. MOV A, #10
  87. CLR C
  88. SUBB A, DZIESIETNE_SEKUDNY
  89. JZ ZWIEKSZ_JEDNOSCI
  90.  
  91.  
  92. POSTOJ:
  93. POP 0 ; I INNE POP
  94. POP ACC
  95. POP PSW
  96. RETI
  97.  
  98. ZWIEKSZ_JEDNOSCI:
  99. MOV DZIESIETNE_SEKUDNY, #0
  100. INC JEDNOSCI
  101. MOV A, #10
  102. CLR C
  103. SUBB A, JEDNOSCI
  104. JZ ZWIEKSZ_DZIESIATKI
  105.  
  106.  
  107. POSTOJ3:
  108. POP 0 ; I INNE POP
  109. POP ACC
  110. POP PSW
  111. RETI
  112.  
  113. ZWIEKSZ_DZIESIATKI:
  114. MOV JEDNOSCI, #0
  115. INC DZIESIATKI
  116. MOV A, #10
  117. CLR C
  118. SUBB A, DZIESIATKI
  119. JZ ZEROJ_WSZYSTKO
  120.  
  121.  
  122. POSTOJ1:
  123. POP 0 ; I INNE POP
  124. POP ACC
  125. POP PSW
  126. RETI
  127.  
  128. ZEROJ_WSZYSTKO:
  129. MOV DZIESIATKI, #0
  130. MOV JEDNOSCI, #0
  131. MOV DZIESIETNE_SEKUDNY, #0
  132.  
  133. POSTOJ2:
  134. POP 0 ; I INNE POP
  135. POP ACC
  136. POP PSW
  137. RETI
  138.  
  139. WYPISANIE:
  140. LCALL LCD_CLR
  141. MOV A, #0 ; USTAW_KURSOR NA 2 MIEJSCE OD LEWEJ
  142. LCALL USTAW_KURSOR
  143.  
  144. MOV DPTR, #LICZBY ; PODAJ LICZBY DO DPTR
  145. MOV A, DZIESIATKI
  146. MOVC A, @A+DPTR
  147. LCALL PISZ_ZNAK ; WYPISZ 0
  148.  
  149. MOV A, JEDNOSCI
  150. MOVC A, @A+DPTR
  151. LCALL PISZ_ZNAK
  152.  
  153. MOV A, #1
  154. MOV DPTR, #KROPKA ; PODAJ LICZBY DO DPTR
  155. LCALL PISZ_TEKST
  156.  
  157. MOV DPTR, #LICZBY ; PODAJ LICZBY DO DPTR
  158. MOV A, DZIESIETNE_SEKUDNY
  159. MOVC A, @A+DPTR
  160. LCALL PISZ_ZNAK ; WYPISZ 0
  161. RETI
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179. LCD_GOTOWY:
  180. PUSH PSW
  181. PUSH ACC
  182. PUSH DPL
  183. PUSH DPH
  184. MOV DPTR,#LCDRC+0FF00H
  185. ODCZEKAJ:
  186. MOVX A,@DPTR
  187. JB ACC.7, ODCZEKAJ; Jezeli bit ACC.7 == 1, gotowy
  188. POP DPH
  189. POP DPL
  190. POP ACC
  191. POP PSW
  192. RET
  193.  
  194. ;PISZ ROZKAZ DO LCD (WE:A)
  195. PISZ_ROZKAZ:
  196. LCALL LCD_GOTOWY
  197. PUSH PSW
  198. PUSH ACC
  199. PUSH DPL
  200. PUSH DPH
  201. MOV DPTR, #LCDWC + 0FF00H ; wpis rozkazów
  202. MOVX @DPTR, A;kopiuj dane do pamieci zewnetrznej
  203. POP DPH
  204. POP DPL
  205. POP ACC
  206. POP PSW
  207. RET
  208.  
  209. ;PISZ ZNAK (WE:A ASCII)
  210. PISZ_ZNAK:
  211. LCALL LCD_GOTOWY
  212. PUSH PSW
  213. PUSH ACC
  214. PUSH DPL
  215. PUSH DPH
  216. MOV DPTR, #LCDWD+0FF00H
  217. MOVX @DPTR, A
  218. POP DPH
  219. POP DPL
  220. POP ACC
  221. POP PSW
  222. RET
  223.  
  224. ;czytaj znak (wy:a)
  225. CZYT_ZNAK:
  226. LCALL LCD_GOTOWY
  227. PUSH PSW
  228. PUSH DPL
  229. PUSH DPH
  230. MOV DPTR, #LCDRD + 0FF00H
  231. MOVX A,@DPTR
  232. POP DPH
  233. POP DPL
  234. POP PSW
  235. RET
  236.  
  237. ;ustaw kursor (we:A)
  238. USTAW_KURSOR:
  239. LCALL LCD_GOTOWY
  240. PUSH PSW
  241. PUSH ACC
  242. PUSH DPL
  243. PUSH DPH
  244. ORL A,#80H
  245. MOV DPTR, #LCDWC + 0FF00H
  246. MOVX @DPTR, A
  247. POP DPH
  248. POP DPL
  249. POP ACC
  250. POP PSW
  251. RET
  252.  
  253. ;znajdz kursor (wy:A)
  254. ZNAJDZ_KURSOR:
  255. LCALL LCD_GOTOWY
  256. PUSH PSW
  257. PUSH DPL
  258. PUSH DPH
  259. MOV DPTR, #LCDRC+0FF00H
  260. MOVX A,@DPTR
  261. POP DPH
  262. POP DPL
  263. POP PSW
  264. RET
  265.  
  266. ;pisz tekst
  267. ;we: DPTR (tekst w ROM), A - ile znakow
  268. ;wy:A - ile faktycznie znakow
  269. PISZ_TEKST:
  270. JZ WYKONANE; skok gdy A=0
  271. PUSH PSW
  272. PUSH B
  273. MOV B, A
  274. CLR A ; zeruj akumulator
  275. PUSH ACC; a potem go zapamietej ? mamy pamiętać pusty ?
  276.  
  277. POWTARZAJ:
  278. POP ACC; czyli mamy tu pusty
  279. PUSH ACC
  280. MOVC A, @A+DPTR
  281. JZ TERMINATOR
  282. LCALL PISZ_ZNAK
  283. POP ACC
  284. INC A
  285. PUSH ACC
  286. DJNZ B, POWTARZAJ; skok gdy B!=0, skoro B jest nie używane to po co to ?
  287.  
  288. TERMINATOR:
  289. POP ACC
  290. POP B
  291. POP PSW
  292.  
  293. WYKONANE:
  294. RET
  295.  
  296. GAZETA:
  297. DB 'To jest wiadomosc'
  298. DB 'Nowe dane'
  299.  
  300. ;czytanie klawiatury
  301. ;wy A - statust klawiszy 0-7, B -status klawiszy 8-F
  302. CZYT_KLAWISZ:
  303. PUSH PSW
  304. MOV A,R0
  305. PUSH ACC
  306. MOV A, R1
  307. PUSH ACC
  308.  
  309. ;A - BAJT
  310. PISZ_BIN:
  311. PUSH PSW
  312. PUSH ACC
  313. PUSH B
  314. PUSH ACC
  315. MOV B,#8
  316. DALSZE:
  317. POP ACC
  318. RL A
  319. PUSH ACC
  320. ANL A,#1
  321. ADD A,#30H
  322. LCALL PISZ_ZNAK
  323. DJNZ B, DALSZE
  324. POP ACC
  325. POP B
  326. POP ACC
  327. POP PSW
  328. RET
  329. ;A - BAJT
  330. PISZ_HEX:
  331. PUSH PSW
  332. PUSH ACC
  333. PUSH B
  334. MOV B,A
  335. SWAP A; ZAMIANA TETRAD
  336. ANL A,0FH
  337. ADD A,#30H
  338. CJNE A, #39H + 1, ZAKR_1
  339. ZAKR_1:
  340. JC PISZ_1
  341. ADD A,#41H -30H -10
  342. PISZ_1:
  343. LCALL PISZ_ZNAK
  344. MOV A, B
  345. ANL A, #0FH
  346. ADD A, #30H
  347. CJNE A, #39H + 1, ZAKR_2
  348. ZAKR_2:
  349. JC PISZ_2
  350. ADD A, #41H - 30H -10
  351. PISZ_2:
  352. LCALL PISZ_ZNAK
  353. POP B
  354. POP ACC
  355. POP PSW
  356. RET
  357.  
  358. ;A - BAJT
  359. PUSH_DEC:
  360. PUSH PSW
  361. PUSH ACC
  362. PUSH B
  363. MOV B, #10
  364. DIV AB
  365. PUSH B
  366. MOV B, #10
  367. DIV AB
  368. PUSH B
  369. MOV B, #10
  370. DIV AB
  371. PUSH B
  372. POP ACC
  373. ADD A, #30H
  374. LCALL PISZ_ZNAK
  375. POP ACC
  376. ADD A, #30H
  377. LCALL PISZ_ZNAK
  378. POP ACC
  379. ADD A, #30H
  380. LCALL PISZ_ZNAK
  381. POP B
  382. POP ACC
  383. POP PSW
  384. RET
  385.  
  386.  
  387.  
  388. KROPKA:
  389. DB '.',0
  390. LICZBY:
  391. DB '0123456789',0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement