Created
March 27, 2014 12:35
-
-
Save TechplexEngineer/9806583 to your computer and use it in GitHub Desktop.
Simple code to blink LEDs on an AVR atMega88A
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <avr/io.h> | |
| #include <avr/interrupt.h> | |
| #define F_CPU 1000000UL //processor frequency 1MHz | |
| #include <util/delay.h> | |
| #include <stdbool.h> | |
| #define output_low(port,pin) port &= ~(1<<pin) | |
| #define output_high(port,pin) port |= (1<<pin) | |
| #define set_input(portdir,pin) portdir &= ~(1<<pin) | |
| #define set_output(portdir,pin) portdir |= (1<<pin) | |
| int main(void) | |
| { | |
| set_output(DDRB, PB0); | |
| set_output(DDRB, PB1); | |
| set_output(DDRB, PB2); | |
| output_high(PORTB, PB0); | |
| output_high(PORTB, PB1); | |
| output_high(PORTB, PB2); | |
| while(1); | |
| return 0; | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| CC=avr-gcc | |
| CFLAGS=-g -Os -Wall -mcall-prologues -mmcu=atmega88 | |
| OBJ2HEX=avr-objcopy | |
| #UISP=/usr/local/bin/uisp | |
| TARGET=main | |
| #ADFLAGS=-p m8 -c FT232 -P /dev/tty.usbserial-A8003POq | |
| ADFLAGS=-p m88 -c avrispmkII -P usb | |
| # .PHONY means that these are not a target | |
| .PHONY: fuses prog erase | |
| prog: $(TARGET).hex $(TARGET).eeprom #this programs the chip, depends on Target.hex and Target.eeprom | |
| avrdude $(ADFLAGS) -V -U flash:w:$(TARGET).hex:i | |
| # make .obj (any obj) if corresponding .o is newer | |
| %.obj: %.o | |
| $(CC) $(CFLAGS) $< -o $@ # $@ means target of rule, $< means prerequisite of rule | |
| # similarly, make any .hex if corresponding .obj is newer | |
| %.hex: %.obj | |
| $(OBJ2HEX) -R .eeprom -O ihex $< $@ # remove eeprom output ihex translate .obj into hex file | |
| # any eeprom depends on same .obj | |
| %.eeprom: %.obj | |
| $(OBJ2HEX) -j .eeprop -O ihex $< $@ | |
| # this target will just erase avr | |
| erase: | |
| avrdude $(ADFLAGS) -E noreset -e | |
| # this target will remove all non-source files (will cause a complete re-build on next make) | |
| clean: | |
| rm -f *.hex *.obj *.o *.eeprom | |
| # program the fuses (NOT done by regular make) | |
| fuses: | |
| avrdude $(ADFLAGS) -U lfuse:w:0x62:m -U hfuse:w:0xdf:m -U efuse:w:0xf9:m | |
| #www.engbedded.com/fusecalc | |
| # $@ -- is the target | |
| # $^ -- is a list of all the prerequisites of the rule | |
| # $< -- is the first prerequisite |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment