ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ². ΠΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ: AVR ATMega. Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π·Π°Π΄Π°ΡΠ° ΡΡΡΡΠΎΠΉΡΡΠ²Π°: Π‘ΠΎΠ·Π΄Π°ΡΡ Π±Π»ΠΎΠΊ ΡΡ
Π΅ΠΌΡ ΠΏΠΎ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΈΠ· ΠΌΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° .include “m32def.inc“ .cseg .org 0 ;Π’Π°Π±Π»ΠΈΡΠ° ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ rjmp Reset .org 0x0A rjmp OVF_T2 ;Timer/Counter2 Overflow Reset: LDI Tmp, 0x08 ;ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΡΠ΅ΠΊΠ° LDI Tmp2, 0x5F OUT SPH, Tmp OUT SPL, Tmp2 ;ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΈ ldi Tmp, 0xFF ;ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° Π²ΡΡ
ΠΎΠ΄ PORTB out DDRB, Tmp ldi Tmp, 0xFF ;ΠΠΎΠ΄ΡΡΠ³ΠΈΠ²Π°ΡΡΠΈΠ΅ ΡΠ΅Π·ΠΈΡΡΠΎΡΡ Π½Π° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»ΠΈ out PORTD, Tmp ldi N, 1 ldi Tmp, 0x01 ;ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Timer/Counter2 out TCCR2, Tmp ;TC2 Π²ΠΊΠ»ΡΡΠ΅Π½ Π½Π° ΠΊΠΎΡΡ. Π΄Π΅Π»Π΅Π½ΠΈΡ /1 ldi Tmp, 0x40 ;Enable interrupt OVF2 out TIMSK, Tmp ldi OutData, 0x80 out PORTB, OutData clr Tmp out TCNT2, Tmp clr Cnt sei Main: ;cli in Tmp, PIND ;ΠΠ΅ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ ldi Tmp2, 9 ;Counter Cycle: dec Tmp2 cpi Tmp2, 0 breq ExitCycle lsl Tmp brcc Cycle ExitCycle: cp Tmp2, N breq NotChanges mov N, Tmp2 rjmp Set_N NotChanges: rjmp End_of_Read ;Π‘ΡΠ°Π²ΠΈΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ ΠΏΠΎ N ;N=0 Set_N: cpi N, 0 brne Vkl_N1 ldi Tmp, 0 ;ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ TC2 out TCCR2, Tmp clr Tmp out PORTB, Tmp rjmp End_of_Read Vkl_N1: ldi Tmp, 0x01 out TCCR2, Tmp End_of_Read: ;sei rjmp Main OVF_T2: inc Cnt ;ΠΠΎ ΡΠ΅ΠΆΠΈΠΌΡ N ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π·Π°Π΄Π΅ΡΠΆΠΊΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ N1: cpi N, 1 brne N2 ldi MaxCnt, KOLVO_001 rjmp End N2: cpi N, 2 brne N3 ldi MaxCnt, KOLVO_002 rjmp End N3: cpi N, 3 brne N4 ldi MaxCnt, KOLVO_004 rjmp End N4: cpi N, 4 brne N5 ldi MaxCnt, KOLVO_01 rjmp End N5: cpi N, 5 brne N6 ldi MaxCnt, KOLVO_02 rjmp End N6: cpi N, 6 brne N7 ldi MaxCnt, KOLVO_04 rjmp End N7: cpi N, 7 brne N8 ldi MaxCnt, KOLVO_1 rjmp End N8: cpi N, 8 brne End ldi MaxCnt, KOLVO_1 End: cp Cnt, MaxCnt brsh Shift reti Shift: clr Cnt cpi OutData, 0x02 breq Vnachalo lsr OutData lsr OutData rjmp Vivod Vnachalo: ldi OutData, 0x80 Vivod: out PORTB, OutData clr Tmp ;ΠΠ±Π½ΡΠ»Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° TC2 out TCNT2, Tmp reti.