Advertisement
Guest User

Untitled

a guest
Dec 7th, 2012
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.14 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, 0x04
  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, 255
  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, 2
  132. brts _1xx
  133.  
  134. _0xx:
  135. bst cnd, 1
  136. brts _01x
  137.  
  138. _00x:
  139. bst cnd, 0
  140. brtc c0
  141. rjmp c1
  142. _01x:
  143. bst cnd, 0
  144. brtc c2
  145. rjmp c3
  146.  
  147. _1xx:
  148. rjmp c4
  149.  
  150. c0:
  151. ori cnd, 0b10000000 ;init
  152. rjmp C_END
  153. c1: ;подавляем дребезг
  154.  
  155. lds t1, 0x6A
  156. lds t2, 0x6B
  157. lds t3, 0x6C
  158. andi cnd, 0b11111000
  159. ori cnd, 0b00000010
  160. rjmp C_END
  161. c2: ; включаем катушку
  162. lds t1, 0x60
  163. lds t2, 0x61
  164. lds t3, 0x62
  165.  
  166. andi PB, 0b11101111
  167.  
  168.  
  169. ldi temp, 0x00
  170. out TCNT0, temp
  171.  
  172. andi cnd, 0b11111000
  173. ori cnd, 0b00000011
  174.  
  175. rjmp C_END
  176. c3: ; выключаем катушку - возникает искра
  177. ori PB, 0b00010000
  178.  
  179. ldi temp, 0x00
  180. out TCNT0, temp
  181.  
  182. andi cnd, 0b11111000
  183. ori cnd, 0b00000100
  184. lds t1, 0x67
  185. lds t2, 0x68
  186. lds t3, 0x69
  187.  
  188. rjmp C_END
  189. c4: ; ждем, пока уйдут помехи от искры
  190. andi cnd, 0b11111000
  191. ldi t1, 0xFF
  192. ldi t2, 0xFF
  193. ldi t3, 0xFF
  194. rjmp C_END
  195. C_END:
  196. out PORTB, PB
  197.  
  198. NOT_NOW:
  199.  
  200. reti
  201.  
  202. ; temp3:temp2:temp1
  203. ; mulv
  204. ; mul4:mul3:mul2:mul1
  205. mult3:
  206.  
  207. clr mul1
  208. clr mul2
  209. clr mul3
  210. clr mul4
  211. clr temp4
  212. ldi cnt1, 8
  213. mult:
  214.  
  215. bst mulv, 0
  216. brtc NO_ADD
  217. add mul1, temp1
  218. adc mul2, temp2
  219. adc mul3, temp3
  220. adc mul4, temp4
  221. NO_ADD:
  222.  
  223. lsl temp1
  224. rol temp2
  225. rol temp3
  226. rol temp4
  227.  
  228. lsr mulv
  229. subi cnt1, 1
  230. brne mult
  231.  
  232. ret
  233.  
  234.  
  235. PCH:
  236. cli
  237. ;bst cnd, 7
  238. ;brtc NO
  239.  
  240. mov oldin, newin
  241. in newin, PINB
  242.  
  243. bst newin, 3
  244. brtc NO
  245. bst oldin, 3
  246. brts NO
  247. ;----------------------
  248. bst cnd, 2
  249. brts __1xx
  250.  
  251. __0xx:
  252. bst cnd, 1
  253. brts __01x
  254.  
  255. __00x:
  256. bst cnd, 0
  257. brtc GO
  258. rjmp NO
  259. __01x:
  260. bst cnd, 0
  261. brtc GO
  262. rjmp NO
  263.  
  264. __1xx:
  265. rjmp NO
  266.  
  267. GO:
  268.  
  269. ; разомкнулся ФД - НМТ
  270.  
  271. ldi temp, 0x00
  272. out TCNT0, temp
  273.  
  274. mov t1, per1
  275. mov t2, per2
  276. mov t3, per3
  277.  
  278. ; полпериода до ВМТ
  279.  
  280. lsr t3
  281. ror t2
  282. ror t1
  283.  
  284. ; вычтем время работы катушки
  285. lds temp1, 0x60
  286. lds temp2, 0x61
  287. lds temp3, 0x62
  288.  
  289. sub t1, temp1
  290. sbc t2, temp2
  291. sbc t3, temp3
  292. ; и время подавления дребезга
  293. lds temp1, 0x67
  294. lds temp2, 0x68
  295. lds temp3, 0x69
  296.  
  297. sub t1, temp1
  298. sbc t2, temp2
  299. sbc t3, temp3
  300. ; запишем время в память
  301.  
  302. ;ldi t1, 0x00
  303. ;ldi t2, 0x02
  304. ;ldi t3, 0x00
  305.  
  306. sts 0x6A, t1
  307. sts 0x6B, t2
  308. sts 0x6C, t3
  309.  
  310. ; гасим дерезг
  311. mov t1, temp1
  312. mov t2, temp2
  313. mov t3, temp3
  314.  
  315.  
  316. andi cnd, 0b11111000
  317. ori cnd, 0b00000001 ;переходим в состояние 1
  318.  
  319. P_END:
  320.  
  321. clr per1 ; сбрасываем счетчик периода обращения
  322. clr per2
  323. clr per3
  324.  
  325.  
  326. ;----------------------
  327. NO:
  328. sei
  329.  
  330. reti
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement