Я тоже вас обидеть не хочу. Я хочу вам помочь и ИСКРЕННЕ считаю что основы можно и на Си понять и попробовать. У меня в курсе задача 1 тоже мигание светодиодами.
Кроме того в архиве можно ведь и АСМ ПРАВИЛЬНЫЙ от CVAVR посмотреть !
Код:
;CodeVisionAVR C Compiler V1.25.9 Professional
;(C) Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
;http://www.hpinfotech.com
.CSEG
.ORG 0
;INTERRUPT VECTORS
RJMP __RESET
RJMP _ext_int0_isr
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
__GLOBAL_INI_TBL:
.DW 0
_0x08:
__RESET:
CLI
CLR R30
OUT EECR,R30
;INTERRUPT VECTORS ARE PLACED
;AT THE START OF FLASH
LDI R31,1
OUT GICR,R31
OUT GICR,R30
OUT MCUCR,R30
;DISABLE WATCHDOG
LDI R31,0x18
OUT WDTCR,R31
OUT WDTCR,R30
;CLEAR R2-R14
LDI R24,13
LDI R26,2
CLR R27
__CLEAR_REG:
ST X+,R30
DEC R24
BRNE __CLEAR_REG
;CLEAR SRAM
LDI R24,LOW(0x400)
LDI R25,HIGH(0x400)
LDI R26,0x60
__CLEAR_SRAM:
ST X+,R30
SBIW R24,1
BRNE __CLEAR_SRAM
;GLOBAL VARIABLES INITIALIZATION
LDI R30,LOW(__GLOBAL_INI_TBL*2)
LDI R31,HIGH(__GLOBAL_INI_TBL*2)
__GLOBAL_INI_NEXT:
LPM R24,Z+
LPM R25,Z+
SBIW R24,0
BREQ __GLOBAL_INI_END
LPM R26,Z+
LPM R27,Z+
LPM R0,Z+
LPM R1,Z+
MOVW R22,R30
MOVW R30,R0
__GLOBAL_INI_LOOP:
LPM R0,Z+
ST X+,R0
SBIW R24,1
BRNE __GLOBAL_INI_LOOP
MOVW R30,R22
RJMP __GLOBAL_INI_NEXT
__GLOBAL_INI_END:
;STACK POINTER INITIALIZATION
LDI R30,LOW(0x45F)
OUT SPL,R30
LDI R30,HIGH(0x45F)
OUT SPH,R30
;DATA STACK POINTER INITIALIZATION
LDI R28,LOW(0x160)
LDI R29,HIGH(0x160)
RJMP _main
.ESEG
.ORG 0
.DSEG
.ORG 0x160
; 103 interrupt [EXT_INT0] void ext_int0_isr(void)
; 104 {
.CSEG
_ext_int0_isr:
; 105 PORTD |= (1 << 0); // "1" на PD0
SBI 0x12,0
; 106 }
RETI
; 107
; 108 void main(void){
_main:
; 109 DDRD=0x01; // PD0 выход
LDI R30,LOW(1)
OUT 0x11,R30
; 110 PORTD |= (1<<2); // подтяжка на PD2
SBI 0x12,2
; 111 GICR|=0x40; // INT0: On Mode: Falling Edge INT1: Off
IN R30,0x3B
ORI R30,0x40
OUT 0x3B,R30
; 112 MCUCR=0x02;
LDI R30,LOW(2)
OUT 0x35,R30
; 113 GIFR=0x40;
LDI R30,LOW(64)
OUT 0x3A,R30
; 114 #asm("sei")
sei
; 115 while (1){
_0x3:
; 116 if (PIND.2){
SBIC 0x10,2
; 117 PORTD &= (~(1 << 0)); // "0" на PD0
CBI 0x12,0
; 118 } };
RJMP _0x3
; 119 }
_0x7:
RJMP _0x7
; 120
;END OF CODE MARKER
__END_OF_CODE: