8. Complete Program Examples
A. Blink LED
#define __SFR_OFFSET 0x00
#include "avr/io.h"
.global main
main:
SBI DDRB, 5 ; Set PB5 (Pin 13) as Output
loop:
SBI PORTB, 5 ; Turn on LED (Output HIGH)
RCALL delay ; Call delay subroutine
CBI PORTB, 5 ; Turn off LED (Output LOW)
RCALL delay ; Call delay subroutine
RJMP loop ; Repeat continuously
delay:
LDI R18, 82 ; Outer loop counter
outer:
LDI R24, lo8(60000) ; Inner loop counter (low byte)
LDI R25, hi8(60000) ; Inner loop counter (high byte)
inner:
SBIW R24, 1 ; Subtract word (R25:R24)
BRNE inner ; Loop if not 0
DEC R18 ; Subtract outer counter
BRNE outer ; Loop outer if not 0
RET ; Return to caller
#define __SFR_OFFSET 0x00
#include "avr/io.h"
.global main
main:
; Setup
SBI DDRB, 5 ; PB5 (Pin 13) as Output (LED)
CBI DDRD, 2 ; PD2 (Pin 2) as Input (Button)
SBI PORTD, 2 ; Activate Pull-up on PD2
loop:
SBIC PIND, 2 ; Skip next instruction if button pressed (LOW)
RJMP led_off ; If not pressed, turn off LED
led_on:
SBI PORTB, 5 ; Turn on LED
RJMP loop ; Return to loop
led_off:
CBI PORTB, 5 ; Turn off LED
RJMP loop ; Return to loop
C. Toggle LED with Button (Simple Debounce)
#define __SFR_OFFSET 0x00
#include "avr/io.h"
.global main
main:
; Initialization
SBI DDRB, 5 ; PB5 as Output (LED)
CBI DDRD, 2 ; PD2 as Input (Button)
SBI PORTD, 2 ; Activate internal Pull-up
CLR R20 ; R20 = LED status (0 = off)
wait_press:
SBIC PIND, 2 ; Wait for button pressed (LOW)
RJMP wait_press
; Button pressed - toggle LED
SBRC R20, 0 ; Skip if bit 0 of R20 = 0 (LED off)
RJMP turn_off
turn_on:
SBI PORTB, 5 ; Turn on LED
LDI R20, 1 ; Set status = on
RJMP debounce
turn_off:
CBI PORTB, 5 ; Turn off LED
CLR R20 ; Set status = off
debounce:
RCALL delay ; Delay for debounce
wait_release:
SBIS PIND, 2 ; Wait for button released (HIGH)
RJMP wait_release
RCALL delay ; Delay debounce after release
RJMP wait_press ; Return to wait for press
delay:
LDI R18, 50
d_outer:
LDI R24, lo8(10000)
LDI R25, hi8(10000)
d_inner:
SBIW R24, 1
BRNE d_inner
DEC R18
BRNE d_outer
RET
No comments to display
No comments to display