# AVR-GCC compiler CC = avr-gcc # Programmer (change it according to your programmer) PROGRAMMER = usbasp # MCU MCU = atmega328p # Compiler flags CFLAGS = -std=c99 -Wall -Wno-array-bounds -mmcu=$(MCU) -DF_CPU=16000000UL -O3 # Source files SRCS = main.c # Object files OBJS = $(SRCS:.c=.o) # Target file TARGET = main # Default target all: $(TARGET).hex # Compile C files %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ # Link object files $(TARGET).elf: $(OBJS) $(CC) $(CFLAGS) $(OBJS) -o $(TARGET).elf # Convert ELF to HEX $(TARGET).hex: $(TARGET).elf avr-objcopy -O ihex -R .eeprom $(TARGET).elf $(TARGET).hex # Flash the program flash: $(TARGET).hex avrdude -p $(MCU) -c $(PROGRAMMER) -U flash:w:$(TARGET).hex # Clean clean: rm -f $(OBJS) $(TARGET).elf $(TARGET).hex