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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2434|回复: 0

ArduinoUNO 内嵌汇编Blink

[复制链接]
发表于 2020-8-25 06:10 | 显示全部楼层 |阅读模式
本帖最后由 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        相对跳转

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 09:24 , Processed in 0.076840 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表