AVR单片机指令系统
AVR单片机指令系统

第五章AVR单片机指令系统计算机的指令系统是一套控制计算机操作的代码,称之为机器语言。
计算机只能识别和执行机器语言的指令。
为了便于人们理解、记忆和使用,通常用汇编语言指令来描述计算机的指令系统。
汇编语言指令可通过汇编器翻译成计算机能识别的机器语言。
AVR单片机指令系统是RISC 结构的精简指令集,是一种简明易掌握﹑效率高的指令系统。
SL-DIY02-3 开发实验器使用AT90S8535 单片机,有118 条指令, 而我们所做的11 个实验程序仅用了34 条指令, 我们重点讲这34 条指令, 其余指令就可自学了。
AVR 器件( 指令速查表) 118 条指令器件AT90S2313/2323/2343/2333 ,AT90S4414/4433/4434/8515,AT90S8534/8535 算术和逻辑指令BRCC k C 清零转位指令和位测试指令ADD Rd,Rr 加法BRSH k ≥转SBI P ,b 置位I/O 位ADC Rd,Rr 带进位加BRLO k 小于转(无符号) CBI P ,b 清零I/O 位◇ADIW Rdl,K 加立即数BRMI k 负数转移LSL Rd 左移SUB Rd,Rr 减法BRPL k 正数转移LSR Rd 右移SUBI Rd,Rr 减立即数BRGE k ≥转(带符号) ROL Rd 带进位左循环SBC Rd,Rr 带进位减BRLT k 小于转(带符号) ROR Rd 带进位右循环SBCI Rd,K 带C 减立即数BRHS k H 置位转移ASR Rd 算术右移◇SBIW Rdl,K 减立即数BRHC k H 清零转移SWAP Rd 半字节交换AND Rd,Rr 与BRTS k T 置位转移BSET s 置位SREG ANDI Rd,K 与立即数BRTC k T 清零转移BCLR s 清零SREG OR Rd,Rr 或BRVS k V 置位转移BST Rr,b Rr 的b 位送T ORI Rd,K 或立即数BRVC k V 清零转移BLD Rd T 送Rr 的b 位EOR Rd,Rr 异或BRIE k 中断位置位转移SEC 置位CCOM Rd 取反BRID k 中断位清零转移CLC 清零CNEG Rd 取补数据传送指令SEN 置位NSBR Rd,K 寄存器位置位MOV Rd,Rr 寄存器传送CLN 清零NCBR Rd,K 寄存器位清零◇LDI Rd,K 装入立即数SEZ 置位ZINC Rd 加1 ◇LD Rd, X X 间接取数CLZ 清零ZDEC Rd 减1 ◇LD Rd, X+ X 间接取数后+SEI 置位ITST Rd 测试零或负◇LD Rd,-X X 间接取数先-CLI 清零ICLR Rd 寄存器清零◇LD Rd,Y Y 间接取数SES 置位SSER Rd 寄存器置FF ◇LD Rd,Y+ Y 间接取数后+CLS 清零S 条件转移指令◇LD Rd, –Y Y 间接取数先-SEV 置位V RJMP k 相对转移◇LDD Rd,Y+q Y 间接取数+q CLV 清零V◇IJMP 间接转移(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 清零HRETI 中断返回◇LDS Rd,K 从SRAM 装入NOP 空操作CPSE Rd,Rr 比较相等跳行◇ST X ,Rr X 间接存数SLEEP 休眠指令CP Rd,Rr 比较◇ST X+ ,Rr X 间接存数后+WDR 看门狗复位CPC Rd,Rr 带进位比较◇ST –X,Rr X 间接存数先-90 条指令为CPI Rd,K 与立即数比较◇ST Y ,Rr Y 间接存数Attiny11/12/15/22=SBRC Rr,b 位清零跳行◇ST Y+ ,Rr Y 间接存数后+□+89 条基本指令是SBRS Rr,b 位置位跳行◇ST –Y,Rr Y 间接存数先-AT90S1200SBIC P ,b I/O 位清零跳行◇STD Y+q ,Rr Y 间接存数+qSBIS P ,b I/O 位置位跳行ST Z ,Rr Z 间接存数BRBS s,k SREG 位置位转◇ST Z+ ,Rr Z 间接存数后+ 118 条指令器件= BRBC s,k SREG 位清零转◇ST –Z,Rr Z 间接存数先- ◇+ 90 条指令器件BREQ k 相等转移◇STD Z+q ,Rr Z 间接存数+qBRNE k 不相等转移◇STS k,,Rr 数据送SRAM说明: SL-DIY02-3 开发实验器的 11 个实验程序例子 , 仅用 34 条指令( 以红色表示 )1. 不带进位加法ADD 一不带进位加说明:两个寄存器不带进位 C 标志加,结果送目的寄存器 Rd 。
嵌入式系统入门—03—AVR的指令与汇编系统

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

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

avr单片机教程
AVR单片机是一种常用的微控制器,它由Atmel公司推出。
下面是一个简要的AVR单片机教程,包括AVR单片机的
基本知识和编程技巧。
1. 搭建AVR单片机开发环境:
- 下载并安装AVR编程工具链,例如Atmel Studio或AVR-GCC。
- 连接编程器(如USBasp或AVRISP mkII)和AVR单
片机。
2. 学习AVR单片机的基本原理:
- 了解AVR单片机的体系结构,包括CPU核心和外设。
- 学习AVR单片机的寄存器和位操作,如端口设置和IO 口操作。
- 掌握AVR单片机的时钟系统和时钟分频器。
3. 学习AVR单片机的编程语言:
- C语言是AVR单片机的主要编程语言,需要学习C语言的基本语法和数据类型。
- 掌握AVR单片机的特定编程库和API,如delay函数和IO口操作函数。
4. 学习AVR单片机的编程技巧:
- 学习如何控制IO口,包括输入输出控制和中断处理。
- 掌握定时器和计数器的使用,以实现精确的时间控制。
- 学习如何使用外部中断来响应外部事件。
5. 实践项目:
- 首先进行简单的LED闪烁项目,以检查开发环境和硬件连接是否正常。
- 然后尝试一些基本的输入输出控制实验,如按键控制LED亮灭。
- 接下来尝试更复杂的项目,如控制舵机,驱动LCD屏幕等。
以上是一个基本的AVR单片机教程的大纲,希望能够帮助你入门AVR单片机的学习和应用。
具体的学习细节和项目实践可以通过查阅相关的AVR资料和教程来深入学习。
51单片机STM32单片机AVR单片机的区别

51单片机STM32单片机AVR单片机的区别51 单片机、STM32 单片机、AVR 单片机的区别在单片机的世界里,51 单片机、STM32 单片机和 AVR 单片机都是常见的选择,但它们在性能、架构、应用场景等方面存在着显著的差异。
首先,从性能方面来看,STM32 单片机通常具有更高的处理速度和更大的存储容量。
它采用了先进的 CortexM 内核,工作频率可以达到几百兆赫兹,并且拥有丰富的片上资源,如大量的闪存、RAM、定时器、ADC 等。
这使得 STM32 能够应对复杂的实时控制和数据处理任务,适用于对性能要求较高的应用,比如工业自动化、智能家居、无人机等领域。
相比之下,51 单片机的性能则相对较弱。
它的处理速度较慢,存储资源也比较有限。
然而,51 单片机的优势在于其简单易用、成本低廉,并且在一些对性能要求不高的简单控制场景中仍然能够发挥作用,比如小型家电、玩具等。
AVR 单片机在性能上处于 51 单片机和 STM32 单片机之间。
它具有较高的运行速度和较好的稳定性,同时也具备一定的片上资源。
在一些中等复杂度的控制任务中,AVR 单片机能够提供较为平衡的性能和成本。
在架构方面,51 单片机采用的是经典的 8 位架构,指令集相对简单。
这使得编程相对容易上手,但在处理复杂数据和算法时可能会显得有些力不从心。
STM32 单片机则基于 32 位的 ARM 架构,具有更强大的指令系统和数据处理能力。
其编程方式相对复杂,需要对 32 位编程有一定的了解,但也提供了更多的灵活性和扩展性。
AVR 单片机采用的是增强型 RISC 架构,具有高效的指令执行效率和较低的功耗。
其架构特点使得 AVR 单片机在一些对功耗和性能有一定要求的应用中表现出色。
在开发工具和生态方面,STM32 单片机拥有丰富的开发工具和资源,包括各种集成开发环境(IDE)、库函数、示例代码等。
这大大降低了开发的难度,提高了开发效率。
同时,STM32 单片机在全球范围内拥有广泛的用户群体和社区支持,开发者可以方便地交流和分享经验。
51单片机与 AVR单片机及 PIC单片机的异同

51单片机与 AVR单片机及 PIC单片机的异同在单片机的世界里,51 单片机、AVR 单片机和 PIC 单片机是比较常见且具有代表性的类型。
它们在不同的应用场景中发挥着重要作用,同时也存在着诸多异同。
首先,从内核架构上来看,51 单片机采用的是经典的 8051 内核。
这个内核具有简单、易于理解和掌握的特点,对于初学者来说是一个不错的入门选择。
AVR 单片机则采用了精简指令集(RISC)架构,具有较高的运行速度和效率。
PIC 单片机的内核架构则独具特色,其指令集相对简洁,执行效率也较高。
在指令系统方面,51 单片机的指令较为复杂,指令长度和执行周期不固定。
这在一定程度上增加了编程的难度,但也为一些复杂的操作提供了更多的灵活性。
AVR 单片机的指令集相对简单,大多数指令都是单周期的,这使得程序的执行速度更快,效率更高。
PIC 单片机的指令集也比较精简,而且其指令的执行速度通常较快。
在存储结构上,51 单片机的内部存储空间相对较小,一般需要通过外部扩展来满足较大的存储需求。
AVR 单片机通常具有较大的内部存储空间,包括 Flash 程序存储器和 SRAM 数据存储器,在很多应用中可以减少对外部存储器的依赖。
PIC 单片机的存储结构则因具体型号而异,有些型号具有较大的内部存储空间,而有些则需要外部扩展。
在功耗方面,AVR 单片机和 PIC 单片机在低功耗设计上通常表现得较为出色。
它们具有多种低功耗模式,可以有效地降低系统的能耗,适用于对功耗要求较高的便携式设备和电池供电应用。
相比之下,51单片机在功耗控制方面相对较弱。
在开发工具和环境方面,51 单片机的开发工具相对较为普及和成熟,有众多的编译器和仿真器可供选择,而且价格相对较低。
AVR 单片机也有丰富的开发工具支持,同时其开发环境通常较为友好,易于上手。
PIC 单片机也有配套的开发工具,但在某些方面可能不如 51 单片机和AVR 单片机那么普及。
在价格方面,51 单片机由于其应用广泛,产量大,所以价格通常较为低廉。
AVR单片机BASIC语言

2、输出语句 当单片机根据人们设定的程序要求,对信息进行处理 之后,需要通过I/O端口对外发出控制信号或其他 之后,需要通过I/O端口对外发出控制信号或其他 信息,可以使用下面的语句: PortC = A ,把A这个变量送出到C ,把A这个变量送出到C 同样,要强制某个或些端子的输出状态,也可以使用 逻辑运算的方法实现,例如在送出A 逻辑运算的方法实现,例如在送出A 之前作如下处 理,看看是什么结果: A = A OR &B00001110 ’强制Bit1、 Bit2、 Bit3 置1 ’强制Bit1、 Bit2、 A =A AND &B11110001 ’强制Bit1、 Bit2、 Bit3 置0, ’强制Bit1、 Bit2、 式中的二进制数可以写成十进制数 同样能够直接对某一输出端子实施控制: Set/Reset ProtC.2 ’把PC2这一位置1/置 ’把PC2这一位置1/置0 这个方法亦适用于位变量中的某一位: Set/Reset X.0 ’置位/ ’置位/清0变量X 的Bit 0 变量X
端口配置和特性
1、端口配置 由于单片机强大的功能,使用上的灵活性和多样性,因此在执 行具体任务时,必须明确所指派的工作,在程序设计上称为 “配置”(Config)。通用I/O端口的配置如下: “配置”(Config)。通用I/O端口的配置如下: Config PortB=Output/Input —PortB 用作输出/输入(可以是 用作输出/ 其它端口),这时整个端口用作一个并行I/O用途。 其它端口),这时整个端口用作一个并行I/O用途。 Config PortD.2=Output/Input —端口D的引脚2用于输入/输出 端口D的引脚2用于输入/ (可以是其他端口或引脚)。单独指定一个端子。 DDRB=&B00001111— 指定PB0~PB3 DDRB=&B00001111— 指定PB0~PB3 作为输出用途, PB4~PB7 用于输入用途。DDR是端口的方向寄存器,每个位 用于输入用途。DDR是端口的方向寄存器,每个位 对应控制一个I/O引脚,用于规定该引脚的输入/ 对应控制一个I/O引脚,用于规定该引脚的输入/输出方向,若写 入0,则规定引脚为输入;若写入1,则规定引脚为输出。位控 ,则规定引脚为输入;若写入1 方式用这种形式指定端口用途最好。 用作通用I/O的其他端口(子),可以根据情况使用上面的语句 用作通用I/O的其他端口(子),可以根据情况使用上面的语句 进行安排。
AVR第三章(AVR指令系统)11年上

机器码:10q0 qq0d dddd 1qqq。
13
九、从程序存储器取常数寻址
只有一条指令LPM,也称查表指令。
程序存储器中存放常数字节的地址由寄存器Z的内容确定。 Z寄存器的高15位用于选择字地址,而Z寄存器的最低位D0用 于存放字地址的高低字节。若最低位为0,则选择低字节;若 最低位为1,则选择高字节。
说明:
一个汇编文件包含若干个代码段,若干个数据段 ,若 干个E2PROM 段 ,在汇编时,它们按类型的不同被分别连接 成一个代码段,一个数据段,一个E2PROM段。
18
二、ORG——设置程序、数据在段中的起始位置
语法: .ORG 表达式 ; 表达式的值为定位计数器的值---绝对值(无符号数)。 如果ORG伪指令放在数据段,则设置SRAM定位计数器。 如果该伪指令放在代码段,则设置程序存储器计数器。 如果该伪指令放在E2PROM段,则设置E2PROM定位计数器。 缺省值:代码段:0;数据段:32; E2PROM 段 :0。 注意:程序存储器定位计数器--按字计数; 而E2PROM和SRAM 定位计数器--按字节计数。
19
三、数据定义伪指令
1.BYTE——在SRAM数据区定义字节 语法:LABEL:.BYTE 表达式(表)
2. DB——在程序存储器或E2区中定义字节常数 语法:LABEL: .DB 表达式(表)
tab:.db $3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f ;七段码表
例:LPM ; 操作: R0←(Z),既把以Z为指针的程序存储 器的内容送R0。若Z=$0100,即把地址为$0080的程序存储器 的低字节内容送R0,若Z=$0101,即把地址为$0080的程序存 储器的高字节内容送R0。 先了解一下,指令部分详细讲解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AVR单片机指令系统
计算机的指令系统是一套控制计算机操作的代码,称之为机器语言。
计算机只能识别和执行机器语言的指令。
为了便于人们理解、记忆和使用,通常用汇编语言指令来描述计算机的指令系统。
汇编语言指令可通过汇编器翻译成计算机能识别的机器语言。
AVR单片机指令系统是RISC结构的精简指令集,是一种简明易掌握﹑效率高的指令系统。
SL-DIY02-3开发实验器使用AT90S8535单片机,有118条指令, 而我们所做的11个实验程序仅用了34条指令, 我们重点讲这34条指令, 其余指令就可自学了。
AVR器件(指令速查表) 118条指令器件
AT90S2313/2323/2343/2333 ,AT90S4414/4433/4434/851 5,AT90S8534/8535算术和逻辑指令
BRCC k
C清零转
位指令和位测试指令ADD Rd,Rr 加法
BRSH k
≥转
SBI P,b
置位I/O位ADC Rd,Rr
带进位加
BRLO k
小于转(无符号)
CBI P,b
清零I/O位◇ ADIW Rdl,K 加立即数
BRMI k
负数转移
LSL Rd
左移SUB Rd,Rr 减法
BRPL k
正数转移
LSR Rd
右移SUBI Rd,Rr
减立即数
BRGE k
≥转(带符号)
ROL Rd
带进位左循环SBC Rd,Rr 带进位减
BRLT k
小于转(带符号)
ROR Rd
带进位右循环SBCI Rd,K 带C减立即数
BRHS k
H置位转移
ASR Rd
算术右移◇ SBIW Rdl,K
减立即数
BRHC k
H清零转移
SWAP Rd
半字节交换AND Rd,Rr 与
BRTS k
T置位转移
BSET s
置位SREGANDI Rd,K 与立即数
BRTC k
T清零转移
BCLR s
清零SREGOR Rd,Rr
或
BRVS k
V置位转移
BST Rr,b
Rr的b位送TORI Rd,K 或立即数
BRVC k
V清零转移
BLD Rd
T送Rr的b位EOR Rd,Rr 异或
BRIE k
中断位置位转移
SEC
置位CCOM Rd 取反
BRID k
中断位清零转移CLC
清零CNEG Rd 取补
数据传送指令
SEN
置位NSBR Rd,K 寄存器位置位MOV Rd,Rr
寄存器传送
CLN
清零NCBR Rd,K
寄存器位清零◇ LDI Rd,K 装入立即数SEZ
置位ZINC Rd 加1
◇ LD Rd, X
X间接取数CLZ
清零ZDEC Rd 减1
◇ LD Rd, X+ X间接取数后+SEI
置位ITST Rd
测试零或负
◇ LD Rd,-X X间接取数先-CLI
清零ICLR Rd 寄存器清零
◇ LD Rd,Y
Y间接取数SES
置位SSER Rd 寄存器置FF ◇ LD Rd,Y+ Y间接取数后+CLS
清零S条件转移指令◇ LD Rd,–Y
Y间接取数先-SEV
置位VRJMP k
相对转移
◇ LDD Rd,Y+q
Y间接取数+q
CLV
清零V◇ IJMP 间接转移(Z)
◇ LD Rd, Z
Z间接取数
SET
置位T RCALL k
相对调用
◇ LD Rd, Z+ Z间接取数后+CLT
清零T◇ ICALL 间接调用(Z)
◇ LD Rd,–Z
Z间接取数先-SEH
置位HRET
子程序返回
◇ LDD Rd, Z+q Z间接取数+q CLH
清零HRETI
中断返回
◇ LDS Rd,K
从SRAM装入
NOP
空操作CPSE Rd,Rr 比较相等跳行
◇ ST X ,Rr
X间接存数SLEEP
休眠指令CP Rd,Rr 比较
◇ ST X+ ,Rr
X间接存数后+WDR
看门狗复位CPC Rd,Rr
带进位比较
◇ ST –X ,Rr
X间接存数先-
90条指令为Attiny11/12/15/22=
□+89条基本指令是AT90S1200CPI Rd,K 与立即数比较
◇ ST Y ,Rr
Y间接存数SBRC Rr,b
位清零跳行
◇ ST Y+ ,Rr
Y间接存数后+SBRS Rr,b 位置位跳行
◇ ST –Y ,Rr
Y间接存数先-SBIC P,b I/O位清零跳行
◇ STD Y+q ,Rr
Y间接存数+qSBIS P,b I/O位置位跳行
ST Z ,Rr
Z间接存数BRBS s,k SREG位置位转
◇ ST Z+ ,Rr
Z间接存数后+
118条指令器件=
◇+ 90条指令器件BRBC s,k SREG位清零转
◇ ST –Z ,Rr
Z间接存数先-BREQ k
相等转移
◇ STD Z+q ,Rr
Z间接存数+qBRNE k 不相等转移
◇ STS k,,Rr
数据送SRAM
BRCS k
C置位转
□ LPM
从程序区取数
IN Rd,P
从I/O口取数OUT P, Rdr
存数I/O口
PUSH Rr 压栈
POP Rd, 出栈。