AVR汇编指令集

合集下载

AVR指令表

AVR指令表

(-2K 28KB)(-2K 28KB) 执行同功能的程序 8MHzAVR 224MHz C5不再有作废的产品; 不需要5分钟的紫外线擦除时间;再也用不着因为掩模而无法入睡了;没有10周订货交货时间; 添加新特性易如反掌;容易调试;容易在线升级,几秒钟搞定;AVR指令表2000/5耿德根编数据传送指令位指令和位测试指令MOV Rd,Rr寄存器拷贝LSL Rd逻辑左移LDI Rd,K装入立即数LSR Rd逻辑右移LDS Rd,K直接从SRAM装入ROL Rd通过进位左循环LD Rd,X X变址间接装入R ROR Rd通过进位右循环LD Rd,X+X变址ASR Rd算术右移LD Rd,-X X变址SWAP s半字节交换LD Rd,Y Y变址BSET s置状态寄存器的位LD Rd,Y+Y变址BCLR s SREG中的位清除LD Rd,-Y Y变址SBI P,b置I/O寄存器的位LDD Rd,Y+q Y变址间接装入R CBI P,b清I/O寄存器的位LD Rd,Z Z变址BST Rr,b R中位到SREG中T标志LD Rd,Z+Z变址BLD Rd,b SREG中T标志到R某位LD Rd,-Z Z变址SEC置位进位标志LDD Rd,Z+q Z变址CLC清除进位标志STS K,Rr R数据直接送SRAM SEN置位负数标志ST X,Rr X变址间接装入SRAM CLN清除负数标志ST X+,Rr X变址SEZ置位零标志ST-X,Rr X变址CLZ清零标志位ST Y,Rr Y变址SEI置位全局中断标志ST Y+,Rr Y变址CLI清除全局中断标志ST-Y,Rr Y变址SES置位符号标志STD Y+q,Rr变址间接装入SRAM CLS清除符号标志ST Z,Rr Z变址SEV置位溢出标志位ST Z+,Rr Z变址CLV清除溢出标志ST-Z,Rr Z变址SET置位T标志STD Z+q,Rr Z变址CLT清除T标志LPM装入程序存储器SEH置位半进位标志IN Rd,P I/O口数据装入到R CLH清除半进位标志OUT P,Rr寄存器数据送I/O口NOP空操作PUSH Rr压寄存器到堆栈SLEEP休眠POP Rd堆栈弹出到寄存器WDR看门狗复位汇编器伪指令(伪指令前必须加“ ..” ).BYTE-- 保存寄节到变量.CSEG-- 代码段.DB-- 字节常数.EXIT-- 退出文件.DEF-- 设置寄存器的符号名.INCLUDE--包括号外的文件.DEVICE--定义被汇编的器件.LIST-- 打开列表文件生成器.DSEG-- 数据段.LISTMAC--打开宏表达式.DW-- 字常数.MACR O-- 宏开始.ENDMACRO--宏结束.NOLIST-- 关闭列表文件生成器.EQU-- 设置符号相等于一个表达式.ORG-- 设置程序起始位置.ESEG-- EPROM段.SET-- 设置一个与表达式相等的符号A VR ICE200在线仿真器双龙电子为中国大陆总代理ICE200可仿真的器件为A T90S1200/2313/2333/4433/4414/8515/4434/8535及A Ttiny10/11/12由于仿真器的电源不对外所以ICE200也支持低电压器件A T90S I/O空间定义十六进制地址名称AT90SMEG103名称AT90S1200名称AT90S8515功能(对应8515名称,*为对应MEG103)$3F($5F)SREG SREG SREG状态寄存器$3E($5E)SPH SPH堆栈指针高$3D($5D)SPL SPL堆栈指针低$3C($5C)XDIV XTAL分频控制器 *$3B($5B)RAMPZ GIMSK GIMSK通用中断屏蔽寄存器$3A($5A)EICR GIFR通用中断标态寄存器$39($59)EIMSK TIMSK TIMSK定时器/计数器中断屏敝寄存器$38($58)EIFR TIFR TIFR定时器/计数器中断标志寄存器$37($57)TIMSK定时器/计数器中断屏敝寄存器 * $36($56)TIFR定时器/计数器中断标志寄存器 * $35($55)MCUCR MCUCR MCUCR MCU通用控制寄存器$34($54)MCUSR MCU通用控制寄存器 *$33($53)TCCR0TCCR0TCCR0定时器/计数器0控制寄存器$32($52)TCNT0TCNT0TCNT0定时器/计数器0(8位)$31($51)OCR0定时器/计数器0输出比较寄存器 * $30($50)ASSR异步方式状态寄存器 *$2F($4F)TCCR1A TCCR1A定时器/计数器1控制寄存器A$2E($4E)TCCR1B TCCR1B定时器/计数器1控制寄存器B$2D($4D)TCNT1H TCNT1H定时器/计数器1高字节$2C($4C)TCNT1L TCNT1L定时器/计数器1低字节$2B($4B)OCR1AH OCR1AH定时器/计数器1输出比较寄存器A高字节$2A($4A)OCR1AL OCR1AL定时器/计数器1输出比较寄存器A低字节$29($49)OCR1BH OCR1BH定时器/计数器1输出比较寄存器B高字节$28($48)OCR1BL OCR1BL定时器/计数器1输出比较寄存器B低字节$27($47)ICR1H定时器/计数器1输入捕获寄存器高字节 * $26($46)ICR1L定时器/计数器1输入捕获寄存器低字节 * $25($45)TCCR2ICR1H T/C1输入捕获寄存器高字节$24($44)TCNT2ICR1L T/C1输入捕获寄存器低字节$23($43)OCR2定时器/计数器2输出比较寄存器 * $22($42)$21($41)WDTCR WDTCR WDTCR看门狗定时控制寄存器$20($40)$1F($3F)EEARH EEARH EPROM地址寄存器高字节$1E($3E)EEARL EEAR EEARL EPROM地址寄存器低字节$1D($3D)EEDR EEDR EEDR EPROM数据寄存器$1C($3C)EECR EECR EECR EPROM控制寄存器$1B($3B)PORTA PORTA A口数据寄存器$1A($3A)DDRA DDRA A口数据方向寄存器$19($39)PINA PINA A口输入脚$18($38)PORTB PORTB PORTB B口数据寄存器$17($37)DDRB DDRB DDRB B口数据方向寄存器$16($36)PINB PINB PINB B口输入脚$15($35)PORTC PORTC C口数据寄存器$14($34)ODRC C口数据方向寄存器$13($33)PINC C口输入脚$12($32)P0RTD PORTD PORTD D口数据寄存器$11($31)DDRD DDRD DDRD D口数据方向寄存器$10($30)PIND PIND PIND D口输入脚$0F($2F)SPOR SPOR SPI I/O数据寄存器$0E($2E)SPSR SPSR SPI状态寄存器$0D($2D)SPCR SPCR SPI控制寄存器$0C($2C)UDR UDR UART I/O数据寄存器$0B($2B)USR USR UART状态寄存器$0A($2A)UCR UCR UART控制寄存器$09($29)UBRR UBRR UART波特率寄存器$08($28)ACSR ACSR ACSR模拟比较控制和状态寄存器$07($27)ADMUX ADC多路选择寄存器 *$06($26)ADCSR ADC状态和控制寄存器 *$05($25)ADCH ADC数据寄存器高 *$04($24)ADCL ADC数据寄存器低 *$03($23)PORIE E口数据寄存器 *$02($22)DDRE E口数据方向寄存器 *$01($21)PINE E口输入脚 *$00($20)PINF F口输入脚 *复位和中断向量向量号程序地址源源中断定义1$000/RESET/RESET硬件脚和看门狗复位2$001INT0INT0外部中断请求03$002INT1INT1外部中断请求14$003TIMER1 CAPT TIMER1 CAPT定时器/计数器1捕获事件5$004TIMER1 COMPA TIMER1 COMPA定时器/计数器1比较匹配A6$005TIMER1 COMPB TIMER1 COMPB定时器/计数器1比较匹配B7$006TIMER1 OVF TIMER1 OVF定时器/计数器1溢出8$007TIMER0 OVF TIMER0 OVF定时器/计数器0溢出9$008SPI,STC SPI,STC串行传送完成10$009UART,RX UART,RX UART,RX完成11$00A UART,UDRE UART,UDRE UART数据寄存器空12$00B UART,TX UART,TX UART,TX完成13$00C ANA_COMP ANA_COMP模拟比较器OK-AVR万用串行下载开发实验板OK-AVR万用串行下载开发实验板,采用双龙电子公司的专利技术(专利号:98226094.6),是为ATMEL公司的AVR单片机特别研制的廉价的万用串行下载开发实验工具该板适用于ATMEL公司所有具有串行下载功能的AVR单片机,同时还可做AVR单片机的I/O口A/D D/A音频输出等实验本公司随机提供了ATMEL的集成模拟仿真调试软件,对初学AVR 单片机的设计者,可暂时节省购买较昂贵的实时仿真器及万用编程器的费用; OK-AVR万用串行下载开发实验板有CZ1电源及通讯下载用插座,LED电源指示,下载通讯工作指示;附AVR单片机8根下载信号线; AVR单片机四种DIP封装器件下载锁紧插座;WR划线电位器可作为模拟信号输入用,有音响器,另有用户器件扩展区,焊接你实验需要的器件;AVR集成软件包包括: AVR Assembler 1.30编译器; AVR Studio 3.00; AVR Prog;送一片AT90S1200单片机及集成软件AVR单片机数据资料OK-AVR下载开发实验板使用说明等光盘AVR单片机可下载器件:90S120090S231390S2323/90LS232390S2343/90LS234390S2333/90LS233390S4433/90LS443390S441490LS851590S4434/90LS443490S8535/90LS853590S8555ATtiny10/11/12/15MEGA103/603/161/163(适用所有串行下载信号线的AVR单片机)。

AVR指令集

AVR指令集

间接转移(Z)
LD Rd, Z
Z 间接取数
SET
置位 T
RCALL k 相对调用
LD Rd, Z+ Z 间接取数后
CLT
清零 T
ICALL
间接调用(Z)
LD Rd,–Z
Z 间接取数先
SEH
置位 H
RET
子程序返回
LDD Rd, Z+q Z 间接取数 q
CLH
清零 H
RETI
中断返回
LDS Rd,K
从 SRAM 装入 NOP
AVR 单片机指令系统
3
AVR 单片机指令系统简介
4.4 算术和逻辑指令
4.4.1 加法指令 1 ADD 不带进位加法 说明 两个寄存器不带进位 C 标志加 结果送目的寄存器 Rd 操作 ADD Rd,Rr RdßRd+ Rr O d 31 0 r 31 2 ADC 带进位加法 说明 两个寄存器和 C 标志的内容相加 结果送目的寄存器 Rd 操作 ADC Rd,Rr Rd Rd Rr C 0 d 31 0 r 31 3 ADIW 立即数据加法 字 说明 寄存器对于立即数值 0 63 相加 结果放到寄存器对 操作 ADIW Rdl K Rdh:RdlßRdh:Rdl+K d { 24 26 28 30 } UJ 4 INC 加 1 指令 说明 寄存器 Rd 的内容加 1 结果送目的寄存器 Rd 中 操作 INC Rd RdßRd 1 0 d 31 4.4.2 减法指令 1 SUB 不带进位减法 说明 两个寄存器相减 结果送目的寄存器 Rd 中 操作 SUB Rd,Rr RdßRd Rr 0 d 31 0 r 31 2 SUBI 立即数减法 字节 说明 一个寄存器和常数相减 结果送目的寄存器 Rd 操作 SUBI Rd,K RdßRd—K 16 d 31 0 k 255 3 SBC 带进位减法 说明 两个寄存器随着 C 标志相减 结果放到目的寄存器 Rd 中 4 SBCI 带进位立即数减 说明 寄存器和立即数随着 C 标志相减 结果放到目的寄存器 Rd 中 操作 SBCI Rd K RdßRd K C 16 d 31 0 K 255

嵌入式系统入门—03—AVR的指令与汇编系统

嵌入式系统入门—03—AVR的指令与汇编系统

数据优化
合理使用寄存器和内存,减少数据传输开销。
并行处理
利用AVR的并行处理能力,实现多任务并发 执行。
性能评估与优化建议
性能评估
通过性能测试和基准测试,评估程序的执行效率和性能。
优化建议
根据性能评估结果,提出针对性的优化建议,如采用更高效的算法、优化数据结构等。
THANKS FOR WATCHING
来执行这组指令。
宏展开
02
在宏定义后,可以使用宏展开将宏符号替换为相应的指令序列。
宏参数
03
在宏定义中可以定义参数,并在宏展开时将参数替换为相应的
值。
汇编语言程序结构
程序入口
程序从入口点开始执行,通常在程序的开头定义入口点。
程序主体
程序主体包含程序的逻辑和算法,由一系列指令和数据组成。
程序结束
程序结束时需要返回操作系统或返回到调用程序中。
控制流类指令
用于控制程序的流程,如JMP、CALL、RET等。
02 AVR指令详解
数据传输指令
数据传输指令用于在寄存器和内存之 间、寄存器和寄存器之间传输数据。
例如:MOV, LDS, STS等指令可以实 现数据的传输。
算术指令
算术指令用于执行加、减、乘、除等 算术运算。
例如:ADD, SUB, MUL, 语言的基础,汇编语言是使用助记 符表示机器指令的符号化语言。
指令集与机器码
指令集最终被转换为机器码,由计算机硬件执行。
AVR指令集的特点
精简高效
AVR指令集设计简洁,功能强大,适用于嵌入式系统。
丰富的寻址模式
AVR指令集支持多种寻址模式,如直接寻址、间接寻 址、相对寻址等,方便编程。

汇编语言种类

汇编语言种类

汇编语言种类
汇编语言是一种极为底层的编程语言,其主要功能是将人类易于理解的高级语言转换成机器可执行的低级语言。

随着计算机技术的不断发展,汇编语言的应用范围也越来越广泛。

目前,主要有以下几种汇编语言:
1. x86汇编语言
x86汇编语言是目前应用最广泛的汇编语言之一,特别是在个人电脑和服务器上。

它最早出现在英特尔的16位处理器上,目前已经发展成为可以支持64位处理器的一种汇编语言。

x86汇编语言的使用范围非常广泛,例如操作系统、编译器等大型软件中都会大量使用。

2. ARM汇编语言
ARM汇编语言是一种轻量级、低功耗的汇编语言,它主要应用于嵌入式系统、移动设备、消费类电子产品等领域。

相比x86汇编语言,ARM汇编语言的代码更加紧凑,执行效率更高。

3. MIPS汇编语言
MIPS汇编语言是一种32位RISC(精简指令集计算机)体系结构的汇编语言,主要用于嵌入式系统、网络设备、数字视频等领域。

其指令集极为精简,执行效率较高且可定制性强。

4. AVR汇编语言
AVR汇编语言是一种基于8位微处理器的汇编语言,主要用于嵌入式系统、数字信号处理等领域。

AVR汇编语言的代码具有很强的可读性和易于调试的特点。

总之,汇编语言虽然种类不同,但其基本原理和操作方式都十分
相似,学习一种汇编语言后再学习其他汇编语言就会相对容易了许多。

同时,在实际开发中,也需要根据具体应用场景选择最适合的汇编语言,以获得更好的性能和效率。

ARM汇编指令集

ARM汇编指令集

ARM汇编指令集ARM处理器是一种广泛使用的微处理器架构,它被广泛应用于手机、数字嵌入式设备和其他许多领域。

本文将重点介绍ARM汇编指令集的基础知识和常用的指令集。

ARM指令集ARM指令集可分为三个不同的版本:ARMv6指令集,ARMv7指令集和ARMv8指令集。

最新的ARMv8指令集是对先前版本的扩展,其扩展了指令集,增加了更先进的功能。

在本文中,我们将主要关注ARMv7指令集。

ARMv7指令集分类ARMv7指令集被分为三类: A、R和T系列指令。

下面列出了它们的一些主要功能:•A系列指令集:用于应用程序,包括浮点运算指令。

•R系列指令集:用于实时操作系统,包括分支和比较指令。

•T系列指令集:用于低功耗嵌入式设备。

ARMv7常用指令下面是一些常用的ARMv7指令:1.加法指令ADD Rd, Rn, Operand2指令将目标寄存器Rd设置为Rn和Operand2的和。

2.减法指令SUB Rd, Rn, Operand2指令将目标寄存器Rd设置为Rn减去Operand2的差。

3.逻辑运算指令AND Rd, Rn, Operand2ORR Rd, Rn, Operand2AND指令将目标寄存器Rd设置为Rn与Operand2的按位与。

ORR 指令将目标寄存器Rd设置为Rn与Operand2的按位或。

4.移位指令ASR Rd, Rn, Operand2LSL Rd, Rn, Operand2LSR Rd, Rn, Operand2ROR Rd, Rn, Operand2这是移位指令的几种不同类型。

ASR指令将目标寄存器Rd设置为Rn右移Operand2位之后的值。

LSL指令将目标寄存器Rd设置为Rn左移Operand2位之后的值。

LSR指令将目标寄存器Rd设置为Rn右移Operand2位之后的值。

ROR指令将目标寄存器Rd设置为Rn循环右移Operand2位之后的值。

5.分支指令branch label分支指令跳转到指定标签处的指令。

在ICCAVR中如何编写供C调用的汇编子程序.

在ICCAVR中如何编写供C调用的汇编子程序.

在 ICCA VR 中如何编写供 C 调用的汇编子程序在 ICCA VR 中,参数通过 r16/r17,r18/r19传递。

r16/r17是整体的,传递 uchar 和uint 会全部占用,当 uchar 时, r17空置。

r18/r19同理。

如果还有参数要传递,则是通过 Y 指针指向的软件堆栈传递。

每一个 char 和int 都占用 2个字节,如果是 char ,高字节空置。

也就是说,参数总要占用偶数个空间。

例如传递参数如下:uchar *point1,uchar *point2,uchar data1,uchar data2,uchar data3共 5个参数,那么 point1通过 r16/r17传递, point2通过 r18/r19传递, data1通过Y+0指向的软件堆栈传递, data2通过 Y+2指向的软件堆栈传递, data3通过 Y+4指向的软件堆栈传递。

