<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://www.microrusty.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Programming_AVR_Assembly_language</id>
	<title>Programming AVR Assembly language - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://www.microrusty.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Programming_AVR_Assembly_language"/>
	<link rel="alternate" type="text/html" href="http://www.microrusty.com/mediawiki/index.php?title=Programming_AVR_Assembly_language&amp;action=history"/>
	<updated>2026-04-23T20:52:26Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>http://www.microrusty.com/mediawiki/index.php?title=Programming_AVR_Assembly_language&amp;diff=35&amp;oldid=prev</id>
		<title>U731219879 rc: Created page with &quot;Learning &#039;&#039;&#039;inline assembly language&#039;&#039;&#039; on the Arduino AVR 8-bit platform is a daunting task   The ATmel &#039;&#039;&#039;AVR Assembly Language&#039;&#039;&#039; 8-bit Instruction Set&lt;br&gt; http://www.atmel...&quot;</title>
		<link rel="alternate" type="text/html" href="http://www.microrusty.com/mediawiki/index.php?title=Programming_AVR_Assembly_language&amp;diff=35&amp;oldid=prev"/>
		<updated>2019-03-23T03:49:25Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;Learning &amp;#039;&amp;#039;&amp;#039;inline assembly language&amp;#039;&amp;#039;&amp;#039; on the Arduino AVR 8-bit platform is a daunting task   The ATmel &amp;#039;&amp;#039;&amp;#039;AVR Assembly Language&amp;#039;&amp;#039;&amp;#039; 8-bit Instruction Set&amp;lt;br&amp;gt; http://www.atmel...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Learning &amp;#039;&amp;#039;&amp;#039;inline assembly language&amp;#039;&amp;#039;&amp;#039; on the Arduino AVR 8-bit platform is a daunting task &lt;br /&gt;
&lt;br /&gt;
The ATmel &amp;#039;&amp;#039;&amp;#039;AVR Assembly Language&amp;#039;&amp;#039;&amp;#039; 8-bit Instruction Set&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.atmel.com/images/atmel-0856-avr-instruction-set-manual.pdf&lt;br /&gt;
&lt;br /&gt;
* Connect &amp;#039;&amp;#039;&amp;#039;USBtiny&amp;#039;&amp;#039;&amp;#039; to &amp;#039;&amp;#039;&amp;#039;ATmega328P Target Board&amp;#039;&amp;#039;&amp;#039;. &amp;lt;br&amp;gt;&lt;br /&gt;
* Test the connection to programmer:  &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;avrdude -p m328p -c usbtiny -v&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
* Connect LED with pull down resistor to &amp;#039;&amp;#039;&amp;#039;Pin D13&amp;#039;&amp;#039;&amp;#039; on &amp;#039;&amp;#039;&amp;#039;ATmega328P Target bd&amp;#039;&amp;#039;&amp;#039;. (Not needed if using Target Bd built in Yellow LED) &amp;lt;br&amp;gt;&lt;br /&gt;
* Open &amp;#039;&amp;#039;&amp;#039;Arduino IDE&amp;#039;&amp;#039;&amp;#039; and change the following settings: Under the &amp;#039;&amp;#039;&amp;#039;Tools&amp;#039;&amp;#039;&amp;#039; tab &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &amp;#039;&amp;#039;&amp;#039;Board:&amp;#039;&amp;#039;&amp;#039; =&amp;#039;&amp;#039;&amp;#039;&amp;quot;Arduino/Genunio Uno&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
       &amp;#039;&amp;#039;&amp;#039;Programmer:&amp;#039;&amp;#039;&amp;#039; = &amp;#039;&amp;#039;&amp;#039;&amp;quot;USBtiny or USBasp&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Copy-Paste/Load &amp;#039;&amp;#039;&amp;#039;ASM-blink.ino&amp;#039;&amp;#039;&amp;#039; Arduino file. (&amp;#039;&amp;#039;&amp;#039;Do not Flash until instructed &amp;#039;&amp;#039;&amp;#039;)&amp;lt;br&amp;gt;	 &lt;br /&gt;
