ArduinoUNO 内嵌汇编Blink-Arduino中文社区 - Powered by Discuz! Archiver

13560567638 发表于 2020-8-25 06:10

ArduinoUNO 内嵌汇编Blink

本帖最后由 13560567638 于 2020-8-25 06:13 编辑

void setup() {
asm("LDI 0x10, 0x20");// 内存地址(0x10) = 常数(0x20)
asm("STS 0x24, 0x10");// 内存地址(0x24) = 内存地址(0x10)
asm("LDI 0x10, 0x00");// 内存地址(0x10) = 常数(0x00)
asm("STS 0x80, 0x10");// 内存地址(0x80) = 内存地址(0x10)
asm("LDI 0x10, 0x05");// 内存地址(0x10) = 常数(0x05)
asm("STS 0x81, 0x10");// 内存地址(0x81) = 内存地址(0x10)
}

void loop() {
asm("LDI 0x10, 0x20");// 内存地址(0x10) = 常数(0x20)
asm("STS 0x23, 0x10");// 内存地址(0x23) = 内存地址(0x10)
asm("LDI 0x10, 0xC2");// 内存地址(0x10) = 常数(0xC2)
asm("STS 0x85, 0x10");// 内存地址(0x85) = 内存地址(0x10)
asm("LDI 0x10, 0xF6");// 内存地址(0x10) = 常数(0xF6)
asm("STS 0x84, 0x10");// 内存地址(0x84) = 内存地址(0x10)
asm("LDI 0x10, 0x01");// 内存地址(0x10) = 常数(0x01)
asm("STS 0x36, 0x10");// 内存地址(0x36) = 内存地址(0x10)
asm("SBIS 0x16,0x00");// 如果 I/O 寄存器(0x16) 0 位等于 1, 则跳过 RJMP 指令
asm("RJMP       .-4");// 向后跳转4个字节
}

// Arduino内嵌汇编点灯Blink
// 4条汇编指令分别: LDI、STS、SBIS、RJMP
// 指令   操作数   说明
// LDI   Rd, K    加载立即数
// STS   k, Rr   加载数据到指定内存地址
// SBIS    P, b      如果 I/O 寄存器位为 "1”, 则跳过下一条指令
// RJMP    k      相对跳转

页: [1]
查看完整版本: ArduinoUNO 内嵌汇编Blink