例子如下:.s 汇编文件; 多字节相加;sum[number]+=add[number];void BytesAdd(uchar *sum,uchar *add,uchar number_BytesAdd::clc ;c<-0mov r26,r16mov r27,r17 ;x<-summov r30,r18mov r31,r19 ;z<-addld r0,y ;r0<-numberbalp:ld r1,xld r2,z+adc r1,r2 ;sum+=add+cst x+,r1 ;store sumdec r0brne balp ;branch if number!=0ret;****************************************************** ; 多字节相减;minuend[number]-=subtrahend[number];void BytesSub(uchar *minuend,uchar *subtrahend,uchar number _BytesSub::clc ;c=0mov r26,r16mov r27,r17 ;x=minuendmov r30,r18mov r31,r19 ;z=subtrahendld r0,y ;r0=numberbslp:ld r1,xld r2,z+sbc r1,r2 ;minuend-=subtrahend+cst x+,r1 ;store minuenddec r0brne bslp ;branch if number!=0ret;*******************************************************C 调用:uchar sum[5],add[5];uchar minuend[5],subtrahend[5];BytesAdd(sum,add,5; //sum+=add,5bytes BytesSub(minuend,subtrahend,5; //minuend-=subtrahend。

51、AVR、PIC、MSP430、ARM五大单片机对比与详解

51、AVR、PIC、MSP430、ARM五大单片机对比与详解

51、AVR、PIC、MSP430、ARM五大单片机全解析8051单片微型计算机简称为单片机,又称为微型控制器,是微型计算机的一个重要分支。

单片机是70年代中期发展起来的一种大规模集成电路芯片,是CPU、RAM、ROM、I/O接口和中断系统于同一硅片的器件。

80年代以来,单片机发展迅速,各类新产品不断涌现,出现了许多高性能新型机种,现已逐渐成为工厂自动化和各控制领域的支柱产业之一。

AVR和PIC都是跟8051结构不同的8位单片机,因为结构不同,所以汇编指令也有所不同,而且区别于使用CISC指令集的8051,他们都是RISC指令集的,只有几十条指令,大部分指令都是单指令周期的指令,所以在同样晶振频率下,较8051速度要快。

另PIC的8位单片机前几年是世界上出货量最大的单片机,飞思卡尔的单片机紧随其后。

ARM实际上就是32位的单片机,它的内部资源(寄存器和外设功能)较8051和PIC、AVR都要多得多,跟计算机的CPU芯片很接近了。

常用于手机、路由器等等。

DSP其实也是一种特殊的单片机,它从8位到32位的都有。

它是专门用来计算数字信号的。

在某些公式运算上,它比现行家用计算机的最快的CPU还要快。

比如说一般32位的DSP能在一个指令周期内运算完一个32位数乘32位数积再加一个32位数。

应用于某些对实时处理要求较高的场合。

AVR高可靠性、功能强、高速度、低功耗和低价位指标,也是单片机占领市场、赖以生存的必要条件。

早期单片机主要由于工艺及设计水平不高,一直是衡量单片机性能的重要、功耗高和抗干扰性能差等原因,所以采取稳妥方案:即采用较高的分频系数对时钟分频,使得指令周期长,执行速度慢以后的CMOS单片机虽然采用提高时钟频率和缩小分频系数等措施,但这种状态并未被彻底改观(51以及51兼容)。

此间虽有某些精简指令集单片机(RISC)问世,但依然沿袭对时钟分频的作法。

AVR单片机的推出,彻底打破这种旧设计格局,废除了机器周期,抛弃复杂指令计算机(CISC)追求指令完备的做法;采用精简指令集,以字作为指令长度单位内容丰富的操作数与操作码安排在一字之中(指令集中占大多数的单周期指令都是如此),取指周期短,又可预取指令,实现流水作业,故可高速执行指令。

51、AVR、PIC、MSP430、ARM五大单片机全解析

51、AVR、PIC、MSP430、ARM五大单片机全解析

51、AVR、PIC、MSP430、ARM五大单片机全解析时间:11-27 15:25 阅读:2071次51是最老的8为单片机。

avr包含很多mega64/48/128/256是16位。

dsp是专门处理数据的高速信号处理的芯片。

fpga是内部集成了逻辑电路的芯片。

简介:据统计,我国的单片机年容量已达1-3亿片,且每年以大约16%的速度增长,但相对于世界市场我国的占有率还不到1%。

这说明单片机应用在我国才刚刚起步,有着广阔的前景。

培养单片机应用人才,特别是在工程技术人员中普及单片机知识有着重要的现实意义。

当今单片机厂商琳琅满目,产品性能各异。

针对具体情况,我们应选何种型号呢?首先,我们来弄清两个概念:集中指令集(CI SC)和精简指令集(RISC)。

采用CISC结构的单片机数据线和指令线分时复用,即所谓冯。

诺伊曼结构。

它的指令丰富,功能较强,但取指令和取数据不能同时进行,速度受限,价格亦高。

采用RISC结构的单片机数据线和指令线分离,即所谓哈佛结构。

这使得取指令和取数据可同时进行,且由于一般指令线宽于数据线,使其指令较同类CISC单片机指令包含更多的处理信息,执行效率更高,速度亦更快。

同时,这种单片机指令多为单字节,程序存储器的空间利用率大大提高,有利于实现超小型化。

8051单片微型计算机简称为单片机,又称为微型控制器,是微型计算机的一个重要分支。

单片机是70年代中期发展起来的一种大规模集成电路芯片,是CPU、RAM、ROM、I/O接口和中断系统于同一硅片的器件。

80年代以来,单片机发展迅速,各类新产品不断涌现,出现了许多高性能新型机种,现已逐渐成为工厂自动化和各控制领域的支柱产业之一。

AVR和pic都是跟8051结构不同的8位单片机,因为结构不同,所以汇编指令也有所不同,而且区别于使用CISC指令集的8 051,他们都是RISC指令集的,只有几十条指令,大部分指令都是单指令周期的指令,所以在同样晶振频率下,较8051速度要快。

单片机全面介绍(8051,avr,pic,msp430,arm,dsp)

单片机全面介绍(8051,avr,pic,msp430,arm,dsp)
PSEN 外部程序存储器读选通信号:在读外部 ROM 时 PSEN 低电平有效,以实现外 部 ROM 单元的读操作。
1、内部 ROM 读取时,PSEN 不动作; 2、外部 ROM 读取时,在每个机器周期会动作两次; 3、外部 RAM 读取时,两个 PSEN 脉冲被跳过不会输出; 4、外接 ROM 时,与 ROM 的 OE 脚相接。 参见图 2—(8051 扩展 2KB EEPROM 电路,在图中 PSEN 与扩展 ROM 的 OE 脚相 接) EA/VPP 访问和序存储器控制信号 1、接高电平时: CPU 读取内部程序存储器(ROM) 扩展外部 ROM:当读取内部程序存储器超过 0FFFH(8051)1FFFH(8052)时自动 读取外部 ROM。 2、接低电平时:CPU 读取外部程序存储器(ROM)。 在前面的学习中我们已知道, 8031 单片机内部是没有 ROM 的,那么在应用 8031 单片机时,这个脚是一直接低电平的。 3、8751 烧写内部 EPROM 时,利用此脚输入 21V 的烧写电压。
ALE/PROG 地址锁存控制信号:在系统扩展时,ALE 用于控制把 P0 口的输出低 8 位 地址送锁存器锁存起来,以实现低位地址和数据的隔离。(在后面关于扩展的课程中我们就 会看到 8051 扩展 EEPROM 电路,在图中 ALE 与 74LS373 锁存器的 G 相连接,当 CPU 对外部进行存取时,用以锁住地址的低位地址,即 P0 口输出。ALE 有可能是高电平也有可 能是低电平,当 ALE 是高电平时,允许地址锁存信号,当访问外部存储器时,ALE 信号负 跳变(即由正变负)将 P0 口上低 8 位地址信号送入锁存器。当 ALE 是低电平时,P0 口上 的内容和锁存器输出一致。关于锁存器的内容,我们稍后也会介绍。

AVR单片机C语言编程

AVR单片机C语言编程
输入端口用于接收外部信号,而输出端口则用于 向外部设备发送信号。
输入输出端口的电压范围通常为0-5V。
输入输出端口的编程实例
• 以下是一个简单的AVR单片机输入输出端口的C语言编程示例
输入输出端口的编程实例
```c
int main(void)
输入输出端口的编程实例
{
DDRB |= (1 << DDB0); // 设置PB0为输出端口
串口发送数据
使用AVR单片机的发送缓冲寄存器,可以将数据发送到串口。
串口接收数据
使用AVR单片机的接收缓冲寄存器,可以接收来自串口的数据。
串口通信的扩展方法
扩展串口通信协议
根据实际需要,可以扩展串口通信协议,增加数据 传输的效率和可靠性。
多设备串口通信
通过多设备串口通信技术,可以实现多个设备之间 的数据传输和共享。
网络化串口通信
将串口通信与网络技术结合,可以实现远程控制和 数据传输。
06
AVR单片机的中断处理控 制
中断处理的工作原理
中断源
01
02
03
中断优先级
中断向量
AVR单片机具有多种中断源,包 括定时器/计数器中断、外部中 断、串行通信中断等。
多个中断同时发生时,需要根据 中断优先级来决定哪个中断先被 处理。
看门狗定时器控制
总结词
通过AVR单片机的C语言编程,可以实现看门狗定时器的控制。
详细描述
AVR单片机的看门狗定时器是一种用于系统恢复的机制。在C语言编程中,可 以使用内置的定时器/计数器或外部中断,实现对看门狗定时器的控制。
系统时钟设置控制
总结词
通过AVR单片机的C语言编程,可以实现对系统时钟 的设定和控制。

AVR芯片入门知识(包括选型、性能、封装、命名等

AVR芯片入门知识(包括选型、性能、封装、命名等

AVR芯片入门知识ATmel 挪威设计中心的A先生与V先生,于97年设计出一款使用RISC指令集的8位单片机,起名为AVR。

AVR 芯片的主要特性,及与其它单片机比较的优点,相信我不用多说了,大家随便找一本参考书就可以看到洋洋洒洒的十几页的介绍。

如果你想看到只有一页的介绍,可以参考我们网站上的资料:AVR 单片机性能简介。

我就AVR单片机分3个档次,四种封装做一个介绍。

AVR单片机系列齐全,可适用于各种不同场合的要求。

AVR单片机有3个档次:低档Tiny系列AVR单片机: 主要有Tiny11/12/13/15/26/28等;中档AT90S系列AVR 单片机: 主要有AT90S1200/2313/8515/8535等;(正在淘汰或转型到Mega 中)查看详细情况高档ATmega系列AVR单片机: 主要有ATmega8/16/32/64/128(存储容量为8/16/32/64/128 KB)以及ATmega8515/8535。

新的型号还有ATmega48/88/168 (存储容量为4/8/16K) 等。

如果你想获得最新的AVR芯片资料,可以下载:2006-11 AVR 芯片选型指南,包含所有AVR芯片的参数信息AVR器件引脚从8脚到64脚(新的芯片高达100脚), 还有各种不同封装供选择。

FLASH,RAM 及配置的不同,形成比较宽的产品线系列。

详细的选型信息可以参考本网站的AVR单片机全系列性能参数表。

AVR前几年已经显示了进军中国市场的决心。

几乎所有的AVR主流芯片,都已经有了官方正规翻译的中文DataSheet(数据手册)。

我们网站整理了国内最完整的中文datasheet供大家下载学习:点击打开AVR数据手册下载界面。

虽然我们网站也收录了双龙翻译的一些旧芯片资料,但建议大家不要使用,错误较多,并且严重的偷工减料。

官方翻译的中文手册比较严谨,但仍可能存在一些小缺陷。

有需要时,请参考英文版本:点击打开AVR数据手册下载界面。

AVR的指令与汇编系统 马潮课件

AVR的指令与汇编系统 马潮课件

第3章AVR的指令与汇编系统传统的8位单片机(如最典型的8051结构的单片机)大都采用复杂指令CISC(Complex Instruction Set Computer)系统体系。

由于CISC结构存在指令系统不等长,指令数多,CPU利用效率低,执行速度慢等缺陷,已不能满足和适应设计高档电子产品和嵌入式系统应用的需要。

作为8位的AVR单片机来讲,除了其具备比较完善和功能强大的硬件结构和组成外,其更重要的是它的内核和指令系统为先进的RISC体系结构,采用了大型快速存取寄存器组(32个通用工作寄存器)、快速的单周期指令系统以及单级流水线等先进技术。

因此,AVR 内核核指令系统的显著特点有:1.16/32位定长指令AVR的一个指令字为16位或32位,其中大部分的指令为16位。

采用定长指令,不仅使取指操作简单,提高了取指令的速度;同时也降低了在取指操作过程中的错误,提高了系统的可靠性。

2.流水线操作AVR采用流水线技术,在前一条指令执行的时候,就取出现行的指令,然后以一个周期执行指令。

大大提高了CPU的运行速度。

3.大型快速存取寄存器组传统的基于累加器的结构单片机(如8051),需要大量的程序代码来完成和实现在累加器和存储器之间的数据传送。

而在AVR单片机中,采用32个通用工作寄存器构成大型快速存取寄存器组,用32个通用工作寄存器代替了累加器(相当有32个累加器),从而避免了传统结构中累加器和存储器之间数据传送造成的瓶颈现象。

由于AVR单片机采用RISC结构,使得它具有高达1MIPS/MHz的高速运行处理能力。

同时也能更好地适合采用高级语言(例如C语言、BASIC语言)来编写系统程序,高效地开发出目标代码,以加快产品进入市场的时间和简化系统的设计、开发、维护和支持。

3.1ATmega16指令综述指令是CPU用于控制各功能部件完成某一指定动作或操作的指示和命令。

指令不同,CPU和各个功能部件完成的动作也不一样,指令的功能也不同。

AVR单片机指令系统

AVR单片机指令系统

第五章AVR单片机指令系统计算机的指令系统是一套控制计算机操作的代码,称之为机器语言。

计算机只能识别和执行机器语言的指令。

为了便于人们理解、记忆和使用,通常用汇编语言指令来描述计算机的指令系统。

汇编语言指令可通过汇编器翻译成计算机能识别的机器语言。

AVR单片机指令系统是RISC结构的精简指令集,是一种简明易掌握﹑效率高的指令系统。

SL-DIY02-3开发实验器使用A T90S8535单片机,有118条指令, 而我们所做的11个实验程序仅用了34条指令, 我们重点讲这34条指令, 其余指令就可自学了。

AVR器件(指令速查表) 118条指令器件1.不带进位加法ADD一不带进位加说明:两个寄存器不带进位C标志加,结果送目的寄存器Rd。

操作: Rd←Rd+ Rr语法:操作码:程序计数器:ADD Rd,Rr O≤d≤31,0≤r≤31 PC←PC+1例子:。

(实践操作程序4411.ASM) 实践操作例子*.ASM,必须编译生成*.OBJ文件才可调试,如要修改*.ASM,必须修改文件属性,去掉*.ASM只读文件属性2.带进位加法ADC-一带进位加说明:两个寄存器和C标志的内容相加,结果送目的寄存器Rd。

操作: Rd←Rd+Rr+C语法:操作码:程序计数器:ADC Rd,Rr 0≤d≤31,0≤r≤31 PC←PC+1例子:(实践操作程序4412.ASM)3.减1指令DEC一减1说明:寄存器Rd的内容减1,结果送目的寄存器Rd中。

操作:Rd←Rd-l语法:操作码:程序计数器:DEC Rd 0≤d≤31 PC←PC十1例子:(实践操作程序4426.ASM)4.立即数比较CPI——带立即数比较说明:该指令完成寄存器Rd和常数的比较操作。

寄存器的内容不改变。

该指令后能使用所有条件转移指令。

操作:Rd-K语法:操作码:程序计数器:CPI Rd, K 16≤d≤31, 0≤ K≤255 PC←PC+ 1 例子:(实践操作程序4463.ASM)5.带立即数与ANDI——立即数逻辑与 ;全1为1,有0即0说明:寄存器Rd的内容与常数逻辑与,结果送目的寄存器Rd。

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集一、数据传送类指令(7种助记符)MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送;MOVX (Move External RAM) 对外部RAM的数据传送;XCH (Exchange) 字节交换;XCHD (Exchange low-order Digit) 低半字节交换;PUSH (Push onto Stack) 入栈;POP (Pop from Stack) 出栈;二、算术运算类指令(8种助记符)ADD(Addition) 加法;ADDC(Add with Carry) 带进位加法;SUBB(Subtract with Borrow) 带借位减法;DA(Decimal Adjust) 十进制调整;INC(Increment) 加1;DEC(Decrement) 减1;MUL(Multiplication、Multiply) 乘法;DIV(Division、Divide) 除法;三、逻辑运算类指令(10种助记符)ANL(AND Logic) 逻辑与;ORL(OR Logic) 逻辑或;XRL(Exclusive-OR Logic) 逻辑异或;CLR(Clear) 清零;CPL(Complement) 取反;RL(Rotate left) 循环左移;RLC(Rotate Left throught the Carry flag) 带进位循环左移;RR(Rotate Right) 循环右移;RRC (Rotate Right throught the Carry flag) 带进位循环右移;SWAP (Swap) 低4位与高4位交换;四、控制转移类指令(17种助记符)ACALL(Absolute subroutine Call)子程序绝对调用;LCALL(Long subroutine Call)子程序长调用;RET(Return from subroutine)子程序返回;RETI(Return from Interruption)中断返回;SJMP(Short Jump)短转移;AJMP(Absolute Jump)绝对转移;LJMP(Long Jump)长转移;CJNE (Compare Jump if Not Equal)比较不相等则转移;DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;JZ (Jump if Zero)结果为0则转移;JNZ (Jump if Not Zero) 结果不为0则转移;JC (Jump if the Carry flag is set)有进位则转移;JNC (Jump if Not Carry)无进位则转移;JB (Jump if the Bit is set)位为1则转移;JNB (Jump if the Bit is Not set) 位为0则转移;JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;NOP (No Operation) 空操作;五、位操作指令(1种助记符)CLR 位清零;SETB(Set Bit) 位置1。

AVR单片机指令集

AVR单片机指令集

ADD Rd, Rr 无进位加法 Rd ← Rd + Rr Z,C,N,V,H 1 ADC Rd, Rr 带进位加法 Rd ← Rd + Rr + C Z,C,N,V,H 1 ADIW Rdl,K 立即数与字相加 Rdh:Rdl ← Rdh:Rdl + K Z,C,N,V,S 2 SUB Rd, Rr 无进位减法 Rd ← Rd - Rr Z,C,N,V,H 1 SUBI Rd, K 减立即数 Rd ← Rd - K Z,C,N,V,H 1 SBC Rd, Rr 带进位减法 Rd ← Rd - Rr - C Z,C,N,V,H 1 SBCI Rd, K 带进位减立即数 Rd ← Rd - K - C Z,C,N,V,H 1 SBIW Rdl,K 从字中减立即数 Rdh:Rdl ← Rdh:Rdl - K Z,C,N,V,S 2 AND Rd, Rr 逻辑与 Rd ← Rd • Rr Z,N,V 1 ANDI Rd, K 与立即数的逻辑与操作 Rd ← Rd • K Z,N,V 1 OR Rd, Rr 逻辑或 Rd ← Rd v Rr Z,N,V 1 ORI Rd, K 与立即数的逻辑或操作 Rd ← Rd v K Z,N,V 1 EOR Rd, Rr 异或 Rd ← Rd ⊕ Rr Z,N,V 1 COM Rd 1 的补码 Rd ← 0xFF − Rd Z,C,N,V 1 NEG Rd 2 的补码 Rd ← 0x00 − Rd Z,C,N,V,H 1 SBR Rd,K 设置寄存器的位 Rd ← Rd v K Z,N,V 1 CBR Rd,K 寄存器位清零 Rd ← Rd • (0xFF - K) Z,N,V 1 INC Rd 加一操作 Rd ← Rd + 1 Z,N,V 1 DEC Rd 减一操作 Rd ← Rd − 1 Z,N,V 1 TST Rd 测试是否为零或负 Rd ← Rd • Rd Z,N,V 1 CLR Rd 寄存器清零 Rd ← Rd ⊕ Rd Z,N,V 1 SER Rd 寄存器置位 Rd ← 0xFF None 1 MUL Rd, Rr 无符号数乘法 R1:R0 ← Rd x Rr Z,C 2 MULS Rd, Rr 有符号数乘法 R1:R0 ← Rd x Rr Z,C 2 MULSU Rd, Rr 有符号数与无符号数乘法 R1:R0 ← Rd x Rr Z,C 2 FMUL Rd, Rr 无符号小数乘法 R1:R0 ← (Rd x Rr) << 1 Z,C 2 FMULS Rd, Rr 有符号小数乘法 R1:R0 ← (Rd x Rr) << 1 Z,C 2 FMULSU Rd, Rr 有符号小数与无符号小数乘法 R1:R0 ← (Rd x Rr) << 1 Z,C 2跳转指令RJMP k 相对跳转 PC ← PC + k + 1 无 2 IJMP 间接跳转到(Z) PC ← Z 无 2 RCALL k 相对子程序调用 PC ← PC + k + 1 无 3 ICALL 间接调用(Z) PC ← Z 无 3 RET 子程序返回 PC ← STACK 无 4 RETI 中断返回 PC ← STACK I 4 CPSE Rd,Rr 比较,相等则跳过下一条指令if (Rd = Rr) PC ← PC + 2 or 3 无 1 / 2 / 3 CP Rd,Rr 比较 Rd − Rr Z, N,V,C,H 1 CPC Rd,Rr 带进位比较 Rd − Rr − C Z, N,V,C,H 1 CPI Rd,K 与立即数比较 Rd − K Z, N,V,C,H 1 SBRC Rr, b 寄存器位为"0” 则跳过下一条指令if (Rr(b)=0) PC ← PC + 2 or 3 无 1 / 2 / 3 SBRS Rr, b 寄存器位为"1” 则跳过下一条指令if (Rr(b)=1) PC ← PC + 2 or 3 无 1 / 2 / 3 SBIC P, b I/O 寄存器位为"0” 则跳过下一条指令if (P(b)=0) PC ← PC + 2 or 3 无 1 / 2 / 3 SBIS P, b I/O 寄存器位为"1” 则跳过下一条指令if (P(b)=1) PC ← PC + 2 or 3 无 1 / 2 / 3 BRBS s, k 状态寄存器位为"1” 则跳过下一条指令if (SREG(s) = 1) then PC←PC+k + 1 无 1 / 2 BRBC s, k 状态寄存器位为"0” 则跳过下一条指令if (SREG(s) = 0) then PC←PC+k + 1 无 1 / 2 BREQ k 相等则跳转if (Z = 1) then PC ← PC + k + 1 无 1 / 2 BRNE k 不相等则跳转if (Z = 0) then PC ← PC + k + 1 无 1 / 2 BRCS k 进位位为"1” 则跳转if (C = 1) then PC ← PC + k + 1 无 1 / 2 BRCC k 进位位为"0” 则跳转if (C = 0) then PC ← PC + k + 1 无 1 / 2 BRSH k 大于或等于则跳转 if (C = 0) then PC ← PC + k + 1 无 1 / 2 BRLO k 小于则跳转if (C = 1) then PC ← PC + k + 1 无 1 / 2 BRMI k 负则跳转if (N = 1) then PC ← PC + k + 1 无 1 / 2 BRPL k 正则跳转if (N = 0) then PC ← PC + k + 1 无 1 / 2 BRGE k 有符号数大于或等于则跳转if (N ⊕ V= 0) then PC ← PC + k + 1 无 1 / 2 BRLT k 有符号数负则跳转if (N ⊕ V= 1) then PC ← PC + k + 1 无 1 / 2 BRHS k 半进位位为"1” 则跳转if (H = 1) then PC ← PC + k + 1 无 1 / 2 BRHC k 半进位位为"0” 则跳转if (H = 0) then PC ← PC + k + 1 无 1 / 2 BRTS k T 为"1” 则跳转if (T = 1) then PC ← PC + k + 1 无 1 / 2 BRTC k T 为"0” 则跳转if (T = 0) then PC ← PC + k + 1 无 1 / 2 BRVS k 溢出标志为"1” 则跳转if (V = 1) then PC ← PC + k + 1 无 1 / 2 BRVC k 溢出标志为"0” 则跳转if (V = 0) then PC ← PC + k + 1 无 1 / 2 274 ATmega8(L)2486N–AVR–07/04指令操作数说明操作标志# 时钟数BRIE k 中断使能再跳转if ( I = 1) then PC ← PC + k + 1 无 1 / 2 BRID k 中断禁用再跳转if ( I = 0) then PC ← PC + k + 1 无 1 / 2数据传送指令MOV Rd, Rr 寄存器间复制 Rd ← Rr 无 1 MOVW Rd, Rr 复制寄存器字 Rd+1:Rd ← Rr+1:Rr 无 1 LDI Rd, K 加载立即数 Rd ← K 无 1 LD Rd, X 加载间接寻址数据 Rd ← (X) 无 2 LD Rd, X+ 加载间接寻址数据,然后地址加一 Rd ← (X), X ← X + 1 无 2 LD Rd, - X 地址减一后加载间接寻址数据 X ← X - 1, Rd ← (X) 无 2 LD Rd, Y 加载间接寻址数据 Rd ← (Y) 无 2 LD Rd, Y+ 加载间接寻址数据,然后地址加一 Rd ← (Y), Y ← Y + 1 无 2 LD Rd, - Y 地址减一后加载间接寻址数据 Y ← Y - 1, Rd ← (Y) 无 2 LDD Rd,Y+q 加载带偏移量的间接寻址数据 Rd ← (Y + q) 无 2 LD Rd, Z 加载间接寻址数据 Rd ← (Z) 无 2 LD Rd, Z+ 加载间接寻址数据,然后地址加一 Rd ← (Z), Z ← Z+1 无 2 LD Rd, -Z 地址减一后加载间接寻址数据 Z ← Z - 1, Rd ← (Z) 无 2 LDD Rd, Z+q 加载带偏移量的间接寻址数据 Rd ← (Z + q) 无 2 LDS Rd, k 从SRAM 加载数据 Rd ← (k) 无 2 ST X, Rr 以间接寻址方式存储数据 (X) ← Rr 无 2 ST X+, Rr 以间接寻址方式存储数据,然后地址加一 (X) ← Rr, X ← X + 1 无 2 ST - X, Rr 地址减一后以间接寻址方式存储数据 X ← X - 1, (X) ← Rr 无 2 ST Y, Rr 加载间接寻址数据 (Y) ← Rr 无 2 ST Y+, Rr 加载间接寻址数据,然后地址加一 (Y) ← Rr, Y ← Y + 1 无 2 ST - Y, Rr 地址减一后加载间接寻址数据 Y ← Y - 1, (Y) ← Rr 无 2 STD Y+q,Rr 加载带偏移量的间接寻址数据 (Y + q) ← Rr 无 2 ST Z, Rr 加载间接寻址数据 (Z) ← Rr 无 2 ST Z+, Rr 加载间接寻址数据,然后地址加一 (Z) ← Rr, Z ← Z + 1 无 2 ST -Z, Rr 地址减一后加载间接寻址数据 Z ← Z - 1, (Z) ← Rr 无 2 STD Z+q,Rr 加载带偏移量的间接寻址数据 (Z + q) ← Rr 无 2 STS k, Rr 从SRAM 加载数据 (k) ← Rr 无 2 LPM 加载程序空间的数据 R0 ← (Z) 无 3 LPM Rd, Z 加载程序空间的数据 Rd ← (Z) 无 3 LPM Rd, Z+ 加载程序空间的数据,然后地址加一 Rd ← (Z), Z ← Z+1 无 3 SPM 保存程序空间的数据 (Z) ← R1:R0 无 -IN Rd, P 从I/O 端口读数据 Rd ← P 无 1 OUT P, Rr 输出端口 P ← Rr 无 1 PUSH Rr 将寄存器推入堆栈 STACK ← Rr 无 2 POP Rd 将寄存器从堆栈中弹出 Rd ← STACK 无 2位和位测试指令SBI P,b I/O 寄存器位置位 I/O(P,b) ← 1 无 2 CBI P,b I/O 寄存器位清零 I/O(P,b) ← 0 无 2 LSL Rd 逻辑左移 Rd(n+1) ← Rd(n), Rd(0) ← 0 Z,C,N,V 1 LSR Rd 逻辑右移 Rd(n) ← Rd(n+1), Rd(7) ← 0 Z,C,N,V 1 ROL Rd 带进位循环左移 Rd(0)←C,Rd(n+1)← Rd(n),C←Rd(7) Z,C,N,V 1 ROR Rd 带进位循环右移 Rd(7)←C,Rd(n)← Rd(n+1),C←Rd(0) Z,C,N,V 1 ASR Rd 算术右移 Rd(n) ← Rd(n+1), n=0..6 Z,C,N,V 1 SWAP Rd 高低半字节交换 Rd(3..0)←Rd(7..4),Rd(7..4)←Rd(3..0) 无 1 BSET s 标志置位 SREG(s) ← 1 SREG(s) 1 BCLR s 标志清零 SREG(s) ← 0 SREG(s) 1 BST Rr, b 从寄存器将位赋给T T ← Rr(b) T 1 BLD Rd, b 将T 赋给寄存器位 Rd(b) ← T 无 1 SEC 进位位置位 C ← 1 C 1 CLC 进位位清零 C ← 0 C 1 SEN 负标志位置位 N ← 1 N 1 CLN 负标志位清零 N ← 0 N 1 SEZ 零标志位置位 Z ← 1 Z 1 CLZ 零标志位清零 Z ← 0 Z 1 SEI 全局中断使能 I ← 1 I 1 CLI 全局中断禁用 I ← 0 I 1 SES 符号测试标志位置位 S ← 1 S 1 CLS 符号测试标志位清零 S ← 0 S 1 SEV 2 的补码溢出标志置位 V ← 1 V 1 CLV 2 的补码溢出标志清零 V ← 0 V 1 SET SREG 的T 置位 T ← 1 T 1指令集概述275ATmega8(L)2486N–AVR–07/04指令操作数说明操作标志# 时钟数CLT SREG 的T 清零 T ← 0 T 1 SEH SREG 的半进位标志置位 H ← 1 H 1 CLH SREG 的半进位标志清零 H ← 0 H 1 MCU 控制指令NOP 空操作 无 1 SLEEP 休眠( 见对睡眠功能的特殊说明) 无 1 WDR 复位看门狗( 见对WDR/timer 的特殊说明) 无 1。

用汇编语言编写AVR单片机程序入门教程

用汇编语言编写AVR单片机程序入门教程

用汇编语言编写AVR单片机程序入门教程作者:伟纳电子 Gguoqing原文发表在伟纳电子论坛:/forum_view.asp?forum_id=25&view_id=54381.硬件准备实验系统:ME300全系列单片机开发板。

实验芯片: ATmega8515L或Atmega8515。

2.软件准备AVRStudio V4.11 AVRStudio 是一个完整的开发工具,包括编辑、仿真功能,利用这个工具我们可以编辑源程序代码,并在AVR器件上运行。

ME300_V3.1版控制软件/down_view.asp?id=315上述软件有收录在ME300随机光盘中3.AVR 汇编语言学习环境的建立安装AVRStudio和ME300_V3.1版控制软件。

1)创建一个新项目:打开AVR Studio软件,选择“Project”菜单中的“New project”命令,弹出下面窗口。

这里新建一个名为work1的项目。

并在“Location”栏目中确定存放文件的路径与相应的文件夹。

点击“Finish”存盘后出现下面界面。

2)编辑汇编源程序:用汇编语言编写的源程序如下:;8只LED的跑马灯演示程序.INCLUDE "8515DEF.INC" ;CPU配置文件.ORG $0000RJMP RESET ;上电复位跳转到主程序.ORG $0013 ;代码段定位,跳过中断区RESET:LDI R16,LOW(RAMEND) ;设置堆栈指针OUT SPL,R16LDI R16,HIGH(RAMEND)OUT SPH,R16LDI R16,0B11111111 ;设置PA口为输出端口OUT DDRA,R16START:LDI R17,0B11111110 ;PA0输出低电平,LED0亮。

OUT PORTA,R17LDI R16,50 ;延时1秒RCALL DELAYLDI R17,0B11111101 ;PA1输出低电平,LED1亮。

AVR单片机C语言调用汇编指令集的宏

AVR单片机C语言调用汇编指令集的宏

AVR单片机C语言调用汇编指令集的宏/**************************************** AVR单片机C语言调用汇编指令集的宏 ****************************************/#ifndef _ASM_H_#define _ASM_H_/*********************** 算术和逻辑指令 ***********************/// ### ADD ### 两个寄存器相加 (dest = dest + src)#define ASM_ADD(dest, src) asm volatile ("add %0, %1" : "=r" (dest) : "r" (src))// ### ADC ### 两个寄存器带进位位相加 (dest = dest + src + carry)#define ASM_ADC(dest, src) asm volatile ("adc %0, %1" : "=r" (dest) : "r" (src))// ### ADC_zero ### Add Carry T o Register dest (dest = dest + carry), Special Form Of ADC#define ASM_ADCzero(dest) asm volatile ("adc %0, __zero_reg__" : "=r" (dest) :)// ### ADIW ### 立即数与字相加 (word = word - const)#define ASM_ADIW(word, const) asm volatile ("adiw %0, %1" : "=w" (word) : "I" (const))// ### SUB ### 两个寄存器相减 (dest = dest - src)#define ASM_SUB(dest, src) asm volatile ("sub %0, %1" : "=r" (dest) : "r" (src))// ### SUBI ### 立即数与寄存器相减 (reg = reg - const)#define ASM_SUBI(reg, const) asm volatile ("subi %0, %1" : "=d" (reg) : "M" (const))// ### SBC ### 两个寄存器带进位位相减 (dest = dest - src - carry)#define ASM_SBC(dest, src) asm volatile ("sbc %0, %1" : "=r" (dest) : "r" (src))// ### SBC_zero ### Subtract Carry From Register dest (dest = dest - carry), Special Form Of SBC#define ASM_SBC_zero(dest) asm volatile ("sbc %0, __zero_reg__ " : "=r" (dest) :)// ### SBIW ### 字与立即数相减 (reg = reg - const)#define ASM_SBIW(word, const) asm volatile ("sbiw %0, %1" : "=w" (word) : "I" (const))// ### AND ### 两个寄存器逻辑与 (dest = dest & src)#define ASM_AND(dest, src) asm volatile ("and %0, %1" : "=r" (dest) : "r" (src))// ### ANDI ### 寄存器与常数逻辑与 (reg = reg & const)#define ASM_ANDI(reg, const) asm volatile ("andi %0, %1" : "=d" (reg) : "M" (const))// ### OR ### 两个寄存器逻辑或 (dest = dest | src)#define ASM_OR(dest, src) asm volatile ("or %0, %1" : "=r" (dest) : "r" (src))// ### ORI ### 寄存器与常数逻辑或 (reg = reg | const)#define ASM_ORI(reg, const) asm volatile ("ori %0, %1" : "=d" (reg) : "M" (const))// ### EOR ### 两个寄存器异或 (dest = dest ^ src)#define ASM_EOR(dest, src) asm volatile ("eor %0, %1" : "=r" (dest) : "r" (src))// ### COM ### 1的补码 (reg = 0xFF - reg)#define ASM_COM(reg) asm volatile ("com %0" : "=r" (reg) : "0" (reg))// ### NEG ### 2的补码 (reg = 0x00 - reg)#define ASM_NEG(reg) asm volatile ("neg %0" : "=r" (reg) : "0" (reg))// ### SBR ### 寄存器的某些位置位 (reg = reg | mask)#define ASM_SBR(reg, mask) asm volatile ("sbr %0, %1" : "=d" (reg) : "M" (mask))// ### CBR ### 寄存器的某些位清零 (reg = reg & ~mask)#define ASM_CBR(reg, mask) asm volatile ("sbr %0, %1" : "=d" (reg) : "M" (mask))// ### INC ### 加一 (reg = reg + 1)#define ASM_INC(reg) asm volatile ("inc %0" : "=r" (reg) : "0" (reg))// ### DEC ### 减一Rd ← (reg = reg - 1)#define ASM_DEC(reg) asm volatile ("dec %0" : "=r" (reg) : "0" (reg))// ### TST ### 测试为0或负 (reg = reg & reg)#define ASM_TST(reg) asm volatile ("tst %0" : "=r" (reg) : "0" (reg))// ### CLR ### 清零寄存器 (reg = reg ^ reg)#define ASM_CLR(reg) asm volatile ("clr %0" : "=r" (reg) : "0" (reg))// ### SER ### 置位寄存器 (reg = 0xFF)#define ASM_SER(reg) asm volatile ("ser %0" : "=r" (reg) : "0" (reg))// ### MUL ### 无符号数相乘 (r1:r0 = ureg1 * ureg2)#define ASM_MUL(ureg1, ureg2) asm volatile ("mul %0, %1" :: "r" (ureg1), "r" (ureg2))// ### MULS ### 有符号数相乘 (r1:r2 = sreg1 * sreg2)#define ASM_MULS(sreg1, sreg2) asm volatile ("muls %0, %1" :: "d" (sreg1), "d" (sreg2))// ### MULSU ### 有符号数与无符号数相乘(r1:r2 = sreg * ureg)#define ASM_MULSU(sreg, ureg) asm volatile ("mulsu %0, %1" :: "a" (sreg), "a" (ureg))// ### FMUL ### 无符号小数相乘 (r1:r2 = (ureg1 * ureg2) << 1)#define ASM_FMUL(ureg1, ureg2) asm volatile ("fmul %0, %1" :: "a" (ureg1), "a" (ureg2))// ### FMULS ### 有符号小数相乘 (r1:r2 = (sreg1 * sreg2) << 1)#define ASM_FMULS(sreg1, sreg2) asm volatile ("fmuls %0, %1" :: "a" (sreg1), "a" (sreg2))// ### FMULSU ### 无符号小数与有符号小数相乘(r1:r2 = (sreg * ureg) << 1)#define ASM_FMULSU(sreg, ureg) asm volatile ("fmulsu %0, %1" :: "a" (sreg), "a" (ureg))/****************** 跳转指令 ******************/// ### ICALL ### 相对调用到(Z) (PC = Z)#define ASM_ICALL() asm volatile ("icall" :: )/********************* 数据传输指令 *********************/// ### MOV ### 寄存器之间数据转移 (dest = src)#define ASM_MOV(dest, src) asm volatile ("mov %0, %1" : "=r" (dest) : "r" (src))// ### MOVW ### 拷贝寄存器字 (dest = src)#define ASM_MOVW(dest, src) asm volatile ("movw %0, %1" : "=r" (dest) : "r" (src))// ### LDI ### 加载立即数 (reg = const)#define ASM_LDI(reg, const) asm volatile ("ldi %0, %1" : "=d" (reg) : "M" (const))// ### LD ### 使用 X, Y, Z 指针间接加载 (reg = *ptr)#define ASM_LD(reg, ptr) asm volatile ("ld %0, %a1" : "=r" (reg) : "e" (ptr))// ### LD ### 1.预减X, Y, Z, 2.使用 X 指针间接加载 (ptr = ptr - 1, reg = *ptr)#define ASM_decLD(reg, ptr) asm volatile ("ld %0, -%a1" : "=r" (reg) : "e" (ptr))// ### LD ### 1.使用 X, Y, Z 指针间接加载, 2.指针后加 (reg = *ptr, ptr = ptr + 1)#define ASM_LDinc(reg, ptr) asm volatile ("ld %0, %a1+" : "=r" (reg) : "e" (ptr))// ### STS ### 直接存储到SRAM// 变量存储到SRAM的用法:static uint8_t var; uint8_t value = 123; ASM_STS (&var, value);// 值存储到SFR的用法: uint8_t value = 5;ASM_STS (_SFR_MEM_ADDR (SPMCR), value);#define ASM_STS(addr, reg) asm volatile ("sts %0, %1" : : "i" (addr), "r" (reg))// ### LPM ### 加载程序存储器 (R0 = *Z)#define ASM_LPM() asm volatile ("lpm" ::)// ### LPM ### 加载程序存储器 (reg = *Z)#define ASM_LPM_Z(reg) asm volatile ("lpm %0, Z" : "=r" (reg))// ### LPM ### 加载程序存储器并执行后加操作 (reg = *Z, Z = Z + 1)#define ASM_LPM_Zinc(reg) asm volatile ("lpm %0, Z+" : "=r" (reg))// ### SPM ### 存储程序存储器 (*Z = R1:R0)#define ASM_SPM() asm volatile ("spm" ::)/*********************** 位和位测试指令 ***********************/// ### SBI ### 置位I/O寄存器的某一位#define ASM_SBI(port, pin) asm volatile ("sbi %0, %1" :: "I"(_SFR_IO_ADDR(port)), "I" (pin))// ### CBI ### 清除I/O寄存器的某一位#define ASM_CBI(port, pin) asm volatile ("cbi %0, %1" :: "I" (_SFR_IO_ADDR(port)), "I" (pin))// ### LSL ### 逻辑左移 (reg = reg << 1)#define ASM_LSL(reg) asm volatile ("lsl %0" : "=r" (reg) : "0" (reg))// ### LSR ### 逻辑右移 (reg = reg >> 1)#define ASM_LSR(reg) asm volatile ("lsr %0" : "=r" (reg) : "0" (reg))// ### ROL ### 通过进位位向左循环#define ASM_ROL(reg) asm volatile ("rol %0" : "=r" (reg) : "0" (reg))// ### ROR ### 通过进位位向右循环#define ASM_ROR(reg) asm volatile ("ror %0" : "=r" (reg) : "0" (reg))// ### ASR ### 算术右移 (Wie LSR Aber nur mit Bit 6 bis Bit 0)#define ASM_ASR(reg) asm volatile ("asr %0" : "=r" (reg) : "0" (reg))// ### SWAP ### 高4位与低4位交换 (reg(0...3) = reg(4...7), reg(4...7) = reg(0...3))#define ASM_SWAP(reg) asm volatile ("swap %0" : "=r" (reg) :"0" (reg))// ### BSET ### 置位标志位 (SREG(flagnumber) = 1)#define ASM_BSET(flagnumber) asm volatile ("bset %0" :: "I" (flagnumber))// ### BCLR ### 清零标志位 (SREG(flagnumber) = 0)#define ASM_BCLR(flagnumber) asm volatile ("bclr %0" :: "I" (flagnumber))// ### BST ### 将寄存器的某一位保存到T (T = reg(bitnumber)) #define ASM_BST(reg, bitnumber) asm volatile ("bst %0, %1" :: "r" (reg), "I" (bitnumber))// ### BLD ### 将T 加载到寄存器的某一位 (reg(bitnumber) = T)#define ASM_BLD(reg, bitnumber) asm volatile ("bld %0, %1" : "=r" (reg) : "I" (bitnumber))// ### SEC ### 置位进位位 (REG.C = 1)#define ASM_SEC() asm volatile ("sec" :: )// ### CLC ### 清零进位位 (REG.C = 0)#define ASM_CLC() asm volatile ("clc" :: )// ### SEN ### 置位负数标志位 (REG.N = 1)#define ASM_SEN() asm volatile ("sen":: )// ### CLN ### 清零负数标志位 (REG.N = 0)#define ASM_CLN() asm volatile ("cln" :: )// ### SEZ ### 置位0标志位 (REG.Z = 1)#define ASM_SEZ() asm volatile ("sez" :: )// ### CLZ ### 清零0标志位 (REG.Z = 0)#define ASM_CLZ() asm volatile ("clz" :: )// ### SEI ### 全局中断标志使能 (REG.I = 1)#define ASM_SEI() asm volatile ("sei" :: )// ### CLI ### 全局中断标志禁止 (REG.I = 0)#define ASM_CLI() asm volatile ("cli" :: )// ### SES ### 置位符号测试标志位 (REG.S = 1) #define ASM_SES() asm volatile ("ses" :: )// ### CLS ### 清零符号测试标志位 (REG.S = 0) #define ASM_CLS() asm volatile ("cls" :: )// ### SEV ### 置位2的补码溢出标志 (REG.V = 1) #define ASM_SEV() asm volatile ("sev" :: )// ### CLV ### 清零2的补码溢出标志 (REG.V = 0) #define ASM_CLV() asm volatile ("clv" :: )// ### SET ### 置位位拷贝存储标志 (REG.T = 1) #define ASM_SET() asm volatile ("set" :: )// ### CLT ### 清零位拷贝存储标志 (REG.T = 0)#define ASM_CLT() asm volatile ("clt" :: )// ### SEH ### 置位半进位标志 (REG.H = 1) #define ASM_SEH() asm volatile ("seh" :: )// ### CLH ### 清零半进位标志 (REG.H = 0) #define ASM_CLH() asm volatile ("clh" :: )/******************** MCU控制指令 ********************/// ### BREAK ### 只用于片上调试#define ASM_BREAK() asm volatile ("break" :: )// ### NOP ### No 无操作#define ASM_NOP() asm volatile ("nop" :: )// ### SLEEP ### 睡眠#define ASM_SLEEP() asm volatile ("sleep" :: )// ### WDR ### 看门狗复位#define ASM_WDR() asm volatile ("wdr" :: )#endif。

AVR汇编指令

AVR汇编指令

AVR指令算术指令:加法(4)ADD Rd,Rr (Rd)<- (Rd)+(Rr);d,r =【0-31】ADC Rd,Rr (Rd)<- (Rd)+ (Rr)+ C ;d,r =【0-31】ADIW Rdl,K (Rdh:Rdl)<- (Rdh:Rdl)+K ;d =【24,26,28,30】 K =【0-63】INC Rd (Rd)<- (Rr)+ 1 ;d =【0-31】减法(6)SUB Rd,Rr (Rd)<- (Rd)- (Rr);d,r =【0-31】SUBI Rd,K (Rd)<- (Rd)- K ;d =【16-31】K =【0-255】SBC Rd,Rr (Rd)<- (Rd)- (Rr)- C ;d,r =【0-31】SBCI Rd,K (Rd)<- (Rd)- K - C ;d =【16-31】K =【0-255】 SBIW Rdl,K (Rdh:Rdl)<- (Rdh:Rdl)- K ;d =【24,26,28,30】 K =【0-63】DEC Rd (Rd)<- (Rr)- 1 ;d =【0-31】乘法(1)MUL Rd,Rr (R1)<-H(Rd*Rr)(R0)<-L(Rd*Rr);d,r =【2-31】逻辑运算与(4)AND Rd,Rr (Rd)<- (Rd)&(Rr);d,r =【0-31】ANDI Rd,K (Rd)<- (Rd)& K ;d =【16-31】K =【0-255】CBR Rd,K (Rd)<- (Rd)& (FF- K);d =【16-31】K =【0-255】 TST Rd (Rd)<- (Rd)&(Rr);d =【16-31】Z标记位或(4)OR Rd,Rr (Rd)<- (Rd)|(Rr);d,r =【0-31】ORI Rd,K (Rd)<- (Rd)| K ;d =【16-31】K =【0-255】SBR Rd,K (Rd)<- (Rd)| K ;d =【16-31】K =【0-255】 SER Rd (Rd)<- FF ;d =【16-31】异或(2)EOR Rd,Rr (Rd)<- (Rd)⊕(Rr);d,r =【0-31】CLR Rd (Rd)<- 00 ;d =【0-31】比较(3)CP Rd,Rr (Rd)- (Rr);d,r =【0-31】CPI Rd,K (Rd)- K ;d =【16-31】K =【0-255】CPC Rd,Rr (Rd)- (Rr)- C ;d,r =【0-31】取反(1)COM Rd (Rd)<- FF -(Rd);d =【0-31】取补(1)NEG Rd (Rd)<- 00 -(Rd);d =【0-31】无条件跳转(3)RJMP K (PC)<- (PC)+1+K ;K =【-2k - 2k】IJMP (PC)<- (Z);Z : 16BITJMP K (PC)<- K ;K =【0-4M】条件跳转(20)BRBS S , K BRBC S , K 状态寄存器判断位;S =【0-7】K =【-64,63】BREQ K BRNE K 为零标记不为零BRIE K BRID K 全局中断开关BRTS K BRTC K 标记位为零BRHS K BRHC K 半进位置位为零BRGM K BRLT K 带符号大于等于小于BRSH K BRLO K 无符号大于等于小于BRCS K BRCC K 进位置位为零BRVS K BRVC K 补码溢出置位为零BRMI K BRPL K 负数正数条件跳行(5)CPSE Rd,Rr 相等时跳行;d,r =【0-31】SBRS Rd,b 该为置位时跳行;d =【0-31】S =【0-7】 SBRC Rd,b 该为零时跳行;d =【0-31】S =【0-7】SBIC P,b 该为零时跳行;P =【0-31】S =【0-7】 SBIS P,b 该为置位时跳行;P =【0-31】 S =【0-7】调用(5)RCALL K (PC)<- (PC)+1+K ;K =【-2k - 2k】ICALL 跳转到Z指向地址;16 bitCALL K 0-4MRET 子程序返回RETI 中断返回栈(2)PUSH Rd 进入堆栈;d =【0-31】POP Rd 出栈;d =【0-31】直接数据传送(4)MOV Rd,Rr (Rd)<-(Rr);d,r =【0-31】LDS Rd,K (Rd)<-(K);d =【0-31】STS K,Rd (K)<-(Rd);d =【0-31】LDI Rd,K (Rd)<- K ;d =【16-31】K =【0-255】间接数据传送(22)X寄存器:LD Rd,X (Rd)<-((X));d =【0-31】LD Rd,X+ (Rd)<-((X)),(X)+=1 ;d =【0-31】LD Rd,-X (X)- =1,(Rd)<-((X));d =【0-31】ST X,Rd ((X))<-(Rd);d =【0-31】ST X+,Rd ((X))<-(Rd),(X)+=1 ;d =【0-31】ST -X,Rd (X)- =1,((X))<-(Rd);d =【0-31】Y寄存器:LD Rd,YLD Rd,Y+LD Rd,-YLDD Rd,Y+Q (Rd)<-((Y+Q));d =【0-31】Q =【0-63】 ST Y,RdST Y+,RdST -Y,RdSTD Y+Q,RdZ寄存器:LD Rd,ZLD Rd,Z+LD Rd,-ZLDD Rd,Z+QST Z,RdST Z+,RdST -Z,RdSTD Z+Q,Rd寻址(1)LMP 利用Z寄存的地址寻址(注意lsb位要为0读低8位数1读高8位数)I/O口(2)IN Rd,P (Rd)<- (P);d =【0-31】 P =【0-63】 OUT P,Rd (P)<- (Rd);d =【0-31】 P =【0-63】移位(6)LSL Rd (Rd)<<1, C<-MSB ,LSB<-0 ;d =【0-31】LSR Rd (Rd)>>1, C<-LSB ,MSB<-0 ;d =【0-31】ROL Rd (Rd)<<1 ,LSB<-C , C<-MSB ;d =【0-31】ROR Rd (Rd)>>1 ,MSB<-C , C<-LSB ;d =【0-31】SWAP Rd 半字节交换;d =【0-31】ASR Rd 7位不变,其余右移 , C<-LSB ;d =【0-31】T标记位(2)BLD Rd,b 将位读入T标记;d =【0-31】 b =【0-7】BST Rd,b 将T标记写入位;d =【0-31】 b =【0-7】状态位设置(20)BSET S BCLR S 设置状态寄存器指定位; S =【0-7】SEI CLI 状态标记设置或清除SEH CLHSET CLTSES CLSSEN CLNSEV CLVSEZ CLZSEC CLCSBI P,b CBI P,b 32IO口指定位设置清楚;P =【0-31】 b =【0-7】其他WDR 看门狗复位SLEEP 休眠NOP 空指令。

avr芯片

avr芯片

avr芯片AVR(Advanced Virtual RISC,高级虚拟精简指令集计算机)是由Atmel公司开发的一种微控制器芯片系列。

AVR是一种低功耗、高性能的单片机芯片,广泛应用于各种嵌入式系统和电子设备中。

AVR芯片采用RISC(Reduced Instruction Set Computing,精简指令集计算机)架构,指令集简洁,但依然具备强大的功能和灵活性。

AVR芯片通常由一个16位处理器核心、闪存、电子可擦除/可编程只读存储器(EEPROM)、SRAM和各种外设等构成,可以用于实现各种复杂的控制和计算任务。

AVR芯片具有许多优势。

首先,它们具有低功耗特性,可以在电池供电的嵌入式系统中提供长时间的使用寿命。

其次,AVR芯片具有较高的性能,内部时钟频率可以达到MHz级别,可以处理较为复杂的任务。

此外,AVR芯片具有较少的指令个数和简洁的指令格式,使得程序编写和调试更加容易。

此外,AVR芯片还提供了多种低功耗和节能的功能以及各种通信接口,如UART、SPI和I2C等。

AVR芯片广泛应用于各个领域。

在消费电子方面,AVR芯片被用于家电控制、智能手机、音频设备、游戏机和电视机等产品。

在工业自动化领域,AVR芯片则被应用于机器控制、仪表仪器和过程控制等设备中。

此外,AVR芯片还被广泛应用于电力电子、通信设备、医疗仪器、交通工具和安防设备等领域。

对于开发者来说,使用AVR芯片进行系统开发具有一定的优势。

首先,AVR芯片的开发工具链成熟且广泛可用,包括编译器、调试器、模拟器和开发板等。

其次,AVR芯片的编程语言非常灵活,可以使用C语言、汇编语言或者AVR专用的高级语言进行开发。

此外,AVR芯片还有大量的开发资源和社区支持,开发者可以轻松获取相关的学习资料和技术支持。

总之,AVR芯片是一种功能强大、高性能和低功耗的微控制器芯片,广泛应用于各个领域。

它的简洁指令集和灵活的开发环境使得开发者可以轻松地实现各种控制和计算任务。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算术和逻辑指令
•ADD 加法
•ADC 带进位加
•ADIW 加立即数
•SUB 减法
•SUBI 减立即数
•SBC 带进位减
•SBCI 带C 减立即数
•SBIW 减立即数
•AND 与
•ANDI 与立即数
•OR 或
•ORI 或立即数
•EOR 异或
•COM 取反
•NEG 取补
•SBR 寄存器位置位
•CBR 寄存器位清零
•INC 加1
•DEC 减1
•TST 测试零或负
•CLR 寄存器清零
•SER 寄存器置FF
•MUL 乘法
•MULS 有符号数乘法
•MULSU 有(无)符号数乘法
•FMUL 小数乘法
•FMULS 有符号数乘法
•FMULSU 有(无)符号小数乘法条件转移指令
•RJMP 相对转移
•IJMP 间接转移
•JMP 长转移
•RCALL 相对调用
•ICALL 间接调用
•CALL 长调用
•RET 子程序返回
•RETI 中断返回
•CPSE 比较相等跳行
•CP 比较
•CPC 带进位比较
•CPI 带立即数比较
•SBRC 位清零跳行
•SBRS 位置位跳行
•SBIC I/O 位清零跳行
•SBIS I/O 位置位跳行
•BRBS SREG 位置位转
•BRBC SREG 位清零转
•BREQ 相等转移
•BRNE 不相等转移
•BRCS C 置位转
•ELPM 扩展装载程序存储器•EIJMP 扩展间接跳转
•ESPM 扩展存储程序存储器
•EICALL延长间接调用子程序
•BRCC C 清零转
•BRSH 转
•BRLO 小于转(无符号)
•BRMI 负数转移
•BRPL 正数转移
•BRGE 转(带符号)
•BRLT 小于转(带符号)
•BRHS H 置位转移
•BRHC H 清零转移
•BRTS T 置位转移
•BRTC T 清零转移
•BRVS V 置位转移
•BRVC V 清零转移
•BRIE 中断位置位转移
•BRID 中断位清零转移
数据传送指令
•MOV 寄存器传送
•MOVW 拷贝寄存器字
•LDI 装入立即数
•LD X X 间接取数
•LD X+ X 间接取数后
•LD -X X 间接取数先
•LD Y Y 间接取数
•LD Y+ Y 间接取数后+
•LD –Y Y 间接取数先
•LDD Yq Y 间接取数 q
•LD Z Z 间接取数
•LD Z+ Z 间接取数后
•LD –Z Z 间接取数先
•LDD Zq Z 间接取数 q
•LDS 从SRAM 装入
•ST X X 间接存数
•ST X+ X 间接存数后
•ST –X X 间接存数先
•ST Y Y 间接存数
•ST Y+ Y 间接存数后
•ST –Y Y 间接存数先
•STD Yq Y 间接存数 q
•ST Z Z 间接存数
•ST Z+ Z 间接存数后
•ST –Z Z 间接存数先
•STD Zq Z 间接存数 q
•STS 数据送SRAM
•LPM 装程序存储器
•LPM Z Z
•LPM Z+ Z+
•SPM 存储程序存储器•IN I/O 口输入
•OUT 送I/O 口
•PUSH 压栈
•POP 出栈
位指令和位测试指令
•SBI 置位I/O 位
•CBI 清零I/O 位
•LSL 左移
•LSR 右移
•ROL 带进位左循环
•ROR 带进位右循环
•ASR 算术右移
•SWAP 半字节交换
•BSET 置位SREG
•BCLR 清零SREG
•BST Rr 的b 位送T
•BLD T 送Rr 的b 位
•SEC 置位C
•CLC 清零C
•SEN 置位N
•CLN 清零N
•SEZ 置位Z
•CLZ 清零Z
•SEI 置位I
•CLI 清零I
•SES 置位S
•CLS 清零S
•SEV 置位V
•CLV 清零V
•SET 置位T
•CLT 清零T
•SEH 置位H
•CLH 清零H
•NOP 空操作
•SLEEP 休眠
•WDR 看门狗复位
90 条指令器件:Attiny11/12/15/22
89 条指令器件:AT90S1200
118 条指令器件:AT90S2313/2323/2343/2333 AT90S4414/4433/4434/8515 AT90S8534/8535 121 条指令器件:ATmega603/103
130 条指令器件:ATmega161。

相关文档
最新文档