首页 > 编程语言 >AVR汇编(七):位操作和MCU控制指令

AVR汇编(七):位操作和MCU控制指令

时间:2023-08-14 21:11:08浏览次数:62  
标签:R16 位操作 标志 AVR SREG 指令 用于 寄存器 MCU

AVR汇编(七):位操作和MCU控制指令

位操作指令

SBI / CBI

image.png

SBI 指令用于设置I/O寄存器中的第 b 位, CBI 指令用于清除I/O寄存器中的第 b 位。

例如:

SBI DDRB, 5     ; PB5设为输出模式
CBI PORTB, 5    ; PB5输出低电平

移位

image.png

LSL 指令用于逻辑左移,低位补0。

LSR 指令用于逻辑右移,高位补0。

ASR 指令用于算术右移,高位补符号位。

ROL 指令用于循环左移,低位补 C 标志位,高位进入 C 标志位。

ROR 指令用于循环右移,高位补 C 标志位,低位进入 C 标志位。

例如:

LDI R16, 0x88    ; R16 = 0x88
LSR R16          ; R16 = 0x44
LSL R16          ; R16 = 0x88
ASR R16          ; R16 = 0xC4
SEC              ; C = 1
ROR R16          ; R16 = 0xE2, C = 0
ROL R16          ; R16 = 0xC4, C = 1

SWAP

image.png

SWAP 指令用于交换寄存器的高低4位。

例如:

LDI R16, 0xA5    ; R16 = 0xA5
SWAP R16         ; R16 = 0x5A

BSET / BCLR

image.png

BSET 用于设置 SREG 寄存器中的第 s 位, BCLR 用于清除 SREG 寄存器中的第 s 位。

例如:

BSET 0    ; C = 1
BCLR 0    ; C = 0

BST / BLD

image.png

BST 用于将寄存器中的第 b 位保存到 T 标志位, BLD 用于将 T 标志位加载到寄存器的第 b 位。

例如:

LDI R16, 0xAA
BST R16, 1       ; T = 1
BLD R16, 0       ; R16 = 0xAB

SEx / CLx

image.png

形如 SEx 的指令用于设置 SREG 寄存器中对应的标志位,形如 CLx 的指令用于清除 SREG 寄存器中对应的标志位,这两条指令作用和 BSET / BCLR 指令相同。

例如:

SEC    ; SREG = 0x01
SEZ    ; SREG = 0x03
SEN    ; SREG = 0x07
SEV    ; SREG = 0x0F
SES    ; SREG = 0x1F
SEH    ; SREG = 0x3F
SET    ; SREG = 0x7F
SEI    ; SREG = 0xFF
CLI    ; SREG = 0x7F
CLT    ; SREG = 0x3F
CLH    ; SREG = 0x1F
CLS    ; SREG = 0x0F
CLV    ; SREG = 0x07
CLN    ; SREG = 0x03
CLZ    ; SREG = 0x01
CLC    ; SREG = 0x00

MCU控制指令

image.png

NOP 指令占用一个周期而不做任何操作。

SLEEP 指令用于进入睡眠模式。

WDR 指令用于复位看门狗。

BREAK 指令供调试系统使用,应用程序用不到。

参考资料

  1. ATmega328P Datasheet
  2. AVR Instruction Set Manual

标签:R16,位操作,标志,AVR,SREG,指令,用于,寄存器,MCU
From: https://www.cnblogs.com/chinjinyu/p/17629761.html

