mtask2.asm 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. $mod851
  2. state EQU 7fh
  3. tmp EQU 7eh
  4. org 0000h
  5. ljmp start
  6. org 000bh
  7. t0int: ljmp task_switch
  8. org 0060h
  9. start: clr EA
  10. mov A,TMOD
  11. anl A,#11111000b
  12. orl A,#1
  13. mov TMOD,A ; T0 mode = 1
  14. mov TL0,#0
  15. mov TH0,#0f0h
  16. mov state,#00h
  17. setb TR0 ; T0 enable
  18. setb ET0 ; T0 int enable
  19. setb EA ; enable int
  20. task1: xrl P1,#0fh
  21. mov B,#070h
  22. t1l2: mov A,#0ffh
  23. t1l1: djnz Acc,t1l1
  24. djnz B,t1l2
  25. sjmp task1
  26. task2: xrl P1,#0f0h
  27. mov B,#030h
  28. t2l2: mov A,#0ffh
  29. t2l1: djnz Acc,t2l1
  30. djnz B,t2l2
  31. sjmp task2
  32. ;========================================
  33. task_switch:
  34. push DPH
  35. push DPL
  36. push Acc
  37. mov A,state
  38. jz ts_go
  39. ljmp rev
  40. ts_go: pop Acc ; Acc
  41. mov DPTR,#t1inf
  42. movx @DPTR,A
  43. pop Acc ; DPL
  44. inc DPTR
  45. movx @DPTR,A
  46. pop Acc ; DPH
  47. inc DPTR
  48. movx @DPTR,A
  49. inc DPTR ; B
  50. mov A,B
  51. movx @DPTR,A
  52. inc DPTR ; PSW
  53. mov A,PSW
  54. movx @DPTR,A
  55. pop Acc ; PC
  56. inc DPTR
  57. movx @DPTR,A
  58. pop Acc
  59. inc DPTR
  60. movx @DPTR,A
  61. inc DPTR ; SP
  62. mov A,SP
  63. movx @DPTR,A
  64. inc DPTR ; adr: 00h
  65. mov A,R0
  66. movx @DPTR,A
  67. mov B,#6fh ; adr: 01h-6fh
  68. mov R0,#01h
  69. ts_l1: inc DPTR
  70. mov A,@R0
  71. movx @DPTR,A
  72. inc R0
  73. djnz B,ts_l1
  74. ;------------
  75. mov DPTR,#(t2inf_end-1)
  76. mov B,#6fh ; adr: 01-6f
  77. mov R0,#6fh
  78. ts_l2: movx A,@DPTR
  79. mov @R0,A
  80. dec R0
  81. lcall dec_dptr
  82. djnz B,ts_l2
  83. movx A,@DPTR
  84. mov R0,A ; adr: 00
  85. lcall dec_dptr ; SP
  86. movx A,@DPTR
  87. mov SP,A
  88. lcall dec_dptr ; PC
  89. movx A,@DPTR
  90. push Acc
  91. lcall dec_dptr
  92. movx A,@DPTR
  93. push Acc
  94. lcall dec_dptr ; PSW
  95. movx A,@DPTR
  96. mov PSW,A
  97. lcall dec_dptr ; B
  98. movx A,@DPTR
  99. mov B,A
  100. lcall dec_dptr ; DPH
  101. movx A,@DPTR
  102. push Acc
  103. lcall dec_dptr ; DPL
  104. movx A,@DPTR
  105. push Acc
  106. lcall dec_dptr ; Acc
  107. movx A,@DPTR
  108. pop DPL
  109. pop DPH
  110. mov state,#0ffh
  111. mov TL0,#0
  112. mov TH0,#0f0h
  113. reti
  114. ;-=-=-=-=-=-=-=-=-
  115. rev:
  116. pop Acc ; Acc
  117. mov DPTR,#t2inf
  118. movx @DPTR,A
  119. pop Acc ; DPL
  120. inc DPTR
  121. movx @DPTR,A
  122. pop Acc ; DPH
  123. inc DPTR
  124. movx @DPTR,A
  125. inc DPTR ; B
  126. mov A,B
  127. movx @DPTR,A
  128. inc DPTR ; PSW
  129. mov A,PSW
  130. movx @DPTR,A
  131. pop Acc ; PC
  132. inc DPTR
  133. movx @DPTR,A
  134. pop Acc
  135. inc DPTR
  136. movx @DPTR,A
  137. inc DPTR ; SP
  138. mov A,SP
  139. movx @DPTR,A
  140. inc DPTR ; adr: 00h
  141. mov A,R0
  142. movx @DPTR,A
  143. mov B,#6fh ; adr: 01h-6fh
  144. mov R0,#01h
  145. ts_l3: inc DPTR
  146. mov A,@R0
  147. movx @DPTR,A
  148. inc R0
  149. djnz B,ts_l3
  150. ;------------
  151. mov DPTR,#(t1inf_end-1)
  152. mov B,#6fh ; adr: 01-6f
  153. mov R0,#6fh
  154. ts_l4: movx A,@DPTR
  155. mov @R0,A
  156. dec R0
  157. lcall dec_dptr
  158. djnz B,ts_l4
  159. movx A,@DPTR
  160. mov R0,A ; adr: 00
  161. lcall dec_dptr ; SP
  162. movx A,@DPTR
  163. mov SP,A
  164. lcall dec_dptr ; PC
  165. movx A,@DPTR
  166. push Acc
  167. lcall dec_dptr
  168. movx A,@DPTR
  169. push Acc
  170. lcall dec_dptr ; PSW
  171. movx A,@DPTR
  172. mov PSW,A
  173. lcall dec_dptr ; B
  174. movx A,@DPTR
  175. mov B,A
  176. lcall dec_dptr ; DPH
  177. movx A,@DPTR
  178. push Acc
  179. lcall dec_dptr ; DPL
  180. movx A,@DPTR
  181. push Acc
  182. lcall dec_dptr ; Acc
  183. movx A,@DPTR
  184. pop DPL
  185. pop DPH
  186. mov state,#00h
  187. mov TL0,#0
  188. mov TH0,#0f0h
  189. reti
  190. ;========================================
  191. dec_dptr:
  192. xch A,DPL
  193. dec A
  194. cjne A,#0ffh,decdp_lab1
  195. dec DPH
  196. decdp_lab1:
  197. xch A,DPL
  198. ret
  199. ;========================================
  200. org 8000h
  201. t1inf:
  202. db 00 ; Acc
  203. db 00 ; DPL
  204. db 00 ; DPH
  205. db 00 ; B
  206. db 00 ; PSW
  207. dw 00 ; PC
  208. db 07 ; SP
  209. db 0,0,0,0,0,0,0,0 ; R0-R7 (from adress: 00h)
  210. db 0,0,0,0,0,0,0,0 ; Stack
  211. db 0,0,0,0,0,0,0,0
  212. db 0,0,0,0,0,0,0,0
  213. db 0,0,0,0,0,0,0,0
  214. db 0,0,0,0,0,0,0,0
  215. db 0,0,0,0,0,0,0,0
  216. db 0,0,0,0,0,0,0,0
  217. db 0,0,0,0,0,0,0,0
  218. db 0,0,0,0,0,0,0,0
  219. db 0,0,0,0,0,0,0,0
  220. db 0,0,0,0,0,0,0,0
  221. db 0,0,0,0,0,0,0,0
  222. db 0,0,0,0,0,0,0,0 ; (to adress: 6fh)
  223. t1inf_end:
  224. t2inf:
  225. db 00 ; Acc
  226. db 00 ; DPL
  227. db 00 ; DPH
  228. db 00 ; B
  229. db 00 ; PSW
  230. dw task2 ; PC
  231. db 07 ; SP
  232. db 0,0,0,0,0,0,0,0 ; R0-R7 (from adress: 00h)
  233. db 0,0,0,0,0,0,0,0 ; Stack
  234. db 0,0,0,0,0,0,0,0
  235. db 0,0,0,0,0,0,0,0
  236. db 0,0,0,0,0,0,0,0
  237. db 0,0,0,0,0,0,0,0
  238. db 0,0,0,0,0,0,0,0
  239. db 0,0,0,0,0,0,0,0
  240. db 0,0,0,0,0,0,0,0
  241. db 0,0,0,0,0,0,0,0
  242. db 0,0,0,0,0,0,0,0
  243. db 0,0,0,0,0,0,0,0
  244. db 0,0,0,0,0,0,0,0
  245. db 0,0,0,0,0,0,0,0 ; (to adress: 6fh)
  246. t2inf_end:
  247. END