#define __SFR_OFFSET 0x00
#include "avr/io.h"
incr_msg:
.ascii "Naik"
.byte 10, 0
decr_msg:
.ascii "Turun"
.byte 10, 0
main:
LDI R16, lo8(RAMEND)
OUT SPL, R16
LDI R16, hi8(RAMEND)
OUT SPH, R16
CLR R21
CLR R22
LDI R16, (1 << 2) | (1 << 3)
OUT PORTD, R16
LDI R16, 0x00
OUT DDRD, R16
RCALL init_serial
loop:
SBIC PIND, 2
RJMP check_decr
RCALL increment_var
RCALL print_incr
RCALL delay_1sec
check_decr:
SBIC PIND, 3
RJMP loop
RCALL decrement_var
RCALL print_decr
RCALL delay_1sec
RJMP loop
increment_var:
LDI R16, 1
ADD R21, R16
LDI R16, 0
ADC R22, R16
RET
decrement_var:
LDI R16, 1
SUB R21, R16
LDI R16, 0
SBC R22, R16
RET
init_serial:
CLR R24
STS UCSR0A, R24
STS UBRR0H, R24
LDI R24, 103
STS UBRR0L, R24
LDI R24, (1<<4) | (1<<3)
STS UCSR0B, R24
LDI R24, (1<<2) | (1<<1)
STS UCSR0C, R24
RET
print_incr:
LDI R30, lo8(incr_msg)
LDI R31, hi8(incr_msg)
RCALL print_string
RCALL print_var_hex
RET
print_decr:
LDI R30, lo8(decr_msg)
LDI R31, hi8(decr_msg)
RCALL print_string
RCALL print_var_hex
RET
print_string:
str_loop:
LPM R18, Z+
CPI R18, 0
BREQ str_exit
RCALL LCD_buffer
STS UDR0, R18
RJMP str_loop
str_exit:
RET
print_var_hex:
MOV R16, R22
RCALL ASCII_MSD
RCALL LCD_buffer
STS UDR0, R16
MOV R16, R22
RCALL ASCII_LSD
RCALL LCD_buffer
STS UDR0, R16
MOV R16, R21
RCALL ASCII_MSD
RCALL LCD_buffer
STS UDR0, R16
MOV R16, R21
RCALL ASCII_LSD
RCALL LCD_buffer
STS UDR0, R16
LDI R16, 10
RCALL LCD_buffer
STS UDR0, R16
RET
ASCII_MSD:
MOV R23, R16
ANDI R16, 0xF0
SWAP R16
SUBI R16, -48
MOV R28, R16
SUBI R28, 58
BRPL A_F_D1
l1: RET
ASCII_LSD:
MOV R16, R23
ANDI R16, 0x0F
SUBI R16, -48
MOV R28, R16
SUBI R28, 58
BRPL A_F_D0
l2: RET
A_F_D1:
SUBI R16, -7
RJMP l1
A_F_D0:
SUBI R16, -7
RJMP l2
LCD_buffer:
LDS R27, UCSR0A
SBRS R27, 5
RJMP LCD_buffer
RET
delay_1sec:
LDI R17, 41
outer_loop:
LDI R18, 255
middle_loop:
LDI R19, 250
inner_loop:
DEC R19
BRNE inner_loop
DEC R18
BRNE middle_loop
DEC R17
BRNE outer_loop
RET
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r