Arduino Experiment: Playing with Inline Assembler
Julian's Electronics
What started with the need to embed a single assembly language instruction in an Arduino sketch, became a complete flashing LED program written in AVR assembler.
ATmega328P Pin Mapping: http://arduino.cc/en/Hacking/PinMapping168#.UyMGKPl_tV4
AVR ATmega328P Data Sheet www.atmel.com/Images/doc8161.pdf
Inline Assembler Cookbook: http://www.nongnu.org/avr-libc/user-manual/inline_asm.html
What registers are used by the C compiler?: http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_reg_usage
This guy did it properly: http://ucexperiment.wordpress.com/
Arduino sketch:
void setup() { asm("sbi 0x04, 5"); }
void loop() {
asm("start:");
asm("sbi 0x05, 5");
asm("ldi r16,40 \n\t rcall delay");
asm("cbi 0x05, 5");
asm("ldi r16,40 \n\t rcall delay");
asm("rjmp start");
asm("delay:");
asm("dec r8");
asm("brne delay");
asm("dec r9");
asm("brne delay");
asm("dec r16");
asm("brne delay");
asm("ret");
}
...
https://www.youtube.com/watch?v=TOqnijfi9eI
280085763 Bytes