相关文章

  • AVR汇编(六):分支指令
    AVR汇编(六):分支指令分支指令用于改变程序的执行流,分为无条件分支和条件分支两类。无条件分支指令JMPJMP指令用于无条件跳转,类似于C中的goto关键字,JMP指令的跳转范围为[0,4M-1]字。RJMP指令用于相对跳转,跳转范围为当前位置[-2K,2K-1]字。IJMP指令用于间接跳转,跳转的......
  • 关于CH32系列MCU SDI虚拟串口功能的使用
    该功能需要配合EVT对应例程以及对应WCH-LinkUtility工具使用,WCH-LinkUtility下载链接如下:https://www.wch.cn/downloads/WCH-LinkUtility_ZIP.html该功能目前仅支持以下型号MCU,如下图,且需要配合WCH-LinkE使用,具体可见WCH-Link使用说明5.2.11小节,WCH-Link使用说明下载链接如下:ht......
  • AVR汇编(五):算术和逻辑指令
    AVR汇编(五):算术和逻辑指令算术运算指令AVR中对于算术运算提供了加法、减法和乘法指令,没有除法指令。ADDADD指令用于执行加法操作,相关的变体指令有:一般加法ADD、带进位加法ADC、16位立即数加法ADIW。例如:LDIR16,0x01;R16=0x01LDIR17,0x02;R17=0x02......
  • 国产MCU-CW32F030开发学习- 移植rtthread-nano
    国产MCU-CW32F030开发学习--移植rtthread-nano硬件平台CW32_48F大学计划板CW32_IOT_EVA物联网开发评估套件RT-ThreadNanoRT-ThreadNano是一个极简版的硬实时内核,它是由C语言开发,采用面向对象的编程思维,具有良好的代码风格,是一款可裁剪的、抢占式实时多任务的RTOS。其内存资源......
  • AVR汇编(四):数据传送指令
    AVR汇编(四):数据传送指令AVR指令主要分为五类:算术和逻辑指令、分支指令、位操作指令、数据传送指令、MCU控制指令,今天我们先来认识其中最常用的数据传送指令。汇编程序的编写、编译和调试学习任何技术都离不开实践,汇编语言也是如此。在正式学习指令前,我们先来体验一下汇编程序从......
  • 痞子衡嵌入式:AppCodeHub - 一站网罗恩智浦MCU应用程序
    近日,恩智浦官方隆重上线了应用程序代码中心(ApplicationCodeHub,简称ACH),这是恩智浦MCUXpresso软件生态的一个重要组成部分。痞子衡之所以要如此激动地告诉大家这个好消息,是因为ACH并不是又一个恩智浦官方githubprojectsite那么简单而已,且听痞子衡细细道来:ACHgithub......
  • AVR汇编(二):AVR架构介绍
    AVR汇编(二):AVR架构介绍ATmega328P介绍ATmega328P是Atmel公司(现Microchip公司)推出的一个基于AVR架构的高性能低功耗单片机,拥有32KB的Flash、1KB的EEPROM以及2KB的SRAM等资源,具体如下表:资源主要特征Flash32KB频率16MHzEEPROM1024B定时器2个8bit,1个16bitP......
  • AVR汇编(一):搭建交叉编译环境
    AVR汇编(一):搭建交叉编译环境几年间,陆陆续续接触了很多热门的单片机,如STC、STM8S、STM32、ESP32等。但一直都是抱着急功近利的心态去学习他们,基本上都是基于库函数和第三方组件进行开发,很少静下心来去研究这些不同内核单片机的底层工作原理。因此我打算接下来一段时间好好研究一番,......
  • 国产MCU-CW32F030开发学习-圆形GC9A01_LCD模块
    国产MCU-CW32F030开发学习-圆形GC9A01_LCD模块硬件平台CW32_48F大学计划板CW32_IOT_EVA物联网开发评估套件1.28寸圆形彩色TFT显示屏高清IPS模块240X240SPI接口GC9A01产品介绍1.28寸圆形IPS彩屏,支持RGB65K色显示,显示色彩丰富240X240分辨率,显示清晰IPS全视角面板,超宽可视范围采用......
  • 国产MCU-CW32F030开发学习-OLED模块
    国产MCU-CW32F030开发学习-OLED模块硬件平台CW32_48F大学计划板CW32_IOT_EVA物联网开发评估套件0.96IIColed模块软件平台KeilMDK5.31IAR串口调试助手IIC总线处理器和芯片间的通信可以形象的比喻成两个人讲话:1、你说的别人得能听懂:双方约定信号的协议。2、你的语速别人得能接受......