Sunteți pe pagina 1din 7

1.

.include "m16def.inc"
.cseg
.org 0
rjmp Reset
.org $002 ;adresa pentru intreruperile pe pinul INT0
rjmp EXT_INT0

Reset:
ldi R16, HIGH(RAMEND) ;Initializam stiva
out SPH, R16
ldi R16, LOW(RAMEND)
out SPL, R16

ldi R16, 0xff ;Initializam porturile


out DDRC, R16

ldi R16, 0b01000000 ;setam bitul INT0


out GICR, R16
ldi R16, 0b00000010 ;se va apela intreruperea la frontul descrescator pe INT0
out MCUCR, R16
sei
Loop: ;bucla infinita
rjmp Loop

EXT_INT0:
cli ;stergem intreruperile globale
sbis PORTC, 0 ;verificam starea pinului 0
rjmp Led
cbi PORTC, 0 ;setam 0 logic la pinul 0
Stop:
sei ;setam intreruperile globale
reti ;iesim din intrerupere
Led:
sbi PORTC, 0 ;setam 1 logic la pinul 0
rjmp Stop

2.
.include "m16def.inc"
.cseg
.org 0
rjmp Reset
.org $002 ;adresa pentru intreruperile pe pinul INT0
rjmp EXT_INT0

Reset:
ldi R16, HIGH(RAMEND) ;Initializam stiva
out SPH, R16
ldi R16, LOW(RAMEND)
out SPL, R16

ldi R16, 0xff ;Initializam porturile


out DDRC, R16
ldi R16, 0x00
out DDRD, R16
ldi R16, 0xff
out PORTD, R16

ldi R16, 0b01000000 ;setam bitul INT0


out GICR, R16
ldi R16, 0b00000010 ;se va apela intreruperea la frontul descrescator pe INT0
out MCUCR, R16
sei
Loop: ;bucla infinita
rjmp Loop

EXT_INT0:
cli ;stergem intreruperile globale
rjmp Led
Stop:
sei ;setam intreruperile globale
reti ;iesim din intrerupere
Led:
sbi PORTC, 0
rcall delay
cbi PORTC, 0
rcall delay
sbic PIND, 2 ;verificam daca la pinul PD2 a fost setat 0 logic
rjmp Led
rjmp Stop

delay: ;delay 250ms


push R16
push R17
push R18
ldi R16, 2
delay1:
ldi R17, 125
delay2:
ldi R18, 250
delay3:
dec R18
nop
brne delay3
dec R17
brne delay2
dec R16
brne delay1
pop R18
pop R17
pop R16
ret

3.
.include "m16def.inc"
.cseg
.org 0
rjmp Reset
.org $002 ;adresa pentru intreruperile pe pinul INT0
rjmp EXT_INT0
Reset:
ldi R16, HIGH(RAMEND) ;Initializam stiva
out SPH, R16
ldi R16, LOW(RAMEND)
out SPL, R16

ldi R16, 0xff ;Initializam porturile


out DDRC, R16

ldi R16, 0b01000000 ;setam bitul INT0


out GICR, R16
ldi R16, 0b00000010 ;se va apela intreruperea la frontul descrescator pe INT0
out MCUCR, R16

ldi R17, -1
sei
Loop: ;bucla infinita
rjmp Loop

EXT_INT0:
cli ;stergem intreruperile globale
rjmp Led
Stop:
sei ;setam intreruperile globale
reti ;iesim din intrerupere
Led:
inc R17
cpi R17, 0
breq Led1
cpi R17, 1
breq Led2
cpi R17, 2
breq Led3
cpi R17, 3
breq Led4
cpi R17, 4
breq Led5
cpi R17, 5
breq Led6
cpi R17, 6
breq Led7
cpi R17, 7
breq Led8
cpi R17, 8
brsh LedOff
Led1:
sbi PORTC, 0
rjmp Stop
Led2:
sbi PORTC, 1
rjmp Stop
Led3:
sbi PORTC, 2
rjmp Stop
Led4:
sbi PORTC, 3
rjmp Stop
Led5:
sbi PORTC, 4
rjmp Stop
Led6:
sbi PORTC, 5
rjmp Stop
Led7:
sbi PORTC, 6
rjmp Stop
Led8:
sbi PORTC, 7
rjmp Stop
LedOff:
ldi R17, 0
out PORTC, R17
ldi R17, -1
rjmp Stop

S-ar putea să vă placă și