рдФрд░ рдХреНрдпреЛрдВ?
C рд╕реЗ рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ (рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдИ) рдореБрдЭреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рдмреБрд░реА рдмрд╛рдд рд▓рдЧреА, рдпрд╣ рдкрд╕рдВрджреАрджрд╛ _delay_ms (рд▓рдВрдмреА рдорд┐рд▓реАрд╕реЗрдХрдВрдб) рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ (рдпрд╣ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдпрд╣ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), 8000 рдЦрд╛рд▓реА рдХрдорд╛рдВрдб (8 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХреЗ рд▓рд┐рдП 1 рдПрдордПрд╕ рдХреЗ рд▓рд┐рдП рдкрдХрдбрд╝ рдХреЗ рд▓рд┐рдП) рд▓рд┐рдЦреЗрдВред ) рдмреЗрд╢рдХ рдмрдХрд╡рд╛рд╕, рдпрд╣рд╛рдБ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдЖрдкрдХреЗ рд╡рд┐рд▓рдВрдм рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛ред
рдХрджрдо рд╕реЗ рдХрджрдо
рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╡рд╣ рддреБрд░рдВрдд рд▓рдбрд╝рд╛рдИ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛, рдмрд┐рдирд╛ рдХреБрдЫ рд╕реЛрдЪреЗ-рд╕рдордЭреЗ, рдЙрд╕рдиреЗ рддреБрд░рдВрдд рдЗрд╕реЗ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рдорд╛рдкрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдХреЛрдб рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛,
.macro DELAY_MS push R16 push R17 push R24 push R28 ldi R28, LOW(@0) ldi R24, HIGH(@0) rjmp cycMKS cycSEK: subi R24,1 ldi R28, 255 cycMKS: cpi R28, 1 brlo decMKS subi R28,1 ldi R16, LOW(@1/1000) ldi R17, HIGH(@1/1000) rjmp _delay_c new_cycle: subi R17, 1 ldi R16, 255 _delay_c: subi R16, 4 cpi R16, 4 brsh _delay_c NOP NOP cpi R17, 0 brne new_cycle rjmp cycMKS decMKS: cpi R24,0 brne cycSEK pop R28 pop R24 pop R17 pop R16 .endm
рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХреНрд░рдорд╢рдГ рдПрд╡реАрдЖрд░ рд╕реНрдЯреВрдбрд┐рдпреЛ 4 + рдЬреАрд╕реАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рд╡рд╣рд╛рдВ рднреА рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдкрд░рд┐рдгрд╛рдо:

...
.рд╕реАрдкреА F_CPU = 8000000; рдЖрд╡реГрддреНрддрд┐ рд╣рд░реНрдЯреНрдЬ рдореЗрдВ
...
DELAY_MS 4, F_CPU; 4 рдПрдордПрд╕ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди
...
рдмрд╣реБрдд рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐, рджреЗрд░реА рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде рдмрдврд╝ рд░рд╣реА рд╣реИ, рд╕реАрдзреЗ рдЖрдВрдЦ рдХреЛ рдорд╛рд░рд╛, рдпрд╣ рдЕрдм рд▓реЗрдЦрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред рдореИрдВрдиреЗ рдЖрджреЗрд╢ рдореЗрдВ рдЬрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдкрд╣рд▓реЗ 1 рдмрд╛рдЗрдЯ, 2 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛рдЙрдВрдЯрд░ рд▓рд┐рдЦреЗрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде gluing рдХреЗ рдмрд╛рдж, рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рджреЗрд░реА рд╣реЛред
рдкрд░рд┐рдгрд╛рдо 3 рдореИрдХреНрд░реЛрдЬрд╝ рдерд╛:
; ; @0 тАУ 9-255 ( ) .macro DELAY_CL ;push R16 ldi R16, LOW(@0)-5 _delay_cl: subi R16, 4 cpi R16, 4 brsh _delay_cl cpi R16, 1 breq end_cl_1 cpi R16, 0 breq end_cl cpi R16, 2 breq end_cl rjmp end_cl end_cl_1: NOP NOP NOP end_cl: .endm
; ; @0 тАУ 15-65535 ( ) .macro DELAY_C ldi R16, LOW(@0) cpi R16, 17 brsh fault rjmp init_R17 fault: DELAY_CL LOW(@0-7) init_R17: ldi R17, HIGH(@0) cpi R17, 0 breq end_c new_cycle: subi R17, 1 DELAY_CL 252 cpi R17, 0 brne new_cycle NOP end_c: .endm
рд╕рдВрдмрдВрдзрд┐рдд рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рдЪрдХреНрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред
; ; @0 тАУ 1 тАУ 65535 ( ) ; @1 тАУ ( >= 1,3 MHz) .macro DELAY_MS push R19 push R18 push R17 push R16 ldi R18, LOW(@0) ldi R19, HIGH(@0) cpi R18, 0 breq re_init _cicl_msl: DELAY_C @1/1000 subi R18, 1 cpi R18, 0 breq re_init rjmp _cicl_msl re_init: cpi R19, 0 breq _end_c subi R19, 1 ldi R18, 255 DELAY_C (@1/1000)-255*5 rjmp _cicl_msl _end_c: pop R16 pop R17 pop R18 pop R19 .endm
рдЗрд╕ рдХреЛрдб рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЕрдзрд┐рдХ рд╕рдлрд▓ рд╣реИрдВ:
1 ms (Atmega8535, F_CPU = 8001000 Hz) рдХреЗ рд▓рд┐рдП

300ms (Atmega8535, F_CPU = 8001000 рд╣рд░реНрдЯреНрдЬ) рдХреЗ рд▓рд┐рдП

32 рдХреЗ рд▓рд┐рдП (Atmega8535, F_CPU = 8001000 рд╣рд░реНрдЯреНрдЬ)

300ms рдХреЗ рд▓рд┐рдП (Atmega6490, F_CPU = 4,000,000 рд╣рд░реНрдЯреНрдЬ)

300ms рдХреЗ рд▓рд┐рдП (ATtiny43U, F_CPU = 2,000,000 рд╣рд░реНрдЯреНрдЬ)

рддреНрд░реБрдЯрд┐ ~ 4-150 рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдХреА рд╕реАрдорд╛ рдореЗрдВ рд╣реИред рдпрд╣ рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдореИрдВ DELAY_MS рдореИрдХреНрд░реЛ рдХреЛ рдПрдХ рд╕рдмрд░реВрдЯреАрди рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдЗрддрдирд╛ рдХреЛрдб рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ) рдпрд╣ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЗ рд╕рд╛рде рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдпрд╣ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рдХрд┐ рдЗрд╕ рд╕рдм рдХреЛ рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреИрд╕реЗ рдбрд╛рд▓рд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрдкрдпреБрдХреНрдд рдмрдирд╛рдпрд╛ рдЬрд╛рдПред