Guest User

Untitled

a guest
Dec 6th, 2012
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.67 KB | None | 0 0
  1. ;.device ATTINY13
  2. .include "tn13def.inc"
  3.  
  4. .def cnd = r16
  5. .def temp = r17
  6. .def temp1 = r20
  7. .def temp2 = r21
  8. .def temp3 = r26
  9. .def temp4 = r27
  10. .def cnt1 = r18
  11. .def cnt2 = r19
  12. .def t1 = r22
  13. .def t2 = r23
  14. .def t3 = r24
  15.  
  16. .def mul1 = r5
  17. .def mul2 = r6
  18. .def mul3 = r7
  19. .def mul4 = r8
  20. .def mulv = r9
  21.  
  22.  
  23. .def per1 = r2
  24. .def per2 = r3
  25. .def per3 = r4
  26.  
  27. .def PB = r25
  28. .def oldin = r0
  29. .def newin = r1
  30.  
  31. rjmp RESET
  32. reti
  33. rjmp PCH
  34. rjmp TIMER
  35. reti
  36. reti
  37. reti
  38. reti
  39. reti
  40. reti
  41.  
  42. usleep:
  43. swait:
  44. subi cnt1, 1
  45. sbci cnt2, 0
  46. brcc swait
  47. ret
  48.  
  49. RESET:
  50.  
  51. cli
  52.  
  53. ldi temp, 0b00010111
  54. out DDRB, temp
  55.  
  56. ldi PB, 0b00010111
  57. out PORTB, PB
  58.  
  59. ldi cnt1, 0xFF
  60. ldi cnt2, 0x08
  61. rcall usleep
  62.  
  63. ldi PB, 0b00010000
  64. out PORTB, PB
  65.  
  66.  
  67.  
  68. ldi temp, 0b00100000
  69. out GIMSK, temp
  70. ldi temp, 0b00001000
  71. out PCMSK, temp
  72.  
  73. ldi cnd, 0
  74.  
  75. ; время протекания тока через катушку
  76. ldi t1, 0x08
  77. ldi t2, 0x00
  78. ldi t3, 0x00
  79.  
  80. sts 0x60, t1
  81. sts 0x61, t2
  82. sts 0x62, t3
  83.  
  84.  
  85. ; время, пока уйдут помехи от искры.
  86. ; как и предыдущее, пока взято от балды
  87. ldi t1, 0x03
  88. ldi t2, 0x00
  89. ldi t3, 0x00
  90.  
  91. sts 0x67, t1
  92. sts 0x68, t2
  93. sts 0x69, t3
  94.  
  95. ldi temp, 213
  96. sts 0x63, temp
  97.  
  98. ldi temp, 0b00000000
  99. out TCCR0A, temp
  100. ldi temp, 0b00000010
  101. out TCCR0B, temp
  102.  
  103. ldi temp, 0b00000010
  104. out TIMSK0, temp
  105.  
  106. clr per1
  107. clr per2
  108. clr per3
  109.  
  110.  
  111. sei
  112.  
  113. STOP:
  114. rjmp STOP
  115.  
  116. TIMER:
  117.  
  118. ; считаем период
  119. ldi temp, 1
  120. add per1, temp
  121. ldi temp, 0
  122. adc per2, temp
  123. adc per3, temp
  124.  
  125. ; отсчет таймера
  126. subi t1, 1
  127. sbci t2, 0
  128. sbci t3, 0
  129. brcc NOT_NOW
  130.  
  131. bst cnd, 1
  132. brts _1
  133. bst cnd, 0
  134. brtc c0
  135. rjmp c1
  136. _1:
  137. bst cnd, 0
  138. brtc c2
  139. rjmp c3
  140.  
  141. c0:
  142. ori cnd, 0b10000000 ;init
  143. rjmp C_END
  144. c1: ; включаем катушку
  145. lds t1, 0x60
  146. lds t2, 0x61
  147. lds t3, 0x62
  148.  
  149. andi PB, 0b11101111
  150.  
  151.  
  152. ldi temp, 0x00
  153. out TCNT0, temp
  154.  
  155. andi cnd, 0b11111100
  156. ori cnd, 0b00000010
  157.  
  158. rjmp C_END
  159. c2: ; выключаем катушку - возникает искра
  160. ori PB, 0b00010000
  161.  
  162. ldi temp, 0x00
  163. out TCNT0, temp
  164.  
  165. andi cnd, 0b11111100
  166. ori cnd, 0b00000011
  167. lds t1, 0x67
  168. lds t2, 0x68
  169. lds t3, 0x69
  170.  
  171. rjmp C_END
  172. c3: ; ждем, пока уйдут помехи от искры
  173. andi cnd, 0b11111100
  174. ldi t1, 0xFF
  175. ldi t2, 0xFF
  176. ldi t3, 0xFF
  177. rjmp C_END
  178. C_END:
  179. out PORTB, PB
  180.  
  181. NOT_NOW:
  182.  
  183. reti
  184.  
  185.  
  186. PCH:
  187. cli
  188. ;bst cnd, 7
  189. ;brtc NO
  190.  
  191. mov oldin, newin
  192. in newin, PINB
  193.  
  194. bst newin, 3
  195. brtc NO
  196. bst oldin, 3
  197. brts NO
  198. ;----------------------
  199. bst cnd, 1
  200. brts P_END
  201.  
  202. ; разомкнулся ФД - НМТ
  203.  
  204. ldi temp, 0x00
  205. out TCNT0, temp
  206.  
  207. mov temp1, per1
  208. mov temp2, per2
  209. mov temp3, per3
  210.  
  211. lds t1, 0x64
  212. lds t2, 0x65
  213. lds t3, 0x66
  214.  
  215. add t1, temp1
  216. add t2, temp2
  217. add t3, temp3
  218.  
  219. lsr t3
  220. ror t2
  221. ror t1
  222.  
  223. sts 0x64, t1
  224. sts 0x65, t2
  225. sts 0x66, t3
  226.  
  227. ; полпериода до ВМТ
  228. lsr t3
  229. ror t2
  230. ror t1
  231.  
  232. ; теперь умножим на угол до искры и вычтем время работы искры
  233.  
  234. ; но на самом деле пока забьем на это, и выставим
  235. ; фиксированное время.
  236.  
  237. ldi t1, 0x00
  238. ldi t2, 0x02
  239. ldi t3, 0x00
  240.  
  241. lds temp1, 0x60
  242. lds temp2, 0x61
  243. lds temp3, 0x62
  244.  
  245. sub t1, temp1
  246. sbc t2, temp2
  247. sbc t3, temp3
  248. ; теперь в t3:t2:t1 время до открытия катушки
  249.  
  250. andi cnd, 0b11111100
  251. ori cnd, 0b00000001 ;переходим в состояние 1
  252.  
  253. P_END:
  254. clr per1 ; сбрасываем счетчик периода обращения
  255. clr per2
  256. clr per3
  257.  
  258.  
  259.  
  260. ;----------------------
  261. NO:
  262. ldi cnt1, 0xFF ; дребезг - это плохо
  263. ldi cnt2, 0x01
  264. rcall usleep
  265.  
  266. sei
  267.  
  268. reti
Advertisement
Add Comment
Please, Sign In to add comment