Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;.device ATTINY13
- .include "tn13def.inc"
- .def cnd = r16
- .def temp = r17
- .def temp1 = r20
- .def temp2 = r21
- .def temp3 = r26
- .def temp4 = r27
- .def cnt1 = r18
- .def cnt2 = r19
- .def t1 = r22
- .def t2 = r23
- .def t3 = r24
- .def mul1 = r5
- .def mul2 = r6
- .def mul3 = r7
- .def mul4 = r8
- .def mulv = r9
- .def per1 = r2
- .def per2 = r3
- .def per3 = r4
- .def PB = r25
- .def oldin = r0
- .def newin = r1
- rjmp RESET
- reti
- rjmp PCH
- rjmp TIMER
- reti
- reti
- reti
- reti
- reti
- reti
- usleep:
- swait:
- subi cnt1, 1
- sbci cnt2, 0
- brcc swait
- ret
- RESET:
- cli
- ldi temp, 0b00010111
- out DDRB, temp
- ldi PB, 0b00010111
- out PORTB, PB
- ldi cnt1, 0xFF
- ldi cnt2, 0x08
- rcall usleep
- ldi PB, 0b00010000
- out PORTB, PB
- ldi temp, 0b00100000
- out GIMSK, temp
- ldi temp, 0b00001000
- out PCMSK, temp
- ldi cnd, 0
- ; время протекания тока через катушку
- ldi t1, 0x08
- ldi t2, 0x00
- ldi t3, 0x00
- sts 0x60, t1
- sts 0x61, t2
- sts 0x62, t3
- ; время, пока уйдут помехи от искры.
- ; как и предыдущее, пока взято от балды
- ldi t1, 0x03
- ldi t2, 0x00
- ldi t3, 0x00
- sts 0x67, t1
- sts 0x68, t2
- sts 0x69, t3
- ldi temp, 213
- sts 0x63, temp
- ldi temp, 0b00000000
- out TCCR0A, temp
- ldi temp, 0b00000010
- out TCCR0B, temp
- ldi temp, 0b00000010
- out TIMSK0, temp
- clr per1
- clr per2
- clr per3
- sei
- STOP:
- rjmp STOP
- TIMER:
- ; считаем период
- ldi temp, 1
- add per1, temp
- ldi temp, 0
- adc per2, temp
- adc per3, temp
- ; отсчет таймера
- subi t1, 1
- sbci t2, 0
- sbci t3, 0
- brcc NOT_NOW
- bst cnd, 1
- brts _1
- bst cnd, 0
- brtc c0
- rjmp c1
- _1:
- bst cnd, 0
- brtc c2
- rjmp c3
- c0:
- ori cnd, 0b10000000 ;init
- rjmp C_END
- c1: ; включаем катушку
- lds t1, 0x60
- lds t2, 0x61
- lds t3, 0x62
- andi PB, 0b11101111
- ldi temp, 0x00
- out TCNT0, temp
- andi cnd, 0b11111100
- ori cnd, 0b00000010
- rjmp C_END
- c2: ; выключаем катушку - возникает искра
- ori PB, 0b00010000
- ldi temp, 0x00
- out TCNT0, temp
- andi cnd, 0b11111100
- ori cnd, 0b00000011
- lds t1, 0x67
- lds t2, 0x68
- lds t3, 0x69
- rjmp C_END
- c3: ; ждем, пока уйдут помехи от искры
- andi cnd, 0b11111100
- ldi t1, 0xFF
- ldi t2, 0xFF
- ldi t3, 0xFF
- rjmp C_END
- C_END:
- out PORTB, PB
- NOT_NOW:
- reti
- PCH:
- cli
- ;bst cnd, 7
- ;brtc NO
- mov oldin, newin
- in newin, PINB
- bst newin, 3
- brtc NO
- bst oldin, 3
- brts NO
- ;----------------------
- bst cnd, 1
- brts P_END
- ; разомкнулся ФД - НМТ
- ldi temp, 0x00
- out TCNT0, temp
- mov temp1, per1
- mov temp2, per2
- mov temp3, per3
- lds t1, 0x64
- lds t2, 0x65
- lds t3, 0x66
- add t1, temp1
- add t2, temp2
- add t3, temp3
- lsr t3
- ror t2
- ror t1
- sts 0x64, t1
- sts 0x65, t2
- sts 0x66, t3
- ; полпериода до ВМТ
- lsr t3
- ror t2
- ror t1
- ; теперь умножим на угол до искры и вычтем время работы искры
- ; но на самом деле пока забьем на это, и выставим
- ; фиксированное время.
- ldi t1, 0x00
- ldi t2, 0x02
- ldi t3, 0x00
- lds temp1, 0x60
- lds temp2, 0x61
- lds temp3, 0x62
- sub t1, temp1
- sbc t2, temp2
- sbc t3, temp3
- ; теперь в t3:t2:t1 время до открытия катушки
- andi cnd, 0b11111100
- ori cnd, 0b00000001 ;переходим в состояние 1
- P_END:
- clr per1 ; сбрасываем счетчик периода обращения
- clr per2
- clr per3
- ;----------------------
- NO:
- ldi cnt1, 0xFF ; дребезг - это плохо
- ldi cnt2, 0x01
- rcall usleep
- sei
- reti
Advertisement
Add Comment
Please, Sign In to add comment