My Atmel AVR

Last wednesday in my ASM and Systems Programming class we received our STK500 programming boards for use with our projects. Yesterday we were given some taste of how to program a board in Atmel ASM.

The ‘official’ way to download your program to an atmel board is to use their Windows-only AVR Studio. Boo!

Luckily, there is Linux software already available for this. AVRDUDE lets you communicate with the STK500 programmer to download code compiled into the Intel Hex format. Finding a compiler is a bit more difficult, but still pretty easy. There isn’t a compiler in the fedora repos, so I went searching and found avra. It is 100% compatible with the official AVR compiler.

As my first free time project, I made some leds count in binary:


;comment
.cseg
.org 0
.def count = r16
.def temp = r17
.equ PORTB = 0×18
.equ DDRB = 0×17
ldi temp,0xFF
out DDRB,temp
ldi count,0×00

lp:
out PORTB,count
inc count
rjmp lp

That was pretty thrilling for me, but I wanted more, so I made a pattern expand outwards:


;comment
.device ATmega16
.cseg
.org 0
.def output = r16
.def temp = r18
.equ PORTB = 0×18
.equ DDRB = 0×17
.equ LEFT = 0b11110000
.equ RIGHT = 0b00001111
.equ PATTERN = 0b00011000

ldi temp,0xFF
out DDRB,temp
ldi output,PATTERN

lp:
out PORTB,output
mov temp,output
andi output,LEFT
lsl output
andi temp,RIGHT
lsr temp
or output,temp
ldi temp,0
cpse temp,output
rjmp lp
ldi output,PATTERN
rjmp lp

And here’s the device in its blinking glory:

Leave a Reply