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]