&lt;br /&gt;
 // ASM-blink.ino MicroRusty 2018&lt;br /&gt;
 // Blink Program using assembly language in the Ardion IDE &lt;br /&gt;
 // AVR RISC processors offers to embed assembly language code into C programs&lt;br /&gt;
 void setup() {&lt;br /&gt;
  asm(&amp;quot;sbi 0x04, 5&amp;quot;);                 //sbi= Set bit in I/O Data Direction Register DDRB 0x4 with the value 5&lt;br /&gt;
  }&lt;br /&gt;
 void loop() {&lt;br /&gt;
  asm(&amp;quot;start:&amp;quot;);&lt;br /&gt;
  asm(&amp;quot;sbi 0x05, 5&amp;quot;);                 // sbi= Set bit in I/O Register-PortB bit 0x5 with the value 5 (00010000)&lt;br /&gt;
  asm(&amp;quot;ldi r16,40 \n\t rcall delay&amp;quot;); // Load imediate Reqister r16 with vaulue 40 - RCALL Relative Subroutine Call&lt;br /&gt;
  asm(&amp;quot;cbi 0x05, 5&amp;quot;);                 // cbi= Clear bit in I/O Register-PortB bit 0x5 with the value 5 (00000000)&lt;br /&gt;
  asm(&amp;quot;ldi r16,40 \n\t rcall delay&amp;quot;); // Load imediate Reqister r16 with vaulue 40 - RCALL Relative Subroutine Call&lt;br /&gt;
  asm(&amp;quot;rjmp start&amp;quot;);                  // Relative Jump back to start &amp;lt;br&amp;gt;&lt;br /&gt;
  asm(&amp;quot;delay:&amp;quot;);                      // Delay subroutine called by RCALL&lt;br /&gt;
  asm(&amp;quot;dec r8&amp;quot;);                      // Decrease r8 by 1 starting at 255&lt;br /&gt;
  asm(&amp;quot;brne delay&amp;quot;);                  // keep going until 0 &lt;br /&gt;
  asm(&amp;quot;dec r9&amp;quot;);                      // Decrease r9 by 1 starting at 255&lt;br /&gt;
  asm(&amp;quot;brne delay&amp;quot;);                  // keep going until 0 &lt;br /&gt;
  asm(&amp;quot;dec r16&amp;quot;);                     // Decrease r16 by 1 starting at 40&lt;br /&gt;
  asm(&amp;quot;brne delay&amp;quot;);                  // Keep going until 0 &lt;br /&gt;
  asm(&amp;quot;ret&amp;quot;);                         // Return from subroutine after Three nested delay loops -ugh &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
* Generate the binary file by selecting under the &amp;#039;&amp;#039;&amp;#039;Sketch&amp;#039;&amp;#039;&amp;#039; Tab: &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot;Export complied Binary&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;   &lt;br /&gt;
* Flash the chip by Selecting &amp;#039;&amp;#039;&amp;#039;Upload Using Programmer&amp;#039;&amp;#039;&amp;#039; under &amp;#039;&amp;#039;&amp;#039;Sketch&amp;#039;&amp;#039;&amp;#039; Tab in &amp;#039;&amp;#039;&amp;#039;Arduino IDE&amp;#039;&amp;#039;&amp;#039;. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sketch uses &amp;#039;&amp;#039;&amp;#039;474 bytes (1%)&amp;#039;&amp;#039;&amp;#039; of program storage space. Maximum is 32256 bytes.&lt;br /&gt;
Global variables use 9 bytes (0%) of dynamic memory, leaving 2039 bytes for local variables. Maximum is 2048 bytes&lt;br /&gt;
&lt;br /&gt;
* Notice the speed of the blinking LED at 1MHz. Try the different clock speeds&amp;lt;br&amp;gt; &lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;1 MHz&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
 avrdude -p m328p -c usbtiny -v -U lfuse:w:0x62:m -U hfuse:w:0xD9:m -U efuse:w:0xFF:m&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;8 MHz&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
 avrdude -p m328p -c usbtiny -v -U lfuse:w:0xE2:m -U hfuse:w:0xD6:m -U efuse:w:0xFF:m&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;16 MHz&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
 avrdude -p m328p -c usbtiny -v -U lfuse:w:0xFF:m -U hfuse:w:0xDE:m -U efuse:w:0xFF:m &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;AVRASM2&amp;#039;&amp;#039;&amp;#039; is the ASM compiler and was once a stand alone program that has now since been incorporated into &amp;#039;&amp;#039;&amp;#039;ATMEL Studio&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
I will not cover AVRASM2 in this workshop. AVRASM2 will be covered in part of ATMEL Studio Workshop that will be sometime in the furture. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==[[ AVRDUDE Class]]==&lt;/div&gt;</summary>
		<author><name>U731219879 rc</name></author>
		
	</entry>
</feed>