Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.99 KB | None | 0 0
  1. WR_CMD EQU 0FF2CH
  2. WR_DATA EQU 0FF2DH
  3. RD_STATUS EQU 0FF2EH
  4. RD_DATA EQU 0FF2FH
  5. LCD_INIT EQU 038H
  6. LCD_CLEAR EQU 001H
  7. LCD_MODE EQU 1111B
  8.  
  9. TIME EQU 50
  10. LOAD EQU (65536-1000*TIME)
  11.  
  12. COUNTER EQU 30h
  13. SECONDS EQU 31h
  14. MINUTES EQU 32h
  15. HOURS EQU 33h
  16. ALARM EQU 34h
  17.  
  18. ORG 0
  19. LJMP MAIN
  20.  
  21. ORG 0BH
  22. JMP timer_interrupt
  23.  
  24. ORG 00B0H
  25. main:
  26. ;Call only once!
  27. lcall initialize
  28.  
  29. lcall delay
  30. test:
  31. lcall print_time
  32. sjmp test
  33.  
  34. ;--------------------------------------------------
  35. ; Initializes lcd
  36. ;--------------------------------------------------
  37. initialize:
  38. mov A, #LCD_INIT
  39. lcall send_command
  40. mov A, #LCD_CLEAR
  41. lcall send_command
  42. mov A, #LCD_MODE
  43. lcall send_command
  44. ret
  45.  
  46. ;--------------------------------------------------
  47. ; Checks status of lcd and waits
  48. ;--------------------------------------------------
  49. wait_until_not_busy:
  50. mov DPTR, #RD_STATUS
  51. wait:
  52. movx A, @DPTR
  53. jb ACC.7, wait
  54. ret
  55.  
  56. ;--------------------------------------------------
  57. ; A - command to execute
  58. ;--------------------------------------------------
  59. send_command:
  60. push ACC
  61. lcall wait_until_not_busy
  62. mov DPTR, #WR_CMD
  63. pop ACC
  64. movx @DPTR, A
  65. ret
  66.  
  67. ;--------------------------------------------------
  68. ; A - char to write
  69. ;--------------------------------------------------
  70. write_char:
  71. push ACC
  72. lcall wait_until_not_busy
  73. mov DPTR, #WR_DATA
  74. pop ACC
  75. movx @DPTR, A
  76. ret
  77.  
  78. ;--------------------------------------------------
  79. ; DPTR - address of string to write
  80. ;--------------------------------------------------
  81. write_string:
  82. clr A
  83. movc A, @A+DPTR
  84. jz write_string_ret
  85. push dph
  86. push dpl
  87. lcall write_char
  88. pop dpl
  89. pop dph
  90. inc dptr
  91. jmp write_string
  92.  
  93. write_string_ret:
  94. ret
  95.  
  96. ;--------------------------------------------------
  97. ; A - coordinates
  98. ; line in 4 bit
  99. ; column in 0-3 bits
  100. ;--------------------------------------------------
  101. set_position: ; x in
  102. anl A, #00011111B
  103. jnb ACC.4, jump_to_first_line
  104. clr ACC.4
  105. add A, #40H
  106.  
  107. jump_to_first_line:
  108. orl A, #10000000B
  109. lcall send_command
  110. ret
  111.  
  112. ;--------------------------------------------------
  113. ; Function that converts number
  114. ; A - number to convert
  115. ; Returns first digit in A, and second in B
  116. ;--------------------------------------------------
  117. convert:
  118. mov B, #10
  119. div AB
  120. add A, #30H
  121. push ACC
  122. push B
  123. pop ACC
  124. add A, #30H
  125. push ACC
  126. pop B
  127. pop ACC
  128. ret
  129.  
  130. ;--------------------------------------------------
  131. ; Function that setups timer to wait
  132. ; TIME miliseconds
  133. ;--------------------------------------------------
  134. delay:
  135. mov SECONDS, #0
  136. mov MINUTES, #0
  137. mov HOURS, #0
  138. lcall print_time
  139. mov COUNTER, #20
  140. mov ALARM, #5
  141. clr TR0
  142. mov TL0, #LOW(LOAD)
  143. mov TH0, #HIGH(LOAD)
  144. anl TMOD, #11110000B
  145. orl TMOD, #00000001B
  146. clr TF0
  147. setb ET0
  148. setb EA
  149. setb TR0
  150. ret
  151.  
  152. ;--------------------------------------------------
  153. ; Function that prints current time
  154. ;--------------------------------------------------
  155. print_time:
  156. mov A, #0
  157. lcall set_position
  158.  
  159. ; Print hours
  160. mov A, HOURS
  161. lcall convert
  162. push B
  163. lcall write_char
  164. pop ACC
  165. lcall write_char
  166. mov A, #':'
  167. lcall write_char
  168.  
  169. ; Print minutes
  170. mov A, MINUTES
  171. lcall convert
  172. push B
  173. lcall write_char
  174. pop ACC
  175. lcall write_char
  176. mov A, #':'
  177. lcall write_char
  178.  
  179. ; Print seconds
  180. mov A, SECONDS
  181. lcall convert
  182. push B
  183. lcall write_char
  184. pop ACC
  185. lcall write_char
  186. ret
  187.  
  188. ;--------------------------------------------------
  189. ; Function that handles alarm
  190. ;--------------------------------------------------
  191. handle_alarm:
  192. mov A, #10H
  193. lcall set_position
  194. ; Print alarm string
  195. mov DPTR, #alarm_text
  196. lcall write_string
  197. ret
  198.  
  199. ;--------------------------------------------------
  200. ; Interrupt handler
  201. ;--------------------------------------------------
  202. timer_interrupt:
  203. mov TL0, #LOW(LOAD)
  204. mov TH0, #HIGH(LOAD)
  205. push ACC
  206. push PSW
  207.  
  208. djnz COUNTER, dont_increment
  209. mov COUNTER, #20
  210.  
  211. inc SECONDS
  212. mov A, SECONDS
  213. cjne A, #60, dont_increment
  214. mov SECONDS, #0
  215.  
  216. inc MINUTES
  217. mov A, MINUTES
  218. cjne A, #60, dont_increment
  219. mov MINUTES, #0
  220.  
  221. inc HOURS
  222. mov A, HOURS
  223. cjne A, #24, dont_increment
  224. mov HOURS, #0
  225.  
  226. dont_increment:
  227. pop PSW
  228. pop ACC
  229. reti
  230.  
  231. alarm_text: DB 'ALARM!!!', 0
  232. new_sign: DB 0H, 4H, 2H, 0H, 2H, 4H, 0H, 0H
  233. END
  234.  
  235.  
  236.  
  237. /*
  238. ;--------------------------------------------------
  239. ; DPTR - address of sign to write
  240. ; A - where to write sign
  241. ; address is in lower 6 bits
  242. ;--------------------------------------------------
  243. write_own_sign:
  244. push ACC
  245. lcall read_address
  246. pop R0
  247. push ACC ;save DDRAM adress
  248. push R0
  249. pop ACC
  250. lcall set_cgram_address
  251. mov R0, #8
  252. write_own_sign_loop:
  253. clr A
  254. movc A, @A+DPTR
  255. push dph
  256. push dpl
  257. lcall write_char
  258. pop dpl
  259. pop dph
  260. inc dptr
  261. djnz R0, write_own_sign_loop
  262.  
  263. pop ACC ;restore DDRAM adress
  264. lcall set_ddram_address
  265. ret
  266.  
  267. ;--------------------------------------------------
  268. ; Sets CGRAM address
  269. ; A contains address on 6 lower bits
  270. ;--------------------------------------------------
  271. set_cgram_address:
  272. anl A, #00111111B
  273. orl A, #01000000B
  274. lcall send_command
  275. ret
  276.  
  277. ;--------------------------------------------------
  278. ; Sets DDRAM address
  279. ; A contains address on 7 lower bits
  280. ;--------------------------------------------------
  281. set_ddram_address:
  282. anl A, #01111111B
  283. orl A, #10000000B
  284. lcall send_command
  285. ret
  286.  
  287. ;--------------------------------------------------
  288. ; Reads current address
  289. ; Returns it in A
  290. ;--------------------------------------------------
  291. read_address:
  292. mov DPTR, #RD_STATUS
  293. movx A, @DPTR
  294. anl A, #01111111B
  295. ret
  296. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement