! Arduino asm asm(" オペコード1 オペランド1 \n\t オペコード2 オペランド2 \n\t "); もしくは asm volatile( "オペコード1 オペランド1[マクロA名]" "\n\t" "オペコード2 オペランド2[マクロB名]" "\n\t" ); ! sample LED brink volatile uint8_t *port; uint8_t High,Low,Mask; uint8_t PinNumber = 2; void setup() { DDRD = 0x04; PORTD = 0x00; port = portOutputRegister(digitalPinToPort(PinNumber)); Mask = digitalPinToBitMask(PinNumber); High = *port | Mask; Low = *port | ~Mask; ledFlashing(); } void loop() { } void ledFlashing(){ asm volatile( "LEDS:" "\n\t" //LEDS "st %a[port], %[High]" "\n\t" //I/Oポートに転送 "rcall delay1000m" "\n\t" //1秒待ち "st %a[port], %[Low]" "\n\t" //I/Oポートに転送 "rcall delay1000m" "\n\t" //1秒待ち "rjmp LEDS" "\n\t" //繰り返し "delay1000m:" "\n\t" //サブルーチン "ldi R18,60" "\n\t" //汎用レジスタに定数60転送 "delay52:" "\n\t" // "rcall delay1" "\n\t" //delay1を呼ぶ "dec r18" "\n\t" //R18をデクリメント "brne delay52" "\n\t" //R18が0でなければdelay52を呼ぶ "ret" "\n\t" //復帰 "delay1:" "\n\t" //サブルーチン "ldi r19,255" "\n\t" //R19に定数255を転送 "delay12:" "\n\t" // "rcall delay4" "\n\t" //delay4へ "dec r19" "\n\t" //R19をデクリメント "brne delay12" "\n\t" //R19が0でなければdelay12 "ret" "\n\t" //復帰 "delay4:" "\n\t" //サブルーチン 4クロック分 "ldi r20,255" "\n\t" //R20に定数255を転送 "delay42:" "\n\t" // "nop" "\n\t" //1クロック何もしない。 "dec r20" "\n\t" //R20をデクリメント "brne delay42" "\n\t" // "ret" //復帰 :[port]"+e"(port) :[High]"r"(High), [Low]"r"(Low) ); } ! 参照元 http://qiita.com/TakeoChan/items/8362eaf53cf199262cb7 http://edu.net.c.dendai.ac.jp/micom/2018/2/index.html#flash