第四章AVR单片机指令系统.PDF

0596、《AVR高速嵌入式单片机原理与应用》

收藏

资源目录
跳过导航链接。
压缩包内文档预览:(预览前20页/共92页)
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:6127029    类型:共享资源    大小:15.36MB    格式:ZIP    上传时间:2017-11-24 上传人:超****计 IP属地:浙江
4.8
积分
关 键 词:
avr 高速 嵌入式 单片机 原理 应用 利用 运用
资源描述:
0596、《AVR高速嵌入式单片机原理与应用》,avr,高速,嵌入式,单片机,原理,应用,利用,运用
内容简介:
第四章 AVR 单片机指令系统 4 1 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 第四章 A V R 单片机指令系统 说明:为了使读者和用户迅速掌握 A V R 指令系统的功能, 边学习, 边实践, 希望大家先学习 根据我们的实际教学经验, 有的书籍是根据英文原文翻译, 程序及说明可能不合中国人习惯, 又由于印刷等多种原因, 内容有出入, 学起来较难我们是参考有关资料, 并在实际工作中验证, 并编写有关测试程序( 含中文注释) , 在模拟调试软件窗口观察通过, 或在实时仿真器或在 S L - A V R下载开发下载实验器上验证通过, 把测试实验程序刻在光盘上, 保证用户学习 实验时少走弯路 所以我们先学习系统软件的使用, 然后学指令系统, 用户一边学习A V R 指令系统, 一边学习系统软件编程调试, 这样使指令功能流向看得见摸得着, 学习起来有声有色, 达到事半功倍的效果当学完所有指令, 你也学会了用软件编程开发调试我们的想法希望你能去边学边实践, 并得到你的认可, 我们就谢谢了 A V R单片机每条指令对应的实验源程序见文件夹 计算机的指令系统是一套控制计算机操作的代码称之为机器语言计算机只能识别和执行机器语言的指令为了便于人们理解记忆和使用通常用汇编语言指令来描述计算机的指令系统汇编语言指令可通过汇编器翻译成计算机能识别的机器语言 A V R 单片机指令系统是R I S C结构的精简指令集是一种简明易掌握效率高的指令系统 A V R 单片机指令系统速查表, 不同器件使用不同的指令表, 见附录 3 : (1) 89 条指令器件:AT90S1200,最基本指令; (2) 90 条指令器件():Attiny11/12/15/22; 90 条指令=+89 条基本指令 (3) 118 条指令器件():AT90S2313/2323/2343/2333,/4414/4433/4434/8515/90S8534/8535 ;118 条指令=+ 90 条; (4) 121 条指令器件()ATmega603/103; 121 条指令=+ 118 条; (5) 130 条指令器件()ATmega161; 130 条指令=+121 条 A V R 大多数执行时间为单个时钟周期这一章主要分析A V R 单片机指令系统的功能和使用方法下表为常用 A V R 器件指令表: 第四章 AVR 单片机指令系统 4 2 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN A V R 器件( 指令速查表) 1 1 8 条指令器件 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 置位C COM Rd 取反 BRID k 中断位清零转移 CLC 清零C NEG Rd 取补 数据传送指令 SEN 置位N SBR Rd,K 寄存器位置位 MOV Rd,Rr 寄存器传送 CLN 清零N CBR Rd,K 寄存器位清零 LDI Rd,Rr 装入立即数 SEZ 置位Z INC Rd 加1 LD Rd, X X间接取数 CLZ 清零Z DEC Rd 减1 LD Rd, X+ X间接取数后 SEI 置位I TST Rd 测试零或负 LD Rd,-X X间接取数先 CLI 清零I CLR Rd 寄存器清零 LD Rd,Y Y间接取数 SES 置位S SER 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 清零H RETI 中断返回 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间接存数先 CPI 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间接存数q SBIS P,b I/O位置位跳行 ST Z ,Rr Z 间接存数 90 条指令为Attiny11/12/15/22= +89 条基本指令是AT90S1200 BRBS s,k SREG 位置位转 ST Z+ ,Rr Z 间接存数后+ BRBC s,k SREG 位清零转 ST Z ,Rr Z 间接存数先- BREQ k 相等转移 STD Z+q ,Rr Z 间接存数+q 118 条指令器件= + 90 条指令器件 BRNE k 不相等转移 STS k,Rr 数据送 SRAM BRCS k C 置位转 LPM 从程序区取数 IN Rd,P 从/O 口取数 OUT P, Rdr 存数 I/O口 PUSH Rr 压栈 POP Rd, 出栈 第四章 AVR 单片机指令系统 4 3 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 4 . 1 指令格式 4 . 1 . 1 汇编指令 汇编语言源文件是由汇编语言代码和汇编程序指令所组成的 A S C I I 字符文件 一汇编语言源文件 汇编语言源文件包括指令助记符标号和伪指令指令助记符和伪指令常带操作数 每条程序输入行首先是标号, 标号为字母数字串并带一个冒号使用标号的目的是为了跳转和转移指令及在程序存储器和 S R A M中定义变量名 程序输入行有下列四种形式 1 ) 标号伪指令操作数注释义 2标号指令操作数注释 ( 3 ) 注释 4 空行 注释有下列形式文字 括号内的项是任选的用于注释的分号及到行结尾的文字汇编器是忽略的标号 指令和伪指令在后面有详细说明 例子 L a b e l . E Q U V a r 1 = 1 0 0 置 V a r 1 等于 1 0 0 伪指令 . E Q U V a r 2 = 2 0 0 置 V a r 2 等于 2 0 0 t e s t : r j m p t e s t 无限循环指令 纯注释行 另一个注释行 注意不限制有关标号伪指令注释或指令的列位置 二指令助记符 汇编器认可指令集中的指令助记符指令集中综合了助记符并给出了参数 操作数有下列形式 R d R O R 3 1 或 R 1 6 R 3 1 取决于指令 R r R O R 3 1 b 常数0 7可能是常数表达式 S 常数0 7可能是常数表达式 p 常数( 0 3 1 6 3 可能是常数表达式 K 常数0 2 5 5 可能是常数表达式 k 常数值范围取决于指令可能是常数表达式 q 常数0 6 3可能是常数表达式 4 . 1 . 2 汇编器伪指令 汇编器提供一些伪指令伪指令并不直接转换成操作数而是用于调整存储器中程序的位置定义宏初始化存储器等全部伪指令在表 4 . 2 中给出 1 B Y T E保存字节到变量 B Y T E伪指令保存存储的内容到 S R A M中为了能提供所要保存的位置B Y T E伪指令前应有标号 该伪指令带一个表征被保存字节数的参数该伪指令仅用在数据段内 见伪指令 C S E G D S E G和 E S E G注意必须带一个参数字节数的位置不需要初始化 语法L A B E LB Y T E表达式 第四章 AVR 单片机指令系统 4 4 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 2 C S E G 一代码段 C S E G 伪指令定义代码段的开始位置 一个汇编文件包含几个代码段 这些代码段在汇 编时被连接成一个代码段在代码段中不能使用 B Y T E伪指令典型的缺省段为代码段代码段有一个字定位计数器O R G 伪指令用于放置代码段和放置程序存储器指定位置的常数 C S E G 伪指令不带参数 语法C S E G 表 4 . 2 伪指令表 序号 伪指令 说 明 序号 伪指令 说 明 1 B Y T E 保存字节到变量 1 0 E S E G E 2 P R O M 段 2 C S E G 代码段 1 1 E X I T 退出文件 3 D B 定义字节常数 1 2 I N C L U D E 从指定文件开始读 4 D E F 设置寄存器的符号名 1 3 L I S T 打开列表文件 5 D E V I C E 定义被汇编的器件 1 4 L I S T M A C 打开宏表达式 6 D S E G 数据段 1 5 M A C R O 宏开始 7 D W 定义字常数 1 6 N O L I S T 关闭列表文件 8 E N D M A C R O 宏结束 1 7 O R G 设置程序起始位置 9 E Q U 符号相等于表达式 1 8 S E T 赋值给一个标号 3 D B在程序存储器或 E 2 P R O M 存储器中定义字节常数 D B 伪指令保存数据到程序存储器或 E 2 P R O M 存储器中为了提供被保存的位置在 D B 伪指令前必须有标号D B伪指令可带一个表达式表至少有一个表达式D B伪指令必须放在代码段或E 2 P R O M 段 表达式表是一系列表达式 用逗号分隔 每个表达式必须是一 1 2 8 2 5 5之间的有效值如果表达式有效值是负数则用 8 位 2 的补码放在程序存储器或E 2 P R O M 存储器中如果 D B 伪指令用在代码段并且表达式表多于一个表达式则以两个字节组合成一个字放在程序存储器中如果表达式表是奇数那么最后一个表达式将独自以字格式放在程序存储器中而不管下一行汇编代码是否是单个 D B 伪指令 语法L A B E LD B 表达式 4 D E F设置寄存器的符号名 D E F伪指令允许寄存器用符号代替一个定义的符号用在程序中并指定一个寄存器, 一个寄存器可以赋几个符号符号在后面程序中能再定义 语法D E F 符号一寄存器 5 D E V I C E定义被汇编的器件 D E V I C E伪指令允许用户告知汇编器被执行的代码使用那种器件如果使用该伪指令若在代码中有指定的器件不提供的指令则提示一个警告如果代码段或E 2 P R O M 段的尺寸大于被指定器件的尺寸也提示警告如果不使用 D E V I C E伪指令则假定器件提供所有的指令也不限制存储器尺寸 语法 . D E V I C E A T 9 0 S 1 2 0 0 A T 9 0 S 2 3 1 3 A T 9 0 S 4 4 1 4 A T 9 O S 8 5 1 5 6 D S E G一数据段 D S E G 伪指令定义数据段的开始一个汇编文件能包含几个数据段这些数据段在汇编时 被连接成一个数据段一个数据段正常仅由 B Y T E伪指令和标号组成数据段有自己的定 位字节计数器O R G 伪指令被用于在 S R A M指定位置放置变量D S E G伪指令不带参数 语法 . D S E G 7 D W 在程序存储器和 E 2 P R O M 存储器中定义字常数 D W 伪指令保存代码到程序存储器或 E 2 P R O M存储器为了提供被保存的位置在 D W 伪指 令前必须有标号D W 伪指令可带一个表达式表至少有一个表达式D W 伪指令必须放在 代码段或 E 2 P R O M 段表达式表是一系列表达式用逗号分隔每个表达式必须是一3 2 7 6 8 6 5 5 3 5 之间的有效值如果表达式有效值是负数则用 1 6 位 2 的补码放在程序存储器中 第四章 AVR 单片机指令系统 4 5 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 语法L A B E L . D W表达式表 8 E N D M A C R O 一宏结束 E N D M A C R O 伪指令定义宏定义的结束该伪指令并不带参数参见 M A C R O 宏定义伪指令 语法 . E N D M A C R O 9 E Q U 设置一个符号相等于一个表达式 E Q U 伪指令赋一个值到标号该标号用于后面的表达式用 E Q U 伪指令赋值的标号是一个 常数不能改变或重定义 语法 . E Q U 标号= 表达式 1 0 E S E G - E 2 P R O M 段 E S E G伪指令定义 E 2 P R O M 段的开始位置一个汇编文件包含几个E 2 P R O M 段这些 E 2 P R O M 段在汇编时被连接成一个E 2 P R O M 段在 E 2 P R O M 段中不能使用B Y T E伪指令E 2 P R O M 段有一 个字节定位计数器O R G 伪指令用于放置 E 2 P R O M 存储器指定位置的常数E S E G伪指令不带参数 语法 . E S E G 1 1 E X I T 退出文件 E X I T伪指令告诉汇编器停止汇编该文件正常情况下汇编器汇编到文件的结束如果 E X I T出现在包括文件中则汇编器从文件中 I N C L U D E 伪指令行继续汇编 语法 . E X I T 1 2 I N C L U D E 包括另外的文件 I N C L U D E 伪指令告诉汇编器从指定的文件开始读然后汇编器汇编指定的文件直到文件 结束或遇到 E X I T伪指令一个包括文件也可能自己用 I N C L U D E 伪指令来表示 语法 . I N C L U D E “文件名” 1 3 L I S T 打开列表文件生成器 L I S T伪指令告诉汇编器打开列表文件生成器汇编器生成一个汇编源代码地址和操作 代码的文件列表列表文件生成器缺省值是打开该伪指令总是与N O L I S T 伪指令一起出现 用于生成列表或汇编源文件有选择的列表 语法 . L I S T 1 4 L I S T M A C 打开宏表达式 L I S T M A C 伪指令告诉汇编器当调用宏时用列表生成器在列表文件中显示宏表达式 缺省值仅是在列表文件中显示宏调用参数 语法 . L I S T M A C 1 5 M A C R C O 一宏开始 M A C R O 伪指令告诉汇编器这是宏开始M A C R O 伪指令带宏名和参数当后面的程序中写 了宏名被表达的宏程序在指定位置被调用一个宏可带1 0 个参数这些参数在宏定义中 用09 代表当调用一个宏时参数用逗号分隔宏定义用 E N D M A C R O伪指令结束 缺省值为汇编器的列表生成器仅列表宏调用为了在列表文件中包括宏表达式必须使 用 L I S T M A C 伪指令在列表文件的操作代码域内宏用 a + 作记号 语法 . M A C R O 宏名 1 6 N O L I S T - - 关闭列表文件生成器 N O L I S T 伪指令告诉汇编器关闭列表文件生成器正常情况下汇编器生成一个汇编源 代码地址和操作代码文件列表缺省时为打开列表文件但是可用该伪指令禁止列表为 了使被选择的汇编源文件部分产生列表文件该伪指令可以与L I S T伪指令一起使用 语法 . N O L I S T 1 7 O R G 一设置程序起始位置 O R G 伪指令设置定位计数器一个绝对值设置的值为一个参数如果 O R G 伪指令放在数 据段则设置S R A M定位计数器如果该伪指令放在代码段则设置程序存储器计数器如 果该伪指令放在 E 2 P R O M 段则设置 E 2 P R O M 定位计数器如果该伪指令前带标号在相同 的源代码行则标号由参数值给出代码和 E 2 P R O M 定位计数器的缺省值是零而当汇编启 第四章 AVR 单片机指令系统 4 6 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 动时S R A M定位计数器的缺省值是 3 2 因为寄存器占有地址为 0 3 1注意E 2 P R O M 和 S R A M定位计数器按字节计数而程序存储器定位计数器按字计数 语法 . O R G表达式 1 8 S E T 设置一个与表达式相等的符号 S E T 伪指令赋值给一个标号这个标号能用在后面的表达式中用 S E T 伪指令赋值的 标号在后面的程序中能改变 语法 . S E T 标号 = 表达式 41 3表达式 汇编器包括一些表达式表达式由操作数运算符和函数组成所有的表达式内部为 3 2 位 一操作数 1 用户定义的标号该标号给出了放置标号位置的定位计数器的值 2 用户用S E T 伪指令定义的变量 3 用户用E Q U 伪指令定义的常数 4 整数常数包括下列几种形式 十进制缺省值 1 0 2 5 5 十六进制数二进制表示法0 x 0 a , $ 0 a , 0 x f f . $ f f 二进制数0 b 0 O 0 0 1 0 1 O , 0 b l l l l l l l l 5 P C 程序存储器定位计数器的当前值 二 函 数 1 L O W 表达式返回一个表达式的低字节 2 H I G H 表达式返回一个表达式的第二个字节 3 B Y T E 2 表达式与 H I G H函数相同 4 B Y T E 3 表达式返回一个表达式的第三个字节 5 B Y T E 4 表达式返回一个表达式的第四个字节 6 L W R D 表达式返回一个表达式的 0 1 5 位 ( 7 ) H W R D 表达式返回一个表达式的 1 6 3 1 位 8 P A G E 表达式返回一个表达式的 1 6 2 1 位 9 E X P 2 表达式返回 2 表达式 1 0 L O G 2 表达式返回 L O G 2 表达式的整数部分 三 运算符 汇编器提供的部分运算符见表 3 . 3 越高的运算符优先级越高表达式可以用括号括 起来并且与括号外任意表达式所组合的表达式总是有效的 第四章 AVR 单片机指令系统 4 7 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 第四章 AVR 单片机指令系统 4 8 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 4 . 2 寻址方式 指令的一个重要组成部分是操作数 指令给出参与运算的数据的方式称为寻址方式 A V R 单片机指令操作数的寻址方式有以下多种单寄存器直接寻址双寄存器直接寻址I O直接寻址数据直接寻址带位移的数据间接寻址数据间接寻址带预减量的数据间接寻址带后增量的数据间接寻址常量寻址程序直接寻址程序间接寻址程序相关寻址 一单一寄存器直接寻址 由指令指出一个寄存器的内容作为操作数这种寻址方式称为单寄存器直接寻址寄存器寻址所选的工作寄存器为寄存器文件中的 0 - 3 1区域指令字的低 5位 D O D 4 位指出所用的寄存器R d 4 1 为单寄存器直接寻址示意图 二双寄存器直接寻址 双寄存器直接寻址方式同单寄存器直接寻址方式 指令字中指出两个寄存器 R d 和 R r 指令字的 D O D 4 位指出 R d 寄存器D 5 D 9 位指出 R r 寄存器结果存在 R d 寄存器中 图 4 2 为双寄存器直接寻址示意图 图 4 1 单寄存器直接寻址示意图图 4 2 双寄存器直接寻址示意图 三I O直接导址 在 A V R 单片机的寄存器区中映射有I O 寄存器指令可以直接对I O 空间进行操作操作数包含在指令字中的D O D 5 位中同时指令字中还包含了目的或源寄存器地址 n 图 4 3 为I O 直接寻址示意图 四数据直接寻址 数据直接寻址方式便于直接从 S R A M存储器中存取数据数据直接寻址为双字指令一个 1 6位的数据地址放在低字指令中 高字指令中的 R d R r 指定了目的寄存器或源寄存器 存储器存取的范围限制在 S R A M当前 6 4 字节页图 4 4 为数据直接寻址示意图 五带位移的数据间接寻址 带位移的数据间接寻址方式是利用变址寄存器Y 或 Z 及指令字中的位移量共同决定被存取S R A M存储器的地址操作数的地址由 Y或 Z寄存器的内容加上指令字 D O D S 位给出的位移量 a给出指令字中的 n 为目的或源寄存器地址图 4 5 为带位移的数据间接寻址示意图 图 4 . 3 I O 直接寻址示意图 图 4 . 4 数据直接寻址示意图 第四章 AVR 单片机指令系统 4 9 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 六数据间接寻址 由指令指出某一个寄存器的内容作为操作数的地址该寻址方式称为寄存器间接寻址 A V R 单片机中用变址寄存器 X Y 或 Z 作为规定的寄存器并对 S R A M存储器存取操作称为 数据间接寻址操作数的地址在变址寄存器X Y 或 Z 中图 4 6 为数据间接寻址示意图 图 4 . 5 带位移的数据间接寻址示意图 图 4 . 6 数据间接寻址示意图 七带预减量数据间接寻址 同数据间接寻址但寄存器 X Y 或 Z 的内容在操作之前先被减1 相减后的内容为操作数的地址这种寻址方式特别适用于访问矩阵查表等应用图 4 7 为带预减量的数据间接寻址示意图 八带后增量的数据间接导址 同数据间接寻址方式但寄存器 X Y 或 Z 的内容在操作后被加1 而操作数地址的内容为寄存器增量之前的内容这种寻址方式特别适用于访问矩阵查表等应用图 4 8 为带后增量的数据间接寻址示意图 九常量寻址 常量寻址主要从程序存储器取常量 程序存储器中放常量字节的地址由寄存器Z 的内容确定Z 寄存器的高 1 5 位用于选择字地址0 4 K而 Z 寄存器的最低位D 0 用于写字地址的高低字节若最低位被清除L S B 0则选择低字节若最低位被置位L S B 1则选择高字节例如 L P M 指令图 4 9 为常量寻址示意图 程序直接寻址 程序直接寻址方式中操作数包含在指令字中即操作数以指令字的形式存放于程序存储器中程序在双指令字中操作数指定的立即地址处执行如 J M P C A L L指令图 4 . 1 0 为程序直接寻址示意图 图 4 . 7 带预减量的数据间接寻址示意图 图 4 . 8 带后增量的数据间接寻址示意图 第四章 AVR 单片机指令系统 4 10 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 图 4 . 9 常量寻址示意图 图 4 . 1 0 程序直接寻址示意图 十一程序间接寻址 程序间接寻址方式中使用 Z 寄存器存放要执行程序的地址程序在 Z 寄存器的内容指定的地址处继续执行即用寄存器 Z 的内容代替 P C 的值如 I J M P I C A L L 指令图 4 1 1 为程序间接寻址示意图 十二程序相关寻址 程序间接寻址方式中在指定字中包含了相关地址K 执行程序时首先将 P C 值与相关地 址 K 相加 得出程序需要继续执行的下一条指令的地址 然后程序在地址 P C K 处继续执行 其范围从一2 K 到2 K 1 之中如 R J M P R C A L L 指令图 4 . 1 2 为程序相关寻址示意图 图 4 . 1 1 程序间接寻址示意图 图 4 1 2 程序相关寻址示意图 第四章 AVR 单片机指令系统 4 11 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 4 . 3 数据操作和指令类型 43 . 1数据操作 A V R 单片机是一个增强型R I S C微控制器具有高性能的数据处理能力能对位半字节字节和双字节数据进行各种操作它们包括算术和逻辑运算数据传送布尔处理和控制转移等操作 43 . 2指令类型 A V R 单片机共有 8 9 - 1 3 0 条指令如果 1 1 8 条指令按功能分类则有 2 2 条算术和逻辑指令 3 4条条件转移指令3 1 条数据传送指令3 1 条位指令和位测试指令 4 . 3 . 3指令集名词 1 状态寄存器 S R E G 状态寄存器 S N V 符号测试位 C 进位标志位 H 半进位标志位 Z 零标志位 T 用于 B L D 和 B S T 指令传送位 N 负数标志位 I 全局中断触发禁止标志位 V 2 的补码溢出指示位 2 寄存器和操作码 R d 寄存器区中的目的或源寄存器 R r 寄存器区中的源寄存器 R 指令执行后的结果 K 常数项或字节数据8 位 k 程序计数器的常量地址数据 b 在寄存器区中或 I O 寄存器( 3 位中的位 S 在状态寄存器3 位中的位 X Y Z 间接地址寄存器X R 2 7 , R 2 6 Y R 2 9 , R 2 8 Z R 3 1 , R 3 0 P I O 口地址 q 直接寻址的偏移6 位 3 I O 寄存器 R A M P X R A M P Y R A M P Z X Y Z 寄存器的级联寄存器允许 M C U 在相连多于 6 4 K 字 节的 S R A M整个范围内间接寻址 4 堆栈 S T A C K 作为返回地址和压栈寄存器的堆栈 S P S T A C K 的堆栈指针 5 标志 ?由指令引起的有效标志 0 由指令清除的标志 1 由指令置位的标志 - 由指令引起的无效标志 说明:为了使读者和用户对每条指令有一个具体的了解, 又有利于大家对单片机映象空间( 通用工作寄存器空间I / O寄存器空间片内片外 S R A M空间程序存储器空间E 2 P R O M数据存储器空间) 认识更清楚( 软件即完成在单片机映象空间之间或自身之间的传送运算检测处理等操作) , 我们对每条指令均编一些简单的测试指令, 我们约定它的程序编号为第四章第四节第几段第几题, 例 4 . 4 . 1加法指令的1 . 不带进位加法, 程序编号为 4 4 1 1 . A S M 其余依此类推 第四章 AVR 单片机指令系统 4 12 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 说明: A V R 单片机的指令系统对不同器件有不同指令, 选用器件时应注意这一点( 详情见本书附录 4 ) ,某种器件应使用那些指令, 更详细资料请阅相应器件(电子书光盘中)英文指令表 以下讲述1 3 0 条指令功能及应用 4 . 4 算术和逻辑指令 A V R 的算术运算指令有加减乘取反取补比较指令增量和减量指令逻辑运算指令有与或异或指令等 图 4 . 4 . 1 是状态寄存器每位的功能及在运算过程中的功能示意图 图 4 . 4 . 1 状态寄存器功能示意图 4 . 4 . 1 加法指令 1 不带进位加法 A D D 一不带进位加 说明两个寄存器不带进位 C 标志加结果送目的寄存器 R d 操作 R d ?R d + R r 语法 操作码 程序计数器 A D D R d , R r O d 3 1 0 r 3 1 P C ?P C 1 1 6 位操作码 0 0 0 0 1 1 r d d d d d r r r r 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? ? ? ? ? ? H R d 3 R r 3 R r 3 / R 3 / R 3 R d 3 N R 7 S N V Z / R 7 / R 6 / R 5 / R 4 . / R 3 / R 2 / R 1 / R O 第四章 AVR 单片机指令系统 4 13 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN V R d 7 R r 7 . / R 7 / R d 7 / R r 7 R 7 C R d 7 . R r 7 R r 7 / R 7 / R 7 R d 7 重要说明: 以下所有举的例子仅说明指令书写方法, 该例子不能直接汇编, 因为程序缺器件配制文件及程序执行地址 实践操作例子* . A S M 可以汇编, 可以调试, 可以修改( 修改需改变文件属性,因为只读文件无法修改) 约定:注释寄存器的内容( 数据) 用括号表示, 例: ( R 1 6 ) = $ 1 6 , 表示寄存器的内容( 数据) 为十六进制数 1 6 H ! 例子( 实践操作程序4 4 1 1 . A S M ) 实践操作例子* . A S M , 必须编译生成* . O B J 文件才可调试, 如要修改* . A S M , 必须修改文件属性, 去掉* . A S M 只读文件属性 l d i r 1 6 , $ 1 1 ; L D I立即数装入指令, 要求寄存器必须符合1 6 d 3 1 条件 l d i r 2 0 , $ 2 2 l d i r 2 8 , 0 X A A ; $ , 0 X 均为十六进制表示法 l p : a d d r l 6 r 2 0 ; 也可单步执行到此行, ; 在调试窗口的对应寄存器R 1 6 , R 2 0 输入数据 ; ( R 1 6 ) = , ( S R E G ) = a d d r 2 8 r 2 8 ; 也可单步执行到此行, 在调试窗口的对应寄存器R 2 8 输入数据 ; ( R 2 8 ) = , ( S R E G ) = r j m p l p ; 反复做实验 W o r d s 1 2 b y t e s C y c l e s 1 2 带进位加法 A D C 一带进位加 说明两个寄存器和C 标志的内容相加结果送目的寄存器 R d 操作 R d R d R r C 语法 操作码 程序计数器 A D C R d , R r 0 d 3 1 0 r 3 1 P C P C 1 1 6 位操作码 0 0 0 1 1 1 r d d d d d r r r r 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? ? ? ? ? ? H R d 3 R r 3 R r 3/ R 3 R d 3 N R 7 S N V Z / R d 7 . / R r 7 . / R r 7 / R 7 . / R 7 / R d 7 V R d 7 R r 7 . / R 7 . / R d 7 / R r 7 R 7 C R d 7 . R r 7 R r 7 / R 7 / R 7 R d 7 例子( 实践操作程序 4 4 1 2 . A S M ) 实践操作例子* . A S M , 必须编译生成* . O B J文件才可调试, 如第四章 AVR 单片机指令系统 4 14 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 要修改* . A S M , 必须修改文件属性, 去掉* . A S M 只读文件属性 l d i r 2 0 , $ 7 7 ; L D I 立即数装入指令, 要求寄存器必须符合1 6 d 3 1 条件 l d i r 2 1 , $ 9 9 L D I R 2 2 , 0 X 7 7 L D I R 2 3 , 0 X 1 1 l p : a d d r 2 2 r 2 0 ; ( r 2 2 ) = , ( S R E G ) = A D C R 2 3 R 2 l ; 也可单步执行到此行, 在调试窗口的对应寄存器R 2 3 , R 2 1 输入数据 ; ( R 2 3 ) = , ( S R E G ) = r j m p l p ; 反复做实验 W o r d s 1 2 b y t e s C y C I C S l 3 立即数据加法字 A D I W 立即数加法 说明寄存器对于立即数值0 6 3 相加结果放到寄存器对 操作R d h : R d l ?R d h : R d l + K 语法 操作码 程序计数器 A D I W R d l K d 2 4 2 6 2 8 3 0 U J P C ?P C 1 1 6 位操作码 1 0 0 1 0 1 1 0 K K d d K K K K 状态寄存器S R E G ) 和布尔格式 I T H S V N Z C - - - ? ? ? ? ? S N V V R d h 7 R 1 5 N R 1 5 Z / R 1 5 / R 1 4 / R 1 3 / R 1 2 / R 1 1 / R 1 0 / R 9 / R 8 / R 7 / R 6 / R 5 / R 4 / R 3 / R 2 / R 1 / R 0 C / R 1 5 R d h 7 例子( 实践操作程序 4 4 1 3 . A S M ) 实践操作例子* . A S M , 必须编译生成* . O B J文件才可调试, 如要修改* . A S M , 必须修改文件属性, 去掉* . A S M 只读文件属性 l p : a d i w r 2 4 1 ; 也可单步执行到此行, 在调试窗口的对应寄存器R 2 4 输入数据 A D I W R 3 0 6 3 ; 也可单步执行到此行, 在调试窗口的对应寄存器R 3 0 输入数据 r j m p l p ; 反复测试 W 0 r d S 1 2 b y t e s C y c l e s 2 4 加 1 指令 I N C 一加 1 说明寄存器 R d 的内容加 1 结果送目的寄存器R d 中该操作不改变 S R E G中的 C 标志 所以 I N C 指令允许在多倍字长计算中用作循环计数当对无符号数操作时仅有 B R E Q ( 相等转移) 和B R N E ( 不为零转移) 指令有效当对二进制补码值操作时所有的带符号转移指令都有效 操作 R d ?R d 1 语法 操作码 程序计数器 I N C R d 0 d 3 1 P C ?P C 1 第四章 AVR 单片机指令系统 4 15 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 1 6 位操作码 1 0 0 1 0 1 0 d d d d d 0 0 1 1 状态寄存器S R E G ) 和布尔格式 I T H S V N Z C - - - ? ? ? ? ? S : N V N R 7 V : R 7 / R 6 / R S / R 4 / R 3 / R 2 / R I / R 0 Z / R 7 / R 6 / R 5 / R 4 / R 3 / R 2 / R 1 / R O 例子( 实践操作程序 4 4 1 4 . A S M ) c l r r 2 2 ; 寄存器 R 2 2 清零 l o o p : i n c r 2 2 ; + 1 , 也可单步执行到此行, 在调试窗口的对应寄存器R 2 2 输入数据 l o o p 1 : I N C R 2 2 c p i r 2 2 , $ 0 4 ; ( R 2 2 ) 与立即数$ 0 4 比较 b r n q l o o p 1 ; 不相等转移, 相等则按顺序执行( 观察状态寄存器 Z 标志变化) r j m p l o o p ; 供反复测试 W o r d l 2 b y t e s C y c l e s 1 4 . 4 . 2 减法指令 1 不带进位减法 S U B 一不带进位减 说明两个寄存器相减结果送目的寄存器 R d 中 操作R d ?R d R r 语法 操作码 程序计数器 S U B R d , R r 0 d 3 1 0 r 3 1 P C ?P C 1 1 6 位操作码 0 0 0 1 1 1 r d d d d d r r r r 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? ? ? ? ? ? H / R d 3 R r 3 R r 3 R 3 R 3 / R d 3 N R 7 S N V Z / R 7 / R 6 / R 5 / R 4 / R r 3 / R 2 / R 1 / R 0 V R d 7 / R r 7 / R 7 / R d 7 R r 7 R 7 C / R d 7 R r 7 R r 7 R 7 R 7 / R d 7 例子( 实践操作程序4 4 2 1 . A S M ) l o o p 1 : l d i r 2 3 , $ 4 4 ; 寄存器装入立即数 l d i r 2 2 , $ 1 1 ; 寄存器装入立即数 l o o p : s u b r 2 3 , r 2 2 ; 减法 , 也可单步执行到此行, ; 在调试窗口的对应寄存器R 2 3 , R 2 2 输入数据 b r n e l o o p ; r 2 3内容不为0 转, 为 0 顺执 r j m p l o o p 1 ; 反复测试 第四章 AVR 单片机指令系统 4 16 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN W o r d s 1 2 b y t e s C y c l e s 1 2 立即数减法字节 S U B I 立即数减 说明 一个寄存器和常数相减 结果送目的寄存器 R d 该指令工作于寄存器R 1 6 到 R 3 1 之间非常适合X Y 和 Z 指针的操作 操作R d ?R d K 语法 操作码 程序计数器 S U B I R d , K 1 6 d 3 1 0 k 2 5 5 P C ?P C l 1 6 位操作码 0 1 0 1 k k k k d d d d k k k k 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? ? ? ? ? ? H / R d 3 K 3 K 3 R 3 R 3 / R d 3 N R 7 S : N V Z / R 7 / R 6 / R 5 / R 4 / R r 3 / R 2 / R 1 / R 0 V R d 7 / K 7 / R 7 / R d 7 K 7 R 7 C / R d 7 R r 7 R r 7 R 7 R 7 R d 7 例子( 实践操作程序4 4 2 2 . A S M ) L O O P : L D I R 2 2 , $ 5 5 L O O P 1 : S U B I R 2 2 , $ 1 1 ; 也可单步执行到此行, 在调试窗口的对应寄存器R 2 2 输入数据 B R N E L O O P 1 ; 不为 0 转, 为 0 顺执 R J M P L O O P ; 反复测试 W o r d s 1 2 b y t e s C y c l e s 1 3 带进位减法 S B C 带进位减 说明两个寄存器随着 C 标志相减结果放到目的寄存器 R d 中 操作R d ?R d R r C 语法 操作码 程序计数器 S B C R d R r 0 d 3 1 0 r 3 1 P C ?P C 1 1 6 位操作码 0 0 0 0 1 0 r d d d d d r r r r 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? ? ? ? ? ? H / R d 3 R r 3 R r 3 R 3 R 3 / R d 3 N R 7 第四章 AVR 单片机指令系统 4 17 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN S : N V Z / R 7 / R 6 / R 5 / R 4 / R 3 / R 2 / R 1 / R 0 . Z V R d 7 / R r 7 / R 7 / R d 7 R r 7 R 7 C / R d 7 R r 7 R r 7 R 7 R 7 / R d 7 例子( 实践操作程序4 4 2 3 . A S M ) L P : L D I R 2 2 , $ 8 0 ; 寄存器装数( R 2 2 ) = $ 8 0 L D I R 2 0 , $ 8 0 ; ( R 2 0 ) = $ 8 0 L D I R 2 3 , $ 2 3 ; ( R 2 3 ) = $ 2 3 L D I R 2 1 , $ 1 1 ; ( R 2 1 ) = $ 1 1 A D D R 2 2 , R 2 0 ; ( R 2 2 ) = $ 0 0 , C = 1 L P 1 : S B C R 2 3 , R 2 1 ; 也可单步执行到此行, 在调试窗口的对应寄存器R 2 3 , R 2 1 输入数据 ; ( R 2 3 ) - ( R 2 1 ) - ( C ) = C P I R 2 3 , $ 0 0 ; R 2 3的内容与立即数$ 0 0 比较, B R N E L P 1 ; R 2 3的内容不0 为转, 为 0 顺执 R J M P L P ; 反复测试 W 0 r d s 1 2 b y t e S C y c l e s 1 4 带进位立即数减 S B C I 带进位立即数减 说明寄存器和立即数随着 C 标志相减结果放到目的寄存器 R d 中 操作 R d ?R d K C 语法 操作码 程序计数器 S B C I R d K 1 6 d 3 1 0 K 2 5 5 P C ?P C 1 1 6 位操作码 0 1 0 0 K K K K d d d d K K K K 状态寄存器S R E 和布尔格式 I T H S V N Z C - - ? ? ? ? ? ? H / R d 3 K 3 K 3 R 3 R 3 / R d 3 N R 7 S N V Z / R 7 / R 6 / R 5 / R 4 / R 3 / R 2 / R 1 / R O Z V R d 7 / K 7 / R 7 / R d 7 K 7 R 7 C / R d 7 K 7 K 7 R 7 R 7 / R d 7 例子( 实践操作程序4 4 2 4 . A S M ) L P : S E C ; ( C ) = 1 L D I R 1 6 , $ 4 4 ; ( R 1 6 ) = $ 4 4 S U B I R 1 6 , $ 2 2 ; ( R 1 6 ) 减立即数$ 2 2 L P 1 : S B C I R 1 6 , $ 1 1 ; 也可单步执行到此行, 在调试窗口的对应寄存器 R 1 6 输入数据 ; ( R 1 6 ) - $ 1 1 - 1 C P I R 1 6 , $ 0 0 ; 比较 R 1 6 内容是否为$ 0 0 B R N E L P 1 ; ( R 1 6 ) 不 0 为转, 为 0 顺执 R J M P L P ; 反复测试 W o r d s 1 2 b y t e s C y c l e s 1 第四章 AVR 单片机指令系统 4 18 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 5 立即数减法字 S B I W 立即数减法 说明双寄存器与立即数0 6 3 减结果送双寄存器该指令操作于四个以上的寄存 器对比较适合对指针寄存器操作 操作R d h R d l ?R d h : R d l - K 语法 操作码 程序计数器 S B I W R d l K d l 2 4 , 2 6 2 8 , 3 0 0 K 6 3 P C ?P C 1 1 6 位操作码 1 0 0 1 0 1 1 1 K K d d K K K K 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? ? ? ? ? S N V V R d h 7 / R 1 5 N R 1 5 C R 1 5 / R d h 7 Z / R 1 5 / R 1 4 / R 1 3 / R 1 2 / R 1 1 / R 1 0 / R 9 / R 8 / R 7 / R 6 / R 5 / R 4 / R 3 / R 2 / R 1 / R 0 Z 例子( 实践操作程序4 4 2 5 . A S M ) L P : L D I R 2 4 , 5 ; 寄存器装入立即数, 寄存器必须符合 1 6 R 3 1 L D I R 2 8 , 6 3 ; 5 , 6 3 为十进制数, 十六进制为 0 X 3 F s b i w r 2 4 , 1 ; s b i w r 2 8 , 6 0 ; 6 0 为十进制数 R J M P L P ; 反复测试 W o r d s 1 2 b y t e s C y c l e s 1 6 减 1 指令 D E C 一减 1 说明寄存器 R d 的内容减1 结果送目的寄存器R d 中该操作不改变 S R E G中的C 标志所以 D E C 指令允许在多倍字长计算中用作循环计数当对无符号值操作时仅有 B R E Q ( 不相等转移)和 B R N E ( 不为零转移) 指令有效当对二进制补码值操作时所有的带符号转移指令都有效 操作R d ?R d l 语法 操作码 程序计数器 D E C R d 0 d 3 1 P C ?P C 十 1 1 6 位操作码 1 0 0 1 0 1 0 d d d d d 1 0 1 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? ? ? ? ? S N V N R 7 V : / R 7 R 6 R 5 R 4 R 3 R 2 R 1 R 0 Z / R 7 / R 6 / R 5 / R 4 / R 3 / R 2 / R 1 / R O 例子( 实践操作程序4 4 2 6 . A S M ) 第四章 AVR 单片机指令系统 4 19 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN L P : L D I R 1 6 , $ 0 4 ; 多级- 1 , 可作延时子程序用 L O O P : D E C R 1 6 ; 也可单步执行到此行, 在调试窗口的对应寄存器R 1 6 输入数据 ; ( R 1 6 ) - 1 B R N E L O O P ; ( R 1 6 ) 不为 0 转, 为 0 顺执 D E C R 1 6 ; 第一次( ( R 1 6 ) = $ 0 0 ) - 1 = $ F F B R N E L P ; ( R 1 6 ) 不为 0 转, 为 0 顺执 R E T ; 子程序返回 W o r d s l 2 b y t e S C y c l e s 1 4 . 4 . 3 乘法指令 注意:A V R 单片机只有 A T m e g a 1 6 1 和 A t m e g 1 0 3 L 有乘法指令 M U L 一乘法 说明该指令完成 8 位 X 8 位? 1 6 位的无符号数乘法操作被乘数 R r 和乘数 R d 是两个寄存器1 6 位结果放在 R 1 高字节 和 R O 低字节 中注意如果被乘数和乘数选择了 R O 或 R 1则当进行乘法后结果将溢出 操作 R 1 R O ?R r * R d 语: 操作码 程序计数器 M U L R d , R r 0 d 3 1 0 r 3 1 P C ?P C 1 1 6 位操作码 0 0 0 1 1 1 r d d d d d r r r r 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? C R 1 5 例子( 实践操作程序4 4 3 1 . A S M , 因无相应器件配制文件* . i n c , 所以汇编时有出错提示) l p : l d i r 6 , $ 0 4 l d i r 5 , # 0 5 m u l r 6 , r 5 ; 乘法 m o v r 5 , r 1 ; 保存乘积高位 m o v r 5 , r 0 ; 保存乘积低位 r j m p l p W o r d s l 2 b y t e S C y c l e s 2 4 . 4 . 4取反码指令 C O M 取二进制反码 说明该指令完成寄存器R d 的二进制反码操作 操作 R d ?$ F F R d 语法 操作码 程序计数器 C O M R d 0 d 3 1 P C ?P C 1 第四章 AVR 单片机指令系统 4 20 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 1 6 位操作码 1 0 0 1 0 1 0 d d d d d 0 0 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? 0 ? ? 1 S N V Z / R 7 . / R 6 . / R 5 . / R 4 . / R 3 . / R 2 . / R 1 . / R O V O C 1 N R 7 例子( 实践操作程序4 4 4 1 . A S M ) l p : l d i R 2 4 , $ A A c o m r 2 4 ; 取反 c p i r 2 4 , $ a a ; ( r 2 4 ) 与$ a a 比较相等吗? b r e q l p 1 l p 1 : C O M R 2 4 ; 取反 c p i r 2 4 , $ a a ; ( r 2 4 ) 与$ a a 比较相等吗? b r e q l p ; 相等, 反复测试 B R E Q L P W o r d s 1 2 b y t e s C y c l e s 1 4 . 4 . 5 取补指令 N E G 二进制补码 说明寄存器 R d 的内容转换成二进制补码值$ 8 0 是不改变的 操作R ?$ O O R d 语法 操作码 程序计数器 N E G R d 0 d 3 1 P C ?P C 1 1 6 位操作码 1 0 0 1 0 1 0 d d d d d 0 0 0 1 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? ? ? ? ? ? H : R 3 . / R d 3 N R 7 S N V Z / R 7 . / R 6 . / R 5 . / R 4 . / R 3 . / R 2 . R 1 . / R O V R 7 . / R 6 . / R 5 . / R 4 . / R 3 . / R 2 . / R 1 . / R O C R 7 R 6 R 5 R 4 R 3 R 2 R 1 R O 例子( 实践操作程序4 4 5 1 . A S M ) L P : S U B R 1 1 , R 0 ; 开始时在调试窗口中的对应寄存器输入数据 ; 设( r 1 1 ) = 0 b 1 0 1 0 1 0 1 = $ A A ( r 0 ) = 0 b 1 0 0 1 1 0 0 1 = $ 9 9 第四章 AVR 单片机指令系统 4 21 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN B R P L L P 1 ; ( r 1 1 ) 为正数转移 L P 1 : N E G R 1 1 B R M I L P ; ( r 1 1 ) 为负数转移 W o r d s 1 2 b y t e s C y c l e s 1 4 . 4 . 6 比较指令 1 寄存器比较 C P 比较 说明该指令完成两个寄存器 R d 和 R r相比较操作而寄存器的内容不改变该指令后能使用所有条件转移指令 操作 R d R r 语法 操作码 程序计数器 C P R d R r 0 d 3 1 0 r 3 1 P C ?P C 1 1 6 位操作码 1 0 0 1 0 1 r d d d d d r r r r 状态寄存器S R E G 和布尔格式 - - ? ? ? ? ? ? H / R d 3 . R r 3 R r 3 . R 3 R 3 . / R d 3 N R 7 S N V Z R d 7 . R r 7 . R r 7 . R 7 R 7 . R d 7 V R d 7 . / R d 7 . / R 7 / R d 7 . R r 7 . R 7 C / R d 7 . R r 7 R r 7 . R 7 R 7 . / R d 7 例子( 实践操作程序4 4 6 1 . A S M ) l p : c p r 2 4 , r 1 9 ; 单步执行到此行, 开始时在调试窗口的对应寄存器输入数据 ; 第一次操作设: ( r 2 4 ) = $ A A ( r 1 9 ) = $ 5 5 ; 第二次操作设: ( r 1 4 ) = $ 1 1 ( r 1 9 ) = $ 5 5 b r s h l p 1 ; ( r 2 4 ) ( r 1 9 ) 则转 l p 1 , ( r 2 4 ) 小于( r 1 9 ) 顺执 r j m p l p 2 ; l p 1 : s u b r 2 4 , r 1 9 ; ( r 2 4 ) 相减( r 1 9 ) b r n e l p ; ( r 2 4 ) 不为 0 转, 为 0 顺执 l p 2 : a d i w r 2 4 , $ 1 1 ; 立即数加, 要求 d 2 4 2 6 2 8 3 0 0 K 6 3 r j m p l p ; 反复测试 W o r d s l 2 b y t e s C y C I C S 2 2 带进位比较 C P C 一带进位比较 说明该指令完成寄存器 R d的值和寄存器 R r 加前位进位的值相比较操作而寄存器的内容不改变该指令后能使用所有条件转移指令 操作 R d R r C 语法 操作码 程序计数器 C P C R d R r 0 d 3 1 0 r 3 1 P C ?P C 1 第四章 AVR 单片机指令系统 4 22 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 1 6 位操作码 0 0 0 0 0 1 r d d d d d r r r r 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? ? ? ? ? ? H / R d 3 R r 3 R r 3 R 3 R 3 / R d 3 N R 7 S N V Z / R 7 / R 6 R 5 R 4 R 3 R 2 R 1 R 0 Z V R d 7 / R r 7 / R 7 / R d 7 R r 7 R 7 C / R d 7 R r 7 R r 7 R 7 R 7 / R d 7 例子: ( 实践操作程序 4 4 6 2 . A S M ) c p r 2 , r 0 ; 单步执行到此行, 开始时在调试窗口的对应寄存器输入数据 ; 设: ( R 2 ) = $ A A , ( R 0 ) = $ 5 5 l p : s e c ; ( c ) = 1 c p c r 3 , r 1 ; 第一次操作设: ( r 3 ) = $ 1 1 , ( r 1 ) = $ 1 0 , ; 第二次操作设: 设: ( R 3 ) = $ 1 2 , ( R 1 ) = $ 1 0 , b r n e l p 1 ; 比较不相等转移, 相等顺执 r j m p l p 2 ; 相对转移 l p 1 : i n c r 1 ; + 1 r j m p l p l p 2 : d e c r 1 ; - 1 r j m p l p ; 反复测试 w o r d s 1 2 b y t e s C y c l e s l 3 立即数比较 C P I带立即数比较 说明该指令完成寄存器 R d 和常数的比较操作寄存器的内容不改变该指令后能 使用所有条件转移指令 操作R d K 语法 操作码 程序计数器 C P I R d , K 1 6 d 3 1 0 K 2 5 5 P C ?P C 1 1 6 位操作码 0 0 1 1 K K K K d d d d K K K K 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? ? ? ? ? ? H / R d 3 K 3 K 3 R 3 R 3 / R d 3 N R 7 S N V Z / R 7 / R 6 / R 5 / R 4 / R 3 / R 2 / R 1 / R 0 V R d 7 / K 7 / R 7 / R d 7 K 7 R 7 C / R d 7 K 7 K 7 R 7 R 7 / R d 7 第四章 AVR 单片机指令系统 4 23 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 例子( 实践操作程序4 4 6 3 . A S M ) L P : C P I R 1 9 , 3 ; 单步执行到此行, 开始时在调试窗口的对应寄存器输入数据 ; 设( R 1 9 ) = 4 B R N E L P 1 ; 不相等转, 相等顺执 I N C R 1 9 ; ( R 1 9 ) + 1 R J M P L P ; 反复测试 L P 1 : D E C R 1 9 ; ( R 1 9 ) - 1 R J M P L P ; 反复测试 W o r d s 1 2 b y t e s C y c l e s 1 4 . 4 . 7 逻辑与指令 逻辑与输入 输出 A B Y L L L L H L H L L H H H 1 寄存器逻辑与 A N D 一逻辑与 ; 全 1 为 1 , 有 0 即 0 , 说明寄存器 R d 和寄存器R r 的内容为逻辑与结果送目的寄存器 R d 应用: 清 0 , 使某位为0 , 用 0 去与; 保留, 用 1 去逻辑与; 代硬件与门 操作R d ?R d R r ; 语法 操作码 程序计数器 A N D R d , R r 0 d 3 1 0 d 3 1 P C ?P C 1 1 6 位操作码 0 0 1 0 0 0 r d d d d d r r r r 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? ? ? ? S N V N R 7 V O Z / R 7 / R 6 / R 5 / R 4 / R 3 / R 2 / R 1 / R O 例子( 实践操作程序4 4 7 1 . A S M ) L P : a d d r 2 , r 3 ; 单步执行到此行, 开始时在调试窗口的对应寄存器输入数据 ; 设: ( R 2 ) = 0 B 1 0 0 0 0 0 0 0 , ( R 3 ) = 0 B 0 0 0 1 0 0 1 1 L D I R 1 6 , 1 ; ( R 1 6 ) = 0 B 0 0 0 0 0 0 0 1 , a n d r 2 , r 1 6 ; ( R 2 ) = R J M P L P ; 反复测试 W o r d s 1 2 b y t e s C y c l e s 1 第四章 AVR 单片机指令系统 4 24 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 2 带立即数与 A N D I 立即数逻辑与 ; 全 1 为 1 , 有 0 即 0 说明寄存器 R d 的内容与常数逻辑与结果送目的寄存器R d 应用: 清 0 , 使某位为0 , 用 0 去与; 保留, 用 1 去逻辑与; 代硬件与门 操作R d ?R d K ; 语法 操作码 程序计数器 A N D I R d K 1 6 d 3 1 0 K 2 5 5 P C ?P C 1 1 6 位操作码 0 0 0 1 1 1 r d d d d d r r r r 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? 0 ? ? S : N V N R 7 V : 0 Z / R 7 / R 6 / R 5 / R 4 / R 3 / R 2 / R 1 / R O 例子( 实践操作程序4 4 7 2 . A S M ) L P : a n d i r 1 7 , $ 0 F ; 单步执行到此行, 开始时在调试窗口的对应寄存器输入数据 ; 设: ( r 1 7 ) = $ F 0 , ( R 1 8 ) = $ E F , ( R 1 9 ) = $ F F , 单步执行后, ( R 1 7 ) = a n d i r 1 8 , $ 1 0 ; ( R 1 8 ) = a n d i r 1 9 , $ A A ; ( R 1 9 ) = R J M P L P ; 反复测试 W o r d s l 2 b y t e s C y c l e s 1 3 清除寄存器位 C B R 清除寄存器指定位 说明清除寄存器 R d 中的指定位利用寄存器R d 的内容与常数表征码K 的补码相与 完成的其结果放在寄存器 R d 中 操作 R d ?R d ( $ F F K ) 语法 操作码 程序计数器 C B R R d K 1 6 d 3 1 , 0 K 2 5 5 P C ?P C 1 1 6 位操作码 0 1 1 1 K K K K d d d d K K K K 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? 0 ? ? S N V N R 7 第四章 AVR 单片机指令系统 4 25 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN V 0 Z / R 7 / R 6 / R 5 / R 4 / R 3 / R 2 / R 1 / R O 例子( 实践操作程序4 4 7 3 . A S M ) l p : c b r R 1 6 , $ F 0 ; 单步执行到此行, 在调试窗口的对应寄存器输入数据 ; ( r 1 6 ) = $ F F C B R R 1 8 , 1 ; ( r 1 8 ) = $ 8 0 I N C R 1 6 I N C R 1 8 r j m p l p ; 反复输入数据测试 W o r d s 1 2 b y t e s C y c l e s 1 4 测试零或负 T S T 测试零或负 说明测试寄存器是否是零或是负完成同一寄存器之间的逻辑与操作而寄存器内容不改变 操作R d ?R d R d 语法 操作码 程序计数器 T S T R d 0 d 3 1 P C ?P C + 1 1 6 位操作码 0 0 1 1 0 0 d d d d d d d d d d 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? 0 ? ? S N V N R 7 V : 0 Z / R 7 / R 6 / R S / R 4 / R 3 / R 2 / R 1 / R 0 例子( 实践操作程序4 4 7 4 . A S M ) s u b r 0 , r 2 ; 单步执行到此行, 在调试窗口的对应寄存器输入数据 ; 并打开状态寄存器S R E G观察窗口 ; ( r 0 ) = $ a a , ( r 2 ) = $ a a ; ( r 0 ) = $ 7 7 , ( r 2 ) = $ 8 0 l p : t s t r 0 ; 测试寄存器 r 0 是否是零或是负, b r e q l p 1 ; 如果零标志( Z ) 位为 1 , 则转移, 为 0 顺执 d e c r 0 ; - 1 r j m p l p ; 再测试 l p 1 : i n c r 0 ; + 1 r j m p l p ; 再测试 W o r d s 1 2 b y t e s C y c l e s 1 第四章 AVR 单片机指令系统 4 26 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 448 逻辑或指令 逻辑或输入 输出 A B Y L L L L H H H L H H H H 1 寄存器逻辑或 O R 一逻辑或 ; 有 1 即 1 , 全 0 为 0 , 应用: 置数, 使某位为1 , 用 1 去或; 保留, 用 0 去逻辑或; 代硬件或门 说明完成寄存器 R d 与寄存器R r 的内容逻辑或操作结果进目的寄存器R d 中 操作 R d ?R d R r 语法 操作码 程序计数器 O R R d R r 0 d 3 1 0 r 3 1 P C ?P C 1 1 6 位操作码 0 0 1 0 1 0 r d d d d d r r r r 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? 0 ? ? S N V N R 7 V 0 Z / R 7 / R 6 / R 5 / R 4 / R 3 / R 2 / R 1 / R 0 例子( 实践操作程序4 4 8 1 . A S M ) o r r 1 9 , r 1 6 ; 逻辑或, 单步执行到此行, 在调试窗口的对应寄存器输入数据 ; ( R 1 9 ) = $ A A , ( R 1 6 ) = $ 4 4 , ( R 1 8 ) = 0 B 0 1 0 0 1 1 1 1 = $ 4 F ; ( R 1 8 ) = 0 B 0 0 0 0 1 1 1 1 = $ 0 F L P : b s t r 1 8 , 6 ; R 1 8中的 6 位内容到S R E G中 T 标志, 观察 S R E G中 T 标志的变化 b r t s o k ; S R E G 中标志为1 转移, 为 0 顺执 S E R R 1 8 ; 置位 R 1 8 R J M P L P ; 反复测试 o k : C L R R 1 8 ; 清零 R 1 8 R J M P L P ; 反复测试 W o r d s l 2 b y t e s C y c l e s : 1 2 带立即数或 O R I 立即数逻辑或 ; 功能: 保留( 屏蔽) 数据, 置数( 使某位为1 ) 说明完成寄存器 R d 的内容与常量逻辑或操作结果送目的寄存器 R d 中 操作 R d ?R d K 语法 操作码 程序计数器 O R I R d K 1 6 d 3 1 0 K 2 5 5 P C ?P C 1 1 6 位操作码 第四章 AVR 单片机指令系统 4 27 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 0 1 1 0 K K K K d d d d K K K K 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? 0 ? ? S : N V N R 7 V O Z : / R 7 / R 6 / R 5 / R 4 / R 3 / R 2 / R 1 / R 0 例子( 实践操作程序4 4 8 2 . A S M ) L P : o r i r 1 9 , $ F 0 ; 立即数或, 单步执行到此行, 在调试窗口的对应寄存器输入数据 ; ( R 1 9 ) = $ A 0 , ( R 1 7 ) = $ 4 5 ; ( R 1 9 ) = 0 B 0 1 1 0 1 1 1 1 = $ 6 F , ( R 1 7 ) = 0 B 1 1 1 1 0 0 0 0 = $ F 0 o r i r 1 7 , 1 ; 立即数或 l s l r 1 9 ; r 1 9逻辑左移 l s r r 1 7 ; r 1 7逻辑右移 R J M P L P ; 反复测试 W o r d s 1 2 b y t e s C y c l e s 1 3 置寄存器位 S B R 寄存器位置位 说明对寄存器 R d 中指定位置位完成寄存器 R d 和常数表征码 K 之间的逻辑直接数 或O R I结果送目的寄存器 R d 操作 R d ?R d K p 9 5 语法 操作码 程序计数器 S B R R d K 1 6 d 3 1 0 K 2 5 5 P C ?P C 1 1 6 位操作码 0 1 1 0 K K K K d d d d K K K K 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? 0 ? ? S N V N R 7 V O Z / R 7 / R 6 / R 5 / R 4 / R 3 / R 2 / R 1 / R 0 例子( 实践操作程序4 4 8 3 . A S M ) ; 设: ( R 1 6 ) = $ F 0 , ( R 1 7 ) = $ 8 0 l p : s b r r 1 6 , 3 ; 对 R 1 6 的( 0 B 0 0 0 0 0 0 1 1 ) 第 1 0 位置为 1 , 执行后( R 1 6 ) = s b r r 1 7 , $ 1 7 ; 对 R 1 7 的( 0 B 0 0 0 1 0 1 1 1 ) 第 4 2 1 0 位置 1 , 执行后( R 1 7 ) = I N C R 1 6 ; + 1 第四章 AVR 单片机指令系统 4 28 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN D E C R 1 7 ; - 1 r j m p l p ; 反复试验 W o r d s 1 2 b y t e s C y c l e s 1 4 置寄存器 S E R 置位寄存器的所有位 说明直接装入$ F F 到寄存器 R d . 操作 R d ?$ F F 语法 操作码 程序计数器 S E R R d 1 6 d 3 1 P C ?P C 1 1 6 位操作码 1 1 1 0 1 1 1 1 d d d d 1 1 1 1 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 4 8 4 . A S M ) L P : C L R R 1 6 ; ( R 1 6 ) 清零 s e r r 1 7 ; ( R 1 7 ) 置$ F F o u t $ 1 8 , r 1 6 ; 输出到 B 口, 打开 I / O 寄存器窗口看$ 1 8 变化 o u t $ 1 8 , r 1 7 ; 输出到 B 口, 打开 I / O 寄存器窗口看$ 1 8 变化 I N C R 1 6 ; + 1 I N C R 1 7 ; + 1 R J M P L P ; 反复试验 W o r d s 1 2 b y t e s C y c l e s 1 44 9运辑异或指令 1 寄存器异或 E O R 异或 ; 输入相同输出为 0 , 输入不同输出为 1 ; 也称同或( 清零) ; 也称互斥( 置 1 ) ; 见下真值表 说明完成寄存器 R d 和寄存器R r 的内容相逻辑异或操作结果送目的寄存器 R d . 异或输入 输出 A B Y L L L L H H H L H H H L 操作 R d ?R d R r 语法 操作码 程序计数器 E O R R d , R r 0 d 3 1 0 r 3 1 P C ?P C 1 第四章 AVR 单片机指令系统 4 29 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 1 6 位操作码 0 0 1 0 0 1 r d d d d d r r r r 状态寄存器S R E G 和布尔格式 I T H S V N Z C ? 0 ? ? S N V N R 7 V : 0 Z / R 7 / R 6 / R 5 / R 4 / R 3 / R 2 / R 1 / R 0 例子( 实践操作程序4 4 9 1 . A S M ) L P : e o r r 4 , r 4 ; 设: ( R 4 ) = 0 B 1 0 1 0 0 0 1 1 , 相同数异或为清零, 也可称同或清零 e o r r 0 , r 2 2 ; 设: ( R 0 ) = 0 B 1 0 1 0 0 1 0 1 设: ( R 2 2 ) = 0 B 0 1 0 1 0 0 1 1 S W A P R 4 ; 半字节交换 S W A P R 0 ; 半字节交换 S W A P R 2 2 ; 半字节交换 R J M P L P ; 反复实验 W o r d s 1 2 b y t e s C y c l e s 1 2 清除寄存器 C L R 一寄存器清零 说明寄存器清零该指令采用寄存器R d 与自己的内容相异或实现的寄存器 的所有位都被清零 操作 R d ?R d R d 语法 操作码 程序计数器 C L R R d 0 d 3 1 P C ?P C 1 1 6 位操作码 0 0 0 1 1 1 r d d d d d r r r r 状态寄存器S R E G 和布尔格式 I T H S V N Z C 0 0 0 1 S O N 0 V O Z 1 例子( 实践操作程序4 4 9 2 . A S M ) L P : C L R R 1 8 ; R 1 8 清零 L p 1 : i n c r 1 8 ; + 1 C P I R 1 8 , $ 0 5 ; R 1 8 内容与立即数比较 b r n e l p 1 ; 不相等转, 相等顺执 R J M P L P ; 循环测试 W o r d s 1 2 b y t e s C y c l e s 1 第四章 AVR 单片机指令系统 4 30 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 4 5 转移指令 451无条件转移指令 1 相对跳转 R J M P 一相对跳转 说明相对跳转到 P C 2 K 和 P C 2 K 字范围内的地址在汇编程序中标号用于替 代相对操作A V R 微控制器的程序存储器空间不超过4 K 字8 K 字节该指令能寻址整个 存储器空间的每个地址位置 严格地讲: 在P C + 1后的 2 K k 2 K范围内转移才能正确执行! 操作 P C ?( P C 1 ) k 语法 操作码 程序计数器 R J M P k 2 K k 2 K P C ?( P C 1 ) k 1 6 位操作码 1 1 0 0 k k k k k k k k k k k k 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 1 1 . A S M ) . O R G 0 X 0 0 1 0 L P : c p i r 1 6 , $ 4 2 ; 设: ( R 1 6 ) = $ 4 2 b r n e L P 2 ; 不相等转移, 相等顺执 r j m p L P 1 ; 转移不超过+ 2 K L P 2 : A D D R 1 6 , R 1 7 i n c r 1 6 . O R G $ 0 8 0 F ; O R G 为$ 0 8 1 0 , 则超过- 2 K , O R G 为$ 0 8 0 F 不超过- 2 K ; 因为 P C + 1 ( $ 0 8 0 F + 1 = $ 0 8 1 0 ) , 从$ 0 0 1 0 到$ 0 8 1 0 正好等于- 2 K ; 如 P C + 1 ( $ 0 8 1 0 + 1 = $ 0 8 1 1 ) , 从$ 0 0 1 0 到$ 0 8 1 1 正好超过- 2 K , ; 汇编时出错提示, L P 1 : R J M P L P ; 请修改 O R G 为$ 0 8 1 0 一试, 打开程序存储器窗口观察 ; 用 R J M P 一相对转移好处: 作为子程序模块搬家( 移动) 较方便, 不必修改转移指令, 缺点: 子程序大小限在P C ?( P C 1 ) k W o r d s 1 2 b y t e s C y c l e s 2 2 间接跳转 I J M P 间接跳转 说明间接跳转到由寄存器区中的 Z 1 6 位指针寄存器指向的地址Z 指针寄存器 是 1 6 位宽允许在当前程序存储器空间6 4 K 字1 2 8 K字节内跳转 第四章 AVR 单片机指令系统 4 31 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN I J M P 间接跳转优点: 转移范围大,缺点:作为子程序模块, 移值时需修改转移地址, 希望在子程序中不要使用! 不要给自已带来麻烦! 注意: 只能到你设计的硬件电路所具有的空间, 你的器件可有这条指令吗? 操作P C ?Z 1 5 0 P C 1 5 - 0 ?Z 1 5 0 语法 操作码 程序计数器 I J M P N o n e S e e O P e r a t i o n 1 6 位操作码 1 0 0 1 0 1 0 0 X X X X 1 0 0 1 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序 4 5 1 2 . A S M ) O R G $ 0 0 1 0 L P : M O V R 3 0 , R 0 ; 设( R 0 ) 为 Z 寄存器低8 位地址, R 3 0为 Z 间接地址低 8 位 M O V R 3 1 , R 1 ; 设( R 1 ) 为 Z 寄存器高8 位地址, R 3 1为 Z 间接地址高 8 位 i j m p ; 根据 Z 寄存器的内容跳转 . O R G $ 0 2 0 0 L D I R 2 0 , $ 1 1 ; 地址$ 0 2 0 1 , 如设( R 0 ) = $ 0 1 , ( R 1 ) = 0 2 , 执行 I J M P到此行 L D I R 2 1 , $ 2 2 ; 地址$ 0 2 0 2 , 如设( R 0 ) = $ 0 2 , ( R 1 ) = 0 2 , 执行 I J M P到此行 L D I R 2 2 , $ 3 3 ; 地址$ 0 2 0 3 , 如设( R 0 ) = $ 0 3 , ( R 1 ) = 0 2 , 执行 I J M P到此行 L D I R 2 3 , $ 4 4 ; 地址$ 0 2 0 4 , 如设( R 0 ) = $ 0 4 , ( R 1 ) = 0 2 , 执行 I J M P到此行 L D I R 2 4 , $ 5 5 ; 地址$ 0 2 0 5 , 如设( R 0 ) = $ 0 5 , ( R 1 ) = 0 2 , 执行 I J M P到此行 L D I R 2 5 , $ 6 6 ; 地址$ 0 2 0 6 , 如设( R 0 ) = $ 0 6 , ( R 1 ) = 0 2 , 执行 I J M P到此行 I J M P ; 地址$ 0 2 0 7 , 如设( R 0 ) = $ 0 7 , ( R 1 ) = 0 2 , 执行 I J M P到此行 ; 又根据 Z 寄存器的内容跳转到指定地址 W o r d s 1 2 b y t e s C y c l e s 1 3 长跳转 J M P 跳转 说明在整个程序存储空间 4 M 字内跳转见 R J M P J M P 跳转优点: 可跳转到程序存储器空间4 M 字任何地方; 缺点: 不适宜子程序摸块中使用; 注意: 只能到你设计的硬件电路所具有的空间, 你的器件可有这条指令吗! 操作P C ?k 语法 操作码 程序计数器 J M P k 0 k 4 M P C ?k 3 2 位操作码 1 0 0 1 0 1 0 k k k k k 1 1 0 k 第四章 AVR 单片机指令系统 4 32 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN k k k k k k k k k k k k k k k k 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 1 3 . A S M ) . e q u l p 1 = $ 0 f 0 0 l p : m o v r 0 , r 1 ; 设( r 1 ) = 1 2 j m p l p 2 ; 长跳转 ; A T 9 0 S 8 5 1 5 等 A V R 单片机无此指令, ; 现在用 A V R 的 M E G 1 0 3 单片机可使用该条指令 . o r g $ 0 f 0 0 l p 2 : s w a p r 0 ; 半字节交换 j m p l p ; 跳回反复实验 W o r d s 2 4 b y t e s C y c l e s 3 4 . 5 . 2 条件转移指令 条件转移指令是依某种特定的条件转移的指令条件满足则转移条件不满足时则顺序执行下面的指令 一测试条件符合转移指令 1 状态寄存器中位置位转移 B R B S S R E G中的位被置位转移 说明条件相对转移测试 S R E G的某一位如果该位被置位则相对 P C 值转移这条 指令相对 P C 转移的方向为 P C 6 4 目的寄存器P C 6 3 参数 K 为 P C 的偏移用 2 的 补码表示 操作I f S R E G ( S ) 1 t h e n P C ?( P C 1 ) k , e l s e P C ?P C 十 1 语法 操作码 程序计数器 B R B S S k O S 7 6 4 k6 3 P C ?( P C 1 ) k P C ?P C l 1 6 位操作码 1 1 1 1 0 0 k k k k k k k s s s 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 1 . A S M ) L P : b s t r 0 , 3 ; 设: ( R 0 ) = 0 B 0 0 0 0 1 0 0 0 ; R 0 中第 3 位到 S R E G中的 T 标志 ; 设: ( R 0 ) = 0 B 0 1 0 0 0 1 0 0 ; R 0 中第 3 位到 S R E G中的 T 标志 b r b s 6 , L P 1 ; S R E G 中的 6 位被置位( T = 1 ) 则转移, 若为零顺执 S E T ; 置 T 标志为 1 第四章 AVR 单片机指令系统 4 33 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN R J M P L P ; 反复测试 L P 1 : C L T ; T 标志清零 R J M P L P ; 反复测试 W o r d s 1 2 b y t e s C y c l e s l i f c o n d i t i o n i s f a l s e 2 i f c o n d i t l o n i s t r u e 2 状态寄存器中位清零转移 B R B CS R E G中的位被清零转移 说明条件相对转移, 测试 S R E G 的某一位, 如果该位被清零, 则相对 P C 值转移. 这条 指令相对 P C 转移的方向为 P C 6 4 目的 P C 6 3 参数 K 为 P C 的偏移 用 2 的补码表示 操作I f S R E G ( S ) 0 t h e n P C ?( P C 1 ) k , e l s e P C ?P C 十 1 语法 操作码 程序计数器 B R B C S k 0 S 7 , - 6 4 k6 3 P C ?( P C 1 ) k P C ?P C l 1 6 位操作码 1 1 1 1 0 0 k k k k k k K 0 0 1 状态寄存器S R E 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 2 . A S M ) C P I R 2 0 , 5 ; R 2 0中内容与立即数 0 5 比, 设( R 2 0 ) = 6 或 ( R 2 0 ) = 5 L P : B R B C 1 , L P 1 ; S R E G 中位被清零则转移, 为 1 顺执 C L Z R J M P L P ; 反复测试 L P 1 : S E Z ; Z = 1 R J M P L P ; 反复测试 W o r d s l 2 b y t e s C y c l e s : 1 i f c o n d i t i o n i s f a l s e 2 i f c o n d i t i o n i s t r u e 3 相等转移 B R E Q相等转移 说明条件相对转移测试零标志Z如果 Z 位被置位则相对P C 值转移如果在执 行 C P C P I S U B 或 S U B I指令后立即执行该指令且当寄存器 R d 中无符号或有符号二进制 数与寄存器 R r 中无符号或有符号 H 进制数相等时转移将发生该指令相对 P C 转移的方向 为: p C 6 4 目的P C 6 3 参数 K 为 p C 的偏移用 2 的补码表示相当于指令B R B S I 第四章 AVR 单片机指令系统 4 34 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN K 操作I f R d R r ( z 1 ) t h e n P C ?( P C 十 1 ) k P C ?P C 十 1 语法 操作码 程序计数器 B R E Q k - 6 4 k6 3 P C ?( P C 1 ) k P C ?P C l 1 6 位操作码 1 1 1 1 0 0 k k k k k k K 0 0 1 状态寄存器S R E 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 3 . A S M ) l p : c p r 1 , r 2 ; 设: ( R 1 ) = $ A A . ( R 2 ) = $ A A b r e q l p 1 ; 相等转移, 不相等顺执, 请同时观察 Z 标志 i n c r 1 ; + 1 r j m p l p ; 反复验证 l p 1 : d e c r 1 ; - 1 r j m p l p ; 反复验证 W o r d s 1 2 b y t e s C y c l e s l i f c o n d i t i o n i s f s l s e 2 i f c o n d i t i o n i s t r u e 4 不相等转移 B R N E 不相等转移 说明 条件相对转移 测试零标志Z 如果 Z 位被清零则相对 P C 值转移如果在执行 C PC P I S U B 或 S U B I指令后立即执行该指令且当在寄存器R d 中的无符号或带符号二进制数不等于寄存器 R r 中的无符号或带符号二进制数时转移将发生该指令相对 P C 转移的方向为P C 6 4目的P C 6 3 参数 K 为 P C 的偏移用 2 的补码表示相当于指令B R B C I K 操作 I f R d R r ( Z 0 ) t h e n P C ?( P C 1 ) k e l e s P C ?P C 1 语法 操作码 程序计数器 B R N E k 6 4 k 6 3 P C ?( P C 1 ) k P C ?P C l 1 6 位操作码 1 1 1 1 0 1 k k k k k k k 0 0 1 状态寄存器S R E G 和布尔格式 I T H S V N Z C 第四章 AVR 单片机指令系统 4 35 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 例子( 实践操作程序 4 5 2 4 . A S M ) l p : c p r 1 , r 2 ; 设: ( R 1 ) = $ A B . ( R 2 ) = $ A A b r n e l p 1 ; 不相等转移, 相等顺执, 请同时观察 Z 标志 i n c r 1 ; + 1 r j m p l p ; 反复验证 l p 1 : d e c r 1 ; - 1 r j m p l p ; 反复验证 W o r d s 1 2 b y t e s C y c l e s l i f c o n d i t i o n i s f a l s e 2 i f c o n d i t i o n i s t r u e 5 C 标志位置位转移 B R C S - 进位位置位转移 说明条件相对转移测试进位标志C如果 C 位被置位则相对P C 值转移这条指令 相对 P C 转移的方向为 P C 6 4 目的P C 6 3 参数 K 为 P C 的偏移用 2 的补码表示相当于指令 B R B S 0 K 操作 I f C l t h e n P C ?( P C 1 ) k e l e s P C ?P C 1 语法 操作码 程序计数器 B R C S k 6 4 k 6 3 P C ?( P C 1 ) k P C ?P C l 1 6 位操作码: 1 1 1 1 0 0 k k k k k k K 0 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 5 . A S M ) S E C ; C = 1 , 请同时观察 C 标志 L P : B R C S L P 1 ; C = 1转, C = 0顺执 S E C ; C = 1 R J M P L P ; 重复试验 L P 1 : C L C ; C = 0 R J M P L P ; 重复试验 W o r d s 1 2 b y t e s C y c l e s l i f c o n d i t i o n i s f a l s e 2 i f c o n d i t i o n i s t r u e 6 C 标志位清除转移 B R C C 一进位位清除转移 说明条件相对转移测试进位标志C如果 C 位被清除则相对P C 值转移这条指 令相对 P C 转移的方向为P C 6 4 目的P C 6 3 参数 K 为 P C 的偏移用 2 的补码表示 第四章 AVR 单片机指令系统 4 36 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 相当于指令 B R B C 0 K 操作I f C 0 t h e n P C ?( P C 1 ) k e l e s P C ?P C 1 语法 操作码 程序计数器 B R C C k 6 4 k 6 3 P C ?( P C 1 ) k P C ?P C l 1 6 位操作码 1 1 1 1 0 1 k k k k k k K 0 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 6 . A S M ) C L C ; C = 0 , 请同时观察 C 标志 L P : B R C C L P 1 ; C = 0转, C = 1顺执 C L C ; C = 0 R J M P L P ; 重复试验 L P 1 : S E C ; C = 0 R J M P L P ; 重复试验 W o r d s 1 2 b y t e s C y c l e s l i f c o n d i t i o n i s f a l s e 2 i f c o n d i t i o n l s t r u e 7 大于或等于转移 B R S H - 大于等于转移无符号 说明条件相对转移测试进位标志C如果 C 位被清零则相对P C 值转移如果在 执行 C P C P I S U B 或 S U B I指令后立即执行该指令且当在寄存器R d 中无符号二进制数大 于等于寄存器 R r 中无符号二进制数时转移将发生该指令相对 P C 转移的方向为 P C 6 4目的P C 6 3 参数 K 为 P C 的偏移用 2 的补码表示相当于指令 B R B S 0 K 操作 I f R d R r ( C O ) t h e n P C ?( P C 1 ) k e l e s P C ?P C 1 语法 操作码 程序计数器 B R S H k - 6 4 k 6 3 P C ?( P C 1 ) k P C ?P C l 1 6 位操作码 1 1 1 1 0 1 k k k k k k K 0 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 7 . A S M ) l p : s u b i r 1 9 , 2 ; 带进位位立即数减, 设: ( r 1 9 ) = 1 第四章 AVR 单片机指令系统 4 37 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN b r s h l p 1 ; 大于等于转, 小于顺执, 请同时观察 C 标志 i n c r 1 9 ; ( r 1 9 ) + 1 i n c r 1 9 i n c r 1 9 r j m p l p ; 反复实验 l p 1 : i n c r 1 9 ; ( r 1 9 ) + 1 r j m p l p ; 反复实验 W o r d s 1 2 b y t e s C y c l e s l i f c o n d i t i o n i s f a l s e 2 i f c o n d i t i o n i s t r u e 3 8 低于转移 B R L O一小于转移无符号 说明条件相对转移测试进位标志C如果 C 位被置位则相对P C 值转移如果在 执行 C P C P I S U B 或 S U B I指令后立即执行该指令且当在寄存器R d 中无符号二进制数小 于在寄存器 R r 中无符号二进制数时转移将发生该指令相对 P C 转移的方向为 P C 6 4 目的P C 6 3 参数 K 为 P C 的偏移用 2 的补码表示相当于指令 B R B S 0 K 操作I f R d R r ( C = 1 ) t h e n P C ?( P C 1 ) k e l e s P C ?P C 1 语法 操作码 程序计数器 B R L O k - 6 4 k 6 3 P C ?( P C 1 ) k P C ?P C l 1 6 位操作码 1 1 1 1 0 0 k k k k k k k 0 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 8 . A S M ) l p : s u b i r 1 9 , 2 ; 带进位位立即数减, 设: ( r 1 9 ) = 2 b r l o l p 1 ; 小于转, 大于等于顺执, ; 请同时观察C 标志 i n c r 1 9 ; ( r 1 9 ) - 1 r j m p l p ; 反复实验 l p 1 : i n c r 1 9 ; ( r 1 9 ) + 1 i n c r 1 9 i n c r 1 9 i n c r 1 9 r j m p l p ; 反复实验 W o r d s 1 2 b y t e s C y c l e s l i f c o n d i t i o n i s f a l s e 2 i f c o n d i t i o n i s t r u e 第四章 AVR 单片机指令系统 4 38 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 9 . 负数转移 B R M I 负数转移 说明条件相对转移测试负号标志N如果 N 被置位则相对 P C 值转移该指令相 对 P C 转移的方向为 P C 6 4 目的P C 6 3 参数 K 为 P C 的偏移用 2 的补码表示相当于指令 B R B S 2 K 操作 I f N l t h e n P C ?( P C 1 ) k e l e s P C ?P C 1 语法 操作码 程序计数器 B R M I k 6 4 k 6 3 P C ?( P C 1 ) k P C ?P C l 1 6 位操作码 1 1 1 1 0 0 k k k k k k K 0 1 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 9 . A S M ) l p : s u b i r 1 8 , 2 ; 带进位位立即数减, 设: ( r 1 8 ) = 2 b r m i l p 1 ; 为负转 N = 1 , 为正顺执N = 0 ; 请同时观察 N 标志 i n c r 1 8 ; ( r 1 8 ) + 1 r j m p l p ; 反复实验 l p 1 : i n c r 1 8 ; ( r 1 8 ) + 1 i n c r 1 8 i n c r 1 8 i n c r 1 8 r j m p l p ; 反复实验 W o r d s 1 2 b y t e s C y c l e s l i f c o c d i t i o n i s f a l s e 2 i f c o n d i t i o n i s t r u e 1 0 正数转移 B R P L一正数转移 说明条件相对转移测试负号标志N如果 N 被清零, 则相对 P C 值转移该指令相对 P C转移的方向为 P C 6 4 目的P C 6 3 参数 K 为 P C 的偏移用 2 的补码表示相当于指令 B R B C 2 K 操作I f N 0 t h e n P C ?( P C 十 1 ) k e l e s P C ?P C 1 语法 操作码 程序计数器 B R P L k - 6 4 k6 3 P C ?( P C 1 ) k P C ?P C l 1 6 位操作码 1 1 1 1 0 1 k k k k k k K 0 1 0 状态寄存器S R E 和布尔格式 第四章 AVR 单片机指令系统 4 39 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN I T H S V N Z C 例子( 实践操作程序4 5 2 1 0 . A S M ) l p : s u b i r 1 8 , 2 ; 带进位位立即数减, 设: ( r 1 8 ) = 2 B R P L l p 1 ; 为正转 N = 0 , 为负顺执N = 1 请同时观察 N 标志 i n c r 1 8 ; ( r 1 8 ) + 1 i n c r 1 8 i n c r 1 8 i n c r 1 8 r j m p l p ; 反复实验 l p 1 : d e c r 1 8 ; ( r 1 8 ) + 1 d e c r 1 8 r j m p l p ; 反复实验 p o s i t i v e n o p W o r d s l 2 b y t e s C y c l e s l i f c o n d i t i o n i s f a l s e 2 i f c o n d i t i o n i s t r u e 1 1 大于或等于转移 B R G E 大于或等于转移带符号 说明条件相对转移测试符号标志S如果 S 位被清零则相对 P C 值转移如果在执行 C P C P I S U B 或 S U B I指令后立即执行该指令且当在寄存器 R d 中带符号二进制数大于或等于寄存器 R r 中带符号二进制数时转移将发生该指令相对 P C转移的方向为P C 6 4 目的P C 6 3 参数 K为 P C 的偏移用 2 的补码表示相当于指令 B R B C 4 K 操作 I f R d R r ( N V 0 ) t h e n P C ?( P C 1 ) k e l e s P C ?P C 1 语法 操作码 程序计数器 B R G E k 6 4 k 6 3 P C ?( P C 1 ) k P C ?P C l 1 6 位操作码 1 1 1 1 0 1 k k k k k k K 1 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 1 1 . A S M ) l p : s u b i r 1 8 , 2 ; 带进位位立即数减, 设: ( r 1 8 ) = 2 b r g e l p 1 ; 为大于或等于转 S = 0 , 小于顺执S = 1 请同时观察 S 标志 第四章 AVR 单片机指令系统 4 40 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN i n c r 1 8 ; ( r 1 8 ) + 1 i n c r 1 8 i n c r 1 8 i n c r 1 8 r j m p l p ; 反复实验 l p 1 : d e c r 1 8 ; ( r 1 8 ) + 1 d e c r 1 8 r j m p l p ; 反复实验 W o r d s l 2 b y t e s C y c l e s l i f c o n d i t i o n i s f a l s e 2 i f c o n d i t i o n i s t r u e 1 2 小于转移 B R L T 小于转移有符号 说明条件相对转移测试符号标志S如果 S 位被置位则相对P C 值转移如果在 执行 C P C P I S U B 或 S U B I指令后立即执行该指令且当在寄存器R d 中带符号二进制数小 于在寄存器 R r 中带符号二进制数时转移将发生该指令相对 P C 转移的方向为P C 6 4 目的P C 6 3 参数 K 为 P C 的偏移用 2 的补码表示相当于指令 B R B S 4 K 操作I f R d R f ( N V 1 ) t h e n P C ?( P C 1 ) k e l e s P C ?P C 1 语法 操作码 程序计数器 B R L T k - 6 4 k 6 3 P C ?( P C 1 ) k P C ?P C l 1 6 位操作码 1 1 1 1 0 0 k k k k k k k 1 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 1 2 . A S M ) l p : s u b i r 1 8 , 2 ; 带进位位立即数减, 设: ( r 1 8 ) = 2 b r l t l p 1 ; 为小于于转 S = 0 , 大于或等顺执S = 1 请同时观察 S 标志 i n c r 1 8 ; ( r 1 8 ) + 1 i n c r 1 8 i n c r 1 8 i n c r 1 8 r j m p l p ; 反复实验 l p 1 : d e c r 1 8 ; ( r 1 8 ) - 1 d e c r 1 8 r j m p l p ; 反复实验 W o r d s 1 2 b y t e s C y c l e s l i f c o n d i t i o n i s f a l s e 2 i f c o n d i t l o n i s t r u e 第四章 AVR 单片机指令系统 4 41 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 1 3 半进位标志置位转移 B R H S - - 半进位标志置位转移 说明条件相对转移测试半进位标志H如果 H 被置位则相对 P C 值转移该指令 相对 P C 转移的方向为P C 6 4 目的P C 6 3 参数 K 为 P C 的偏移用 2 的补码表示 相当于指令B R B S 5 K 操作 I f H l t h e n P C ?( P C l ) k e l e s P C ?P C 1 语法 操作码 程序计数器 B R H S k 6 4 k 6 3 P C ?( P C 1 ) k P C ?P C l 1 6 位操作码 1 1 1 1 0 0 k k k k k k k 1 0 1 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 1 3 . A S M ) l p : a d d r 1 0 , r 1 1 ; 加法设: ( r 1 0 ) = 5 , ( r 1 1 ) = 5 , ( r 1 2 ) = 5 b r h s l p 1 ; 半进位标志( H ) = 1 转移 ; ( H ) = 0 顺执 d e c r 1 0 ; ( R 1 0 ) - 1 d e c r 1 0 r j m p l p ; 反复实验 l p 1 : a d d r 1 0 , r 1 2 ; 加法 r j m p l p ; 反复实验 W o r d s 1 2 b y t e s C y c l e s l i f c o n d i t i o n i s f a l s e 2 i f c o n d i t i o n i I s t r u e 1 4 半进位标志清零转移 B R H C 一半进位标志被清零转移 说明条件相对转移测试半进位标志H如果 H 位被清零则相对 P C 值转移该指令相对 P C 转移的方向为P C 6 4 目的P C 6 3 参数 K 为 P C 的偏移用 2 的补码表示相当于指令 B R B C 5 K 操作 I f H 0 t h e n P C ?( P C 1 ) k e l e s P C ?P C 1 语法 操作码 程序计数器 B R H C k - 6 4 k 6 3 P C ?( P C 1 ) k P C ?P C l 1 6 位操作码 1 1 1 1 0 1 k k k k k k k 1 0 1 第四章 AVR 单片机指令系统 4 42 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 状态寄存器S R E G ) 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 1 4 . A S M ) l p : a d d r 1 0 , r 1 1 ; 加法设: ( r 1 0 ) = 5 , ( r 1 1 ) = 5 , ( r 1 2 ) = 5 b r h c l p 1 ; 半进位标志( H ) = 0 转移, ( H ) = 1 顺执 d e c r 1 0 ; ( R 1 0 ) - 1 d e c r 1 0 r j m p l p ; 反复实验 l p 1 : a d d r 1 0 , r 1 2 ; 加法 r j m p l p ; 反复实验 W o r d s l 2 b y t e s C y c l e s l i f c o n d i t i o n i s f a l s e 2 i f c o n d i t l o n i s t r u e 1 5 T 标志置位转移 B R T S T 标志被置位转移 说明条件相对转移测试 T 标志如果 T 被置位则相对 P C 值转移该指令相对P C 转移的方向为 P C 6 4 目的P C 6 3 参数 K 为 P C 的偏移用 2 的补码表示相当于指令 B R B S 6 K 操作: I f T l t h e n P C ?( P C 1 ) k e l e s P C ?P C 1 语法 操作码 程序计数器 B R T S k - 6 4 k 6 3 P C ?( P C 1 ) k P C ?P C l 1 6 位操作码 1 1 1 1 0 0 k k k k k k k 1 1 0 状态寄存器S R E 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 1 5 . A S M ) l p : b s t r 3 , 5 ; R 3 中的 5 位到 S R E G中 T 标志, 设: ( R 3 ) = $ A A b r t s L P 1 ; ( T ) = 1 转移, ( T ) = 0 顺执 r o l r 3 ; r 3 通过进位位左循环 r j m p l p ; 反复实验 L P 1 : r o l r 3 ; r 3 通过进位位左循环 r j m p l p ; 反复实验 W o r d s 1 2 b y t e s C y c l e s : 1 i f c o n d i t i o n i s f a l s e 2 i f c o n d i t l o n i s t r u e 第四章 AVR 单片机指令系统 4 43 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 1 6 T 标志清零转移 B R T C T 标志被清零转移 说明条件相对转移测试 T 标志如果 T 被清零则相对 P C 值转移该指令相对P C 转移的方向为 P C 6 4 目的P C 6 3 参数 K 为 P C 的偏移 用 2 的补码表示 相当于指令 B R B C 6 K 操作I f T 0 t h e n P C ?( P C 1 ) k e l e s P C ?P C 1 语法 操作码 程序计数器 B R T C k 6 4 k 6 3 P C ?( P C 1 ) k P C ?P C l 1 6 位操作码 1 1 1 1 0 1 k k k k k k k 1 1 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 1 6 . A S M ) b s t r 3 , 5 ; R 3中的 5 位到 S R E G中 T 标志, 设 R 3 = $ 5 5 l p : b r t c l p 1 ; T 标志置 0 转移, 置 1 顺执 c l t ; ( T ) = 0 r j m p l p ; 反复测试 l p 1 : s e t ; ( T ) = 1 r j m p l p ; 反复测试 W o r d s 1 2 b y t e s C y c l e s l i f c o n d i t i o n i s f a l s e 2 i f c o n d i t i o n i s t r u e 1 7 溢出标志置位转移 B R V S一溢出标志被置位转移 说明条件相对转移测试溢出标志V如果 V 被置位则相对 P C 值转移该对 P C 转移的方向为P C 6 4 目的P C 6 3 参数 K 为 P C 的偏移用 2 的补码表示相当于指令 B R B S 3 K 操作 I f V l t h e n P C ?( P C l ) k e l e s P C ?P C l 语法 操作码 程序计数器 B R V S k - 6 4 k6 3 P C ?( P C l ) k P C ?P C 1 1 6 位操作码 1 1 1 1 0 0 k k k k k k k 0 1 1 状态寄存器S R E 和布尔格式 I T H S V N Z C 第四章 AVR 单片机指令系统 4 44 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 例子( 实践操作程序4 5 2 1 7 . A S M ) l p : b r v s l p 1 ; 溢出标志位( V ) = 1 转移, ( V ) = 0 顺执 s e v ; 溢出标志位( V ) 置 1 r j m p l p ; 反复测试 l p 1 : c l v ; 溢出标志位( V ) 置 0 r j m p l p ; 反复测试 w o r d s 1 2 b y t e s C y c l e s l i f c o n d i t i o n i s f a l s e 2 i f c o n d i t i o n i s t r u e 1 8 溢出标志清零转移 B R V C 一溢出标志被清零转移 说明条件相对转移测试溢出标志V如果 V 被清零则相对 P C 值转移该对 P C 转移的方向为 P C 6 4 目的P C 6 3 参数 K 为 P C 的偏移用2 的补码表示相当于指令B R B C 3K 操作I f V 0 t h e n P C ?( P C 1 ) k e l e s P C ?P C 1 语法 操作码 程序计数器 B R V C k 6 4 k6 3 P C ?( P C 1 ) k P C ?P C 1 1 6 位操作码 1 1 1 1 0 1 k k k k k k k 0 1 1 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 1 8 . A S M ) l p : b r v c l p 1 ; 溢出标志位( V ) = 0 转移, ( V ) = 1 顺执 c l v ; 溢出标志位( V ) 置 0 r j m p l p ; 反复测试 l p 1 : s e v ; 溢出标志位( V ) 置 1 r j m p l p ; 反复测试 W o r d s 1 2 b y t e s C y c l s e l i f c o n d i t i o n i s f a l s e 2 i f c o n i t i o n i s t r u e 1 9 中断标志触发转移 B R I E 全局中断被触发转移 说明条件相对转移测试全局中断标志I如果 I 被置位 1 则相对P C 值转移该指令相对 P C 转移的方向为P C 6 4 目的P C 6 3 参数 K 为 P C 的偏移用2 的补码表示相当于指令 B R B S 7 K 操作 I f I l t h e n P C ?( P C 1 ) k e l e s P C ?P C 1 语法 操作码 程序计数器 B R I E k 6 4 k6 3 P C ?( P C 1 ) k 第四章 AVR 单片机指令系统 4 45 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN P C ?P C 1 1 6 位操作码 1 1 1 1 0 0 k k k k k k k 1 1 1 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 1 9 . A S M ) L P : B R I E L P 1 ; 全局中断标志( I ) = 1 转移, ; 用鼠标在状态寄存器窗口中 I 标志点一下 ; ( I ) = 0顺执 S E I ; ( I ) = 1 R J M P L P ; 反复测试 L P 1 : C L I ; ( I ) = 0 R J M P L P ; 反复测试 . . . w o r d s l 2 b y t e s C y c l e s l i f c o n d i t i o n i s f a l s e 2 i f c o n d i t i o n i s t r u e 2 0 中断标志禁止转移 B R I D一全局中断被禁止转移 说明条件相对转移测试全局中断标志I如果 I 被清零则相对 P C 但转移 该指令相对 P C 转移的方向为P C 6 4 目的P C 6 3 参数 K 为 P C 的 b 偏移用 2 的补码表示( 相 当于指令 B R B C 7 K 操作I f I = 0 t h e n P C ?( P C 1 ) k e l s e P C ?P C 1 语法 操作码 程序计数器 B R I D k 6 4 k 6 3 P C ?( P C 1 ) k P C ?P C 1 1 6 位操作码 1 1 1 1 0 1 k k k k k k k 1 1 1 状态寄存器S R E G 和布尔格式 I T H S V N Z C 第四章 AVR 单片机指令系统 4 46 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 例子( 实践操作程序 4 5 2 2 0 . A S M ) L P : B R I D L P 1 ; 全局中断标志( I ) = 0 转移, ( I ) = 1 顺执 C L I ; ( I ) = 0 R J M P L P ; 反复测试 L P 1 : S E I ; ( I ) = 1 R J M P L P ; 反复测试 W o r d s 1 2 b y t e s C y c l e s l i f c o n d i t i o n i s f a l s e 2 i f c o n d i t i o n i s t r u e 二测试条件符合跳行转移指令 2 1 相等跳行 C P S E 比较相等跳行 说明该指令完成两个寄存器R d 和 R r 的比较 若 R d R r 则跳行执行指令 操作I f R d R r t h e n P C ?P C 2 o r 3 e l s e P C ?P C 1 语法 操作码 程序计数器 C P S E R d , R r 0 d 3 1 0 r 3 1 P C ?P C 1 P C ?P C 2 P C ?P C 3 1 6 位操作码 0 0 0 1 0 0 r d d d d d r r r r 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序 4 5 2 2 1 . A S M ) l p : i n c r 4 ; 设( r 4 ) = $ 7 7 , ( r 0 ) = $ 7 7 ; 设( r 4 ) = $ 7 6 , ( r 0 ) = $ 7 7 l p 1 : c p s e r 4 , r 0 ; r 4 与 r 0 比较相等跳行, 不等顺执 l d s r 1 0 , $ 0 1 0 0 ; 这是四字节指令把S R A M地址 $ 0 1 0 0 的数据装入 R 1 0 n o p d e c r 4 ; ( r 4 ) - 1 c p s e r 4 , r 0 ; r 4与 r 0 比较相等跳行, 不等顺执 r j m p l p 1 ; 这是二字节指令 m o v r 1 0 , r 0 ; 拷贝 r j m p l p ; 反复测试 W o r d s 1 2 b y t e s C y c l e s l 2 2 寄存器位清零跳行 S B R C一寄存器位被清零跳行 说明该指令测试寄存器某位如果该位被清零则跳下一行执行指令 第四章 AVR 单片机指令系统 4 47 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 操作I f R d b 0 t h e n P C ?P C 2 o r 3 e l e s P C ?P C 1 语法 操作码 程序计数器 S B R C R r b 0 r 3 1 0 b 7 P C ?P C 十 1 p C ?p C 2 P C ?P C 3 1 6 位操作码 1 1 1 1 1 1 0 r r r r r X b b b 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 2 2 . A S M ) l p : s u b r 0 , r 1 ; 设: ( r 0 ) = $ 8 0 , ( r 1 ) = $ 7 0 s b r c r 0 , 7 ; r 0 的 7 位清零跳行, 为 1 顺执 s u b r 0 , r 1 ; 这是二字节指令 s w a p r 0 ; r 0 半字节交换 r j m p l p ; 反复测试 W o r d s 1 2 b y t e s C y c l e s l i f c o n d i t i o n i s f a l s e ( n o s k i p ) 2 i f c o n d i t i o n i s t r u e s k i p i s e x e c t u e d 2 3 寄存器位置位跳行 S B R S 一寄存器位置位跳行 说明该指令测试寄存器某位如果该位被置位则跳下一行执行指令 操作: I f R r ( bl t h e n P C ?P C 2 o r 3 e l e s P C ?P C l 语法 操作码 程序计数器 S B R S R r b r 3 1 0 b 7 P C ?P C 1 P C ?P C 2 P C ?P C 3 1 6 位操作码 1 1 1 1 1 1 1 r r r r r X b b b 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序 4 5 2 2 3 . A S M ) l p : s u b r 0 , r 1 ; 设: ( r 0 ) = $ 8 0 , ( r 1 ) = $ 7 0 s b r s r 0 , 7 ; r 0 的 7 位置位跳行, 为 0 顺执 s u b r 0 , r 1 ; 这是二字节指令 s w a p r 0 ; r 0 半字节交换 第四章 AVR 单片机指令系统 4 48 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN r j m p l p ; 反复测试 W o r d s 1 2 b y t e s C y c l e s l i f c o n d i t i o n i s f a l s e n o s k i p 2 i f c o n d i t i o n i s t r u e s k i p I s e x e c t u e d 2 4 I O 寄存器位清零跳行 S B I C I O 寄存器的位清零跳行 说明该指令测试 I O寄存器某位如果该位被清零则跳一行执行指令该指令在低 3 2个 I 0 寄存器内操作地址为0 3 1 操作 I f I O P b 0 t h e n P C ?P C 2 o r 3 e l e s P C ?C 1 语法 操作码: 程序计数器 S B I C P , b 0 P 3 1 0 b 7 P C ?P C 1 P C ?P C 2 P C ?P C 3 1 6 位操作码 1 0 0 1 1 0 0 1 P P P P P b b b 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 2 4 . A S M ) l p : s b i c $ 1 c , 1 ; 复位后( E E C R ) = $ 0 0 , . e q u E E C R = $ 1 c , 测试 1 位, 为跳 0 行, 为 1 顺执 ; 请打开 I / O 窗口观察,注意: 这条指令只能连续测试 1 次, ; 第 2 次会改变$ 1 C 数据( 反复测试不能用该指令) r j m p l p ; 这是二字节指令 l d i R 1 6 , $ 0 f ; O U T $ 1 C , R 1 6 ; 置 i / o 寄存器 1 位为 1 r j m p l p W o r d s 1 2 b y t e s C y c l e s : 1 i f c o n d i t i o n i s f a l s e n o s k i p 2 i f c o n d i t i o n i s t r u e s k i p I s e x e c t u e d 2 5 I O 寄存器位置位跳行 S B I S I O 寄存器的位置位跳行 说明该指令测试 1 O 寄存器某位如果该位被置位则跳一行执行指令该指令在低 第四章 AVR 单片机指令系统 4 49 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 3 2 个 1 O 寄存器内操作地址为 0 3 1 操作 I f I O P , b l t h e n P C ?P C 2 o r 3 e l s e P C ?P C 1 语法 操作码 程序计数器 S B I S p , b 0 P 3 1 0 b 7 P C ?P C 1 P C ?P C 2 1 6 位操作码 P C ?P C 3 1 0 0 1 1 0 1 1 P P P P P b b b 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 2 5 . A S M ) l p : l d i R 1 6 , $ 0 f ; O U T $ 1 C , R 1 6 ; 置 i / o 寄存器 1 位为 1 L p 1 : s b i s $ 1 c , 1 ; 复位后( E E C R ) = $ 0 0 , . e q u E E C R = $ 1 c , 测试 1 位, 为跳 1 行, 为 0 顺执 ; 请打开 I / O 窗口观察, ;注意: 这条指令只能连续测试1 次, 第2 次会改变$ 1 C 数据( 反复测试不能用该指令) , 见4 5 2 2 5 B . A S M r j m p l p ; 这是二字节指令 l d i R 1 6 , $ 0 0 ; O U T $ 1 C , R 1 6 ; 置 i / o 寄存器 1 位为 0 r j m p l p 1 W o r d s 1 2 b y t e s C y c l e s l i f c o n d i t i o n i s f a l s e n o s k i p 2 i f c o n d i t i o n i s t r u e s k i p I s e x e c t u e d 三调用和返回指令 在程序设计中通常把具有一定功能模块的公用程序段定义为子程序为了实观调用子程序的功能指令系统中都有调用指令也称转移子程序指令它与转移指令的区别如下执行调用子程序时把下一条指令地址P C 值保留到堆栈中即断点保护然后把子程序的起始地址置入P C 子程序执行完毕再从断点返回从断点处继续执行原程序而转移指令即不保护断点也不返回原程序在每个子程序中都必须有返回指令返回指令的功能就是把调用前压入堆栈的断点弹出置入 P C 恢复调用前的原程序 在一个程序中子程序中还会调用别的子程序这称为子程序嵌套每次调用子程序时必须将下条指令地址保存起来返回时按后进先出原则依次取出旧P C 值堆栈就是按后进先出规律存取数据的调用指令和返回指令具有自动的保存和恢复 P C 内容的功能, 即自动进栈, 自动出栈 2 6 相对调用 R C A L L 相对调用于程序 说明在 P C + 1后2 K 字4 K 字节范围内调用子程序返回地址 R C A L L 后的指令地址存储到堆栈见 C A L L 操作P C ?( P C 1 ) k 语法 操作码 程序计数器 R C A L L k 2 K k 2 K P C ?( P C 1 ) k 1 6 位操作码 第四章 AVR 单片机指令系统 4 50 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 1 1 0 1 k k k k k k k k k k k k 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子: ( 实践操作程序D I P 4 0 L E D . A S M ) s e r t e m p ; 直接装入$ F F , o u t D D R A , t e m p ; 口的方向寄存器设定, 为输出 f o r e v e r : c l r t e m p ; 硬件设低电平L E D 灯亮 o u t P O R T A , t e m p ; P O R T A 口 L E D 灯亮 l d i t e m p , 1 2 0 0 ; 装延时常数( 十进制) , 灯亮延时, r c a l l d e l a y _ m S ; 调用延时子程序 s e r t e m p ; 硬件设高电平L E D 灯灭 o u t P O R T A , t e m p ; P O R T A 口 L E D 灯灭 l d i t e m p , 1 2 0 0 ; 装延时常数, 灯灭延时, 可修改该参数 r c a l l d e l a y _ m S ; 调用延时子程序 r j m p f o r e v e r ; 无限循环 d e l a y _ m S : ; 延时子程序 l d i z l , l o w ( 2 5 0 0 ) ; 装入延时参数, 参数可修改 l d i z h , h i g h ( 2 5 0 0 ) ; 参数可修改 d e l a y _ l o o p : d e c z l ; - 1 b r n e d e l a y _ l o o p ; 不相等转移, 相等按顺序执行 d e c z h ; - 1 b r n e d e l a y _ l o o p ; 不相等转移, 相等按顺序执行 d e c t e m p ; - 1 b r n e d e l a y _ m S ; 不相等转移, 相等按顺序执行 r e t ; 子程序返回 W o r d s 1 2 b y t e s C y c l e s 3 2 7 间接调用 I C A L L 间接调用于程序 说明间接调用由寄存器区中的 Z 1 6 位指针寄存器指向的子程序Z 指针寄存器 是 1 6 位宽允许调用当前程序存储空间6 4 K 字1 2 8 字节内的子程序 操作 P C 1 5 0 ?Z 1 5 0 P C 1 5 0 ?Z 1 5 O 语法 操作码 程序计数器 I C A L L N o n e S e e o p e r a t i o n 1 6 位操作码 第四章 AVR 单片机指令系统 4 51 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 1 0 0 1 0 1 0 1 X X X X 1 0 0 1 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 2 7 . A S M ) . O R G $ 0 0 1 0 L P : M O V R 3 0 , R 0 ; 设( R 0 ) 为 Z 寄存器低8 位地址, R 3 0为 Z 间接地址低 8 位 M O V R 3 1 , R 1 ; 设( R 1 ) 为 Z 寄存器高8 位地址, R 3 1为 Z 间接地址高 8 位 I C A L L ; 根据 Z寄存器的内容调用, 该步用进入子程序图标 调试 . O R G $ 0 2 0 0 L D I R 2 0 , $ 1 1 ; 地址$ 0 2 0 0 , 如设( R 0 ) = $ 0 0 , ( R 1 ) = 0 2 , 执行 I C A L L 到此行 L D I R 2 1 , $ 2 2 ; 地址$ 0 2 0 1 , 如设( R 0 ) = $ 0 1 , ( R 1 ) = 0 2 , 执行 I C A L L 到此行 L D I R 2 2 , $ 3 3 ; 地址$ 0 2 0 2 , 如设( R 0 ) = $ 0 2 , ( R 1 ) = 0 2 , 执行 I C A L L 到此行 L D I R 2 3 , $ 4 4 ; 地址$ 0 2 0 3 , 如设( R 0 ) = $ 0 3 , ( R 1 ) = 0 2 , 执行 I C A L L 到此行 L D I R 2 4 , $ 5 5 ; 地址$ 0 2 0 4 , 如设( R 0 ) = $ 0 4 , ( R 1 ) = 0 2 , 执行 I C A L L 到此行 L D I R 2 5 , $ 6 6 ; 地址$ 0 2 0 5 , 如设( R 0 ) = $ 0 5 , ( R 1 ) = 0 2 , 执行 I C A L L 到此行 I C A L L ; 地址$ 0 2 0 5 , 如设( R 0 ) = $ 0 6 , ( R 1 ) = 0 2 , 执行 I C A L L 到此行 ; 又根据 Z 寄存器的内容调用到指定地址 m o v e r 3 0 r 0 i c a l l W o r d s 1 Z b y t e s C y c l e s 3 2 8 长调用 C A L L 子程序长调用 说明在整个程序存储器区内调用子程序返回地址调用后返回的指令地址将存储 在堆栈见 R C A L L 指令中 操作P C ?k P C ?k 语法 操作码 程序计数器 C A L L k 0 k 6 4 K P C ?k S T A C K ?P C 2 S P ?S P 2 C A L L k 0 k 4 M P C ?k S T A C K ?P C 2 S P ?S P 3 3 2 位操作码 1 0 0 1 0 1 0 k k k k k 1 1 1 k k k k k k k k k k k k k k k k k 状态寄存器S R E 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 5 2 2 8 . A S M ) 第四章 AVR 单片机指令系统 4 52 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN m o v e r 1 6 , r 0 c a l l d e l a y _ m S ; 长调用延时子程序, 该步用进入子程序图标调试 . O R G $ 0 2 0 0 d e l a y _ m S : ; 延时子程序 l d i z l , l o w ( 1 9 9 0 ) l d i z h , h i g h ( 1 9 9 0 ) d e l a y _ l o o p : d e c z l b r n e d e l a y _ l o o p d e c z h b r n e d e l a y _ l o o p d e c t e m p b r n e d e l a y _ m S r e t ; 子程序返回 W o r d s 2 4 b y t e s C y c l e s 4 2 9 从子程序返回 R E T 子程序返回 说明从子程序返回返回地址从堆栈中弹出 操作 P C 1 5 0 ?S T A C K P C 2 1 0 ?S T A C K 语法 操作码 程序计数器 堆栈 R E T N o n e S e e O p e r a t i o n S P ?S P 2 R E T N o n e S e e O p e r a t i o n S P ?S P 3 1 6 位操作码 1 0 0 1 0 1 0 1 0 X X 0 1 0 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序见 4 5 2 2 8 . A S M ) R C A L L L P L P : L D I R 1 6 , 0 X 5 6 ; 装入延时常数, 延时 1 秒 R C A L L D E L Y ; 调用通用延时子程序 R E T ; 子程序返回 W o r d s 1 Z b y t e s C y c l s e 4 3 0 从中断程序返回 R E T I 中断返回 说明从中断程序中返回返回地址从堆栈中弹出且全局中断标志被置位 注意: 1 . 主程序应跳过中断区, 防止修改补充中断程序带来麻烦; 2 . 不用的中断入口地址写上R E T I - 中断返回, 有抗干扰作用; 第四章 AVR 单片机指令系统 4 53 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 操作 P C 1 5 0 ?S T A C K P C 2 1 0 ?S T A C K 语法 操作码 程序计数器 堆栈 R E T I N o n e S e e O p e r a t i o n S P ?S P 十 2 R E T I N o n e S e e O p e r a t i o n S P ?S P 3 1 6 位操作码 1 0 0 1 0 1 0 1 0 X X 0 1 0 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子 ( 程序 45230.ASM,摘自”乐曲.ASM”部分程序,仅供参考),能执行程序请阅”乐曲.ASM”程序及 AVR 单片机在儿童智能玩具中的应用-音乐玩具(电脑放音机)一文 . c s e g . o r g 0 x 0 6 ; t i m e r l 中断入口地址 i n t t 1 : R J M P O U T P M ; 转中断服务子程序 . c s e g . o r g 0 x 0 1 0 ; O U T P M : O U T T C N T 1 H , T O N H ; 中断服务子程序 O U T T C N T 1 L , T O N L ; S B I S P O R T C , 0 0 ; R J M P S E T O P 1 ; S E T O P 0 : C B I P O R T C , 0 0 ; L D I M U S N , $ 0 0 ; R E T I ; 中断返回 S E T O P 1 : S B I P O R T C , 0 0 ; L D I M U S N , $ 0 1 ; R E T I ; 中断返回 e x t i n t p u s h r 0 p o p r o r e t i W O r d s 1 Z b y t e s C y c l s e 4 第四章 AVR 单片机指令系统 4 54 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 4 . 6 数据传送指令 数据传送指令是在编程时使用最频繁的一类指令数据传送指令是否灵活快速对程序的执行速度产生很大影响数据传送指令执行操作是寄存器与寄存器寄存器与数据存储器S R A M寄存器与 I O端口之间的数据传送另外还有从程序存储器直接取数指令 L P M以及 P U S H 压栈和 P O P 出栈的堆栈指令 4 . 6 . 1 直接数据传进指令 1 寄存器拷贝数据 M O V 寄存器拷贝 说明该指令将一个寄存器拷贝到另一个寄存器源寄存器 R r 的内容不改变而目的 寄存器 R d 拷贝了 R r 的内容 操作R d R r 语法 操作码 程序计数器 M O V R d R r 0 d 3 1 0 r 3 1 P C ?P C 1 1 6 位操作码 0 0 1 0 1 1 r d d d d d r r r r 状态寄存器S R E 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 6 1 1 . A S M ) l p : m o v r 1 6 , r 0 ; 把 R 0 的内容传送到R 1 6 中 r c a l l c h e c k ; 调用子程序 r j m p l p ; 反复实验 . o r g $ 0 1 0 0 ; 子程序首址 c h e c k : s w a p r 0 ; r 0半字节交换 r e t ; 子程序返回 W o r d s 1 2 b y t e s C y c l e s 1 2 S R A M数据直接送寄存器 L D S 直接从 S R A M装入 说明把 S R A M中 1 个字节装入到寄存器必须提供一个 1 6 位地址存储器访问被 限制在当前 6 4 K 字节的 S R A M页超过 6 4 K 字节L D S 指令使用R A M P Z 寄存器访问 操作R d ?( k 语法 操作码 程序计数器 L D S R d k 0 d 3 1 0 k 6 5 5 3 5 P C ?P C 2 3 2 位操作码 1 0 0 1 0 0 0 d d d d d 0 0 0 0 k k k k k k k k k k k k k k k k 状态寄存器S R E G 和布尔格式 第四章 AVR 单片机指令系统 4 55 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN I T H S V N Z C 例子( 实践操作程序4 6 1 2 . A S M ) L P : l d s r 2 , $ 0 2 0 0 ; 把片内 S R A M地址$ 0 2 0 0 数据装入, 设: ( $ 0 2 0 0 ) = $ 1 1 a d d r 2 , r 1 ; R 2 与 R 0 内容相加, 结果存于R 2 中, 设: ( r 1 ) = $ 8 8 s t s $ 0 2 0 0 , r 2 ; R 2的内容送到片内 S R A M地址$ 0 2 0 0 R J M P L P ; 打开片内S R A M窗口观察, 反复测试 W o r d s 2 4 b y t e s C y c l e s 3 3 寄存器数据直接送S R A M S T S 寄存器数据直接送S R A M 说明将寄存器的内容直接存储到 S R A M 必须提供一个 1 6 位的地址存储器访问被限 制在当前6 4 K 字节的 S R A M页S T S 指令使用 R A M P Z 寄存器访问存储器可超过6 4 K 字节 操作k ?R r 语法 操作码 程序计数器 S T S k R r 0 r 3 1 0 k 6 5 5 3 5 P C ?P C 2 3 2 位操作码 1 0 0 1 0 0 1 d d d d d 0 0 0 0 k k k k k k k k k k k k k k k k 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 6 1 3 . A S M与 4 6 1 2 . A S M相同) L P : l d s r 2 , $ 0 2 0 0 ; 把片内 S R A M地址$ 0 2 0 0 数据装入, 设: ( $ 0 2 0 0 ) = $ 1 1 a d d r 2 , r 1 ; R 2 与 R 0 内容相加, 结果存于R 2 中, 设: ( r 1 ) = $ 8 8 s t s $ 0 2 0 0 , r 2 ; R 2的内容送到片内 S R A M地址$ 0 2 0 0 R J M P L P ; 打开片内S R A M窗口观察, 反复测试 W o r d s 2 4 b y t e s C y c l e s 3 4 立即数送寄存器 L D I 装入立即数 说明装入一个 8 位立即数到寄存器 R 1 6 R 3 1 中 第四章 AVR 单片机指令系统 4 56 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 操作R d ?K 语法 操作码 程序计数器 L D I R d K 1 6 d 3 1 0 K 2 5 5 P C ?P C 2 1 6 位操作码 1 1 1 0 K K K K d d d d K K K K 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 6 1 4 . A S M ) c l r r 3 1 ; R 3 1清零 l d i r 3 0 , $ F 0 ; 立即数送R 3 0 中, R 1 6 R R 3 1 l p m ; 装入程序存储器, 请观察 Z 寄存器内容 W o r d s 1 2 b y t e s C y c l e s 1 4 . 6 . 2间接数据传送指令 一使用 X寄存器间接传送数据 1 使用变址 X 间接将 S R A M中内容送入到寄存器 L D 一使用变址 X 间接将 S R A M中内容送入到寄存器 说明从 S R A M中间接送入一个字节到寄存器S R A M中的位置由寄存器区中的 X 1 6 位指针寄存器指出存储器访问被限制在当前 6 4 K 字节的 S R A M页中为访问另外 S R A M页则 I 0 范围内的寄存器 R A M P X 需改变在指令执行中X 指针寄存器值要么不 改变要么就加 1 或减 1 操作使用 X 指针寄存器的这些特性特别适合于访问矩阵表 和堆栈指针等 操作R d ?X ; 送数, X 指针寄存器值不改变 R d ?X X ?X 1 ; 先送数, 后 X 指针寄存器值加 1 X ?X 1 R d ?( X ) ; 先 X 指针寄存器值减 1 , 后送数 语法 操作码 操作流程 程序计数器 L D R d , X 0 d 3 1 送数, X 指针不改变 P C ?P C 1 L D R d , X + 0 d 3 1 先送数, 后 X 指针加 1 P C ?P C 1 L D R d , - X 0 d 3 1 先 X 指针减 1 , 后送数 P C ?P C l 1 6 位操作码 1 . 1 0 0 1 0 0 0 d d d d d 1 1 0 0 2 . 1 0 0 1 0 0 0 d d d d d 1 1 0 1 3 . 1 0 0 1 0 0 0 d d d d d 1 1 1 0 状态寄存器S R E G 和布尔格式 第四章 AVR 单片机指令系统 4 57 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN I T H S V N Z C 例子( 实践操作程序 4 6 2 1 . A S M ) L P : c l r r 3 1 ; 清零 Z 寄存器高位 l d i r 3 0 , $ 2 0 ; $ 2 0送 Z 寄存器低位 l d r 0 , X + ; 执行 X 寄存器, X + 1为地址的S R A M内容送 R 0 , 设: S R A M ( $ 0 1 0 0 ) = $ 1 1 ; ( $ 0 1 0 1 ) = $ 2 2 , ( $ 0 1 0 2 ) = $ 3 3 ; 再设 X 寄存器( X ) = $ 0 1 0 0 ; 这时( X ) = $ 0 1 0 0 , 先单步执行 ( R 0 ) = $ 1 1 , 然后( X ) + 1 = $ 0 1 0 1 ; 寄存器高位地址为R 2 7 , 低位地址为 R 2 6 , S R A M 地址$ 6 0 l d r 1 , X ; 这时( X ) = $ 0 1 0 1 单步执行后, ( R 1 ) = $ 2 2 l d i r 3 0 , $ 2 3 ; 单步执行后( R 3 0 ) = $ 2 3 l d r 2 , X ; 这时( X ) = $ 0 1 0 1 , 单步执行后( R 2 ) = $ 2 2 l d r 3 , - X ; 单步先执行( X ) - 1 = $ 0 1 0 0 , 然后执行( R 3 ) = $ 1 1 l d r 4 , X + ; 先单步执行, 这时( X ) = $ 0 1 0 0 , ( R 4 ) = $ 1 1 , 然后执行( X ) + 1 = $ 0 1 0 1 N O P ; 再从寄存器窗口看程序执行情况 R J M P L P W o r d s 1 2 b y t e s C y c l e s 2 2 使用变址 X 间接将寄存器内容传送到 S R A M S T 使用变址 X 间接将寄存器内容传送到 S R A M 说明间接将寄存器的一个字节传送到 S R A M S R A M的位置由寄存器区中的 X 1 6 位指针寄存器指出 存储器访问被限制在当前6 4 K 字节的 S R A M页中 为访问另外S R A M页 则 I O 范围的寄存器 R A M P X 将被修改在操作之后X 指针寄存器要么不改变要么是加 1 或减 1 使用 X 指针寄存器的这些特性特别适合用作堆栈指针 操作( X ) ? R r X ? R r X ?X 1 X ? X 1 ( X ) ?R r 语法 操作码 操作流程: 程序计数器 S T X , R r 0 d 3 1 送数, X 指针不改变 P C ?P C 1 第四章 AVR 单片机指令系统 4 58 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN S T X , R r 0 d 3 1 先送数, 后 X 指针加 1 P C ?P C 1 S T X , R r 0 d 3 1 先 X 指针减 1 , 后送数 P C ?P C l 1 6 位操作码 1 . 1 0 0 1 0 0 1 r r r r r 1 1 0 0 2 . 1 0 0 1 0 0 1 r r r r r 1 1 0 1 3 . 1 0 0 1 0 0 1 r r r r r 1 1 1 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 6 2 2 . A S M ) l p : c l r r 2 7 ; X 寄存器高位清零, 寄存器高位地址为R 2 7 , 低位地址为 R 2 6 l d i r 2 6 , $ 7 0 ; $ 7 0送 X 寄存器低位, S R A M 地址$ 6 0 s t X + , r 0 ; 设( R 0 ) = $ 1 1 , 先单步执行送S R A M ( X ) = $ 0 0 7 0 , 然后( X ) + 1 = $ 0 0 7 1 s t X , r 1 ; 设( R 1 ) = $ 2 2 , 这时( X ) = $ 0 0 7 1 , 单步执行后 S R A M ( $ 0 0 7 1 ) = $ 2 2 l d i r 2 6 , $ 8 0 ; $ 8 0送 X 寄存器低位 s t x , r 2 ; 设( R 2 ) = $ 3 3 , 这时( X ) = $ 0 0 8 0 , 单步执行后 S R A M ( $ 0 0 8 0 ) = $ 3 3 s t - x , r 3 ; 设( R 3 ) = $ 4 4 , 这时先单步执行( X ) - 1 = $ 0 0 7 F , 然后 R 3 内容送 S R A M ( $ 0 0 7 F ) n o p ; r j m p l p ; 反复测试 W o r d s 1 2 b y t e s C y c l e s 2 二使用 Y寄存器间接传送数据 3 使用变址 Y 间接将 S R A M中的内容传送到寄存器 L D L D D使用变址Y 间接将 S R A M中的内容传送到寄存器 说明带或不带偏移间接从 S R A M中传送一个字节到寄存器S R A M中的位置由寄存器区中的 Y1 6 位 指针寄存器指出 存储器访问被限制在当前 6 4 K 字节的 S R A M页中 为访问另外 S R A M页则 I O 范围内的寄存器 R A M P Y 需改变在指令执行后Y 指针寄存器值要么不改变要么就加 1或减 1 操作使用 Y 指针寄存器的这些特性特别适合于访问矩阵表和堆栈指针等 操作R d ?Y R d ? ( Y ) Y ?Y 1 Y ?Y 1 R d ?Y q R d ?Y 语法 操作码 操作流程: 程序计数器 L D R d , Y 0 d 3 1 送数, Y 指针不改变 P C ?P C 1 L D R d Y 0 d 3 1 先送数, 后 Y 指针加 1 P C ?P C 1 L D R d , - Y 0 d 3 1 先 Y 指针减 1 , 后送数 P C ?P C l L D D R d Y q 0 d 3 1 先 Y 指针加 q , 后送数, P C ?P C 1 0 q 6 3 执行后 Y 指针( Y 不含 q ) 不变 第四章 AVR 单片机指令系统 4 59 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 1 6 位操作码 1 . 1 0 0 0 0 0 0 d d d d d 1 0 0 0 2 . 1 0 0 1 0 0 0 d d d d d 1 0 0 1 3 . 1 0 0 1 0 0 0 d d d d d 1 0 1 0 4 . 1 0 q 0 q q 0 d d d d d 1 q q q 状态寄存器S R E 和布尔格式 I T H S V N Z C 例子( 实践操作程序 4 6 2 3 . A S M ) L P : c l r r 2 9 ; Y 寄存器高位清零, Y 寄存器高位地址为 R 2 9 , 低位地址为 R 2 8 l d i r 2 8 , $ 6 0 ; 将$ 6 0 送 Y 寄存器低位 S R A M 地址$ 6 0 l d r 0 , y + ; ; 执行 Y 寄存器, Y + 1为地址的S R A M内容送 R 0 , 设: S R A M ( $ 0 0 6 0 ) = $ 1 1 ; ( $ 0 0 6 1 ) = $ 2 2 , ( $ 0 0 6 2 ) = $ 3 3 ; 这时( Y ) = $ 0 0 6 0 , 先单步执行 ( R 0 ) = $ 1 1 , 然后( Y ) + 1 = $ 0 0 6 1 l d r 1 , y ; 这时( Y ) = $ 0 0 6 1 , 单步执行后, ( R 1 ) = $ 2 2 l d i r 2 8 , $ 7 0 ; 将$ 7 0 送 Y 寄存器低位 l d r 2 , y ; 这时( Y ) = $ 0 0 7 0 , 设( $ 0 0 7 0 ) = $ 4 4 , ( $ 0 0 6 F ) = $ 5 5 , ( $ 0 0 7 1 ) = $ 6 6 ; 单步执行后( R 2 ) = $ 4 4 l d r 3 , - y ; 单步先执行( Y ) - 1 = $ 0 0 6 F , 然后单步执行( R 3 ) = $ 5 5 l d d r 4 , y + 2 ; 单步执行, 先找增量地址( Y + Q ) = ( Y + 2 ) = ( $ 0 0 6 F + 2 ) = $ 0 7 1 , 后送数( R 4 ) = $ 6 6 , ;但 Y指计内容不变( Y 不含 q )( Y ) = $ 0 0 6 F n o p ; r j m p l p ; 反复测试 W o r d s 1 2 b y t e s C y c l e s 2 4 使用变址 Y 间接将寄存器内容传送到 S R A M S T S T D 使用变址Y 间接将寄存器内容传送到 S R A M 说明间接将带或不带偏移的寄存器的一个字节传送到 S R A M S R A M的位置由寄存器区中的Y1 6 位指针寄存器指出存储器访问被限制在当前 6 4 K 字节的 S R A M页为访问另外S R A M页则 I O 范围的寄存器R A M P Y将被修改 在操作之后, Y 指针寄存器要么不改变 要么是加 1 或减 1使用 Y 指针寄存器的这些特性特别适合用作堆栈指针 操作Y ? R r Y ? R r Y ?Y 1 Y ? Y l Y ?R r ( Y q ) ? R r 语法 操作码 操作流程: 程序计数器 S T Y , R r 0 d 3 1 送数, Y 指针不改变 P C ?P C 1 S T Y , R r 0 d 3 1 先送数, 后 Y 指针加 1 P C ?P C 1 S T - Y R r 0 d 3 1 先 Y 指针减 1 , 后送数 P C ?P C l S T D Y q , R r 0 d 3 1 先 Y 指针加 q , 后送数, P C ?P C 1 0 q 6 3 执行后 Y 指针( Y 不含 q ) 不变 第四章 AVR 单片机指令系统 4 60 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 1 6 位操作码 1 . 1 0 0 0 0 0 1 r r r r r 1 0 0 0 2 . 1 0 0 1 0 0 1 r r r r r 1 0 0 1 3 . 1 0 0 1 0 0 1 r r r r r 1 0 1 0 4 . 1 0 q 0 Q q 1 r r r r r 1 q q q q 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 6 2 4 . A S M ) L P : c l r r 2 9 ; Y 寄存器高位清零 Y 寄存器高位地址为 R 2 9 , 低位地址为 R 2 8 l d i r 2 8 , $ 7 0 ; $ 7 0 送 Y 寄存器低位, S R A M 地址$ 6 0 s t y + , r 0 ; 设( R 0 ) = $ 1 1 , 先单步执行送 S R A M ( Y ) = $ 0 0 7 0 , 然后( Y ) + 1 = $ 0 0 7 1 s t y , r 1 ; 设( R 1 ) = $ 2 2 , 这时( Y ) = $ 0 0 7 1 , 单步执行后 S R A M ( $ 0 0 7 1 ) = $ 2 2 l d i r 2 8 , $ 8 0 ; $ 8 0 送 Y 寄存器低位 s t y , r 2 ; 设( R 2 ) = $ 3 3 , 这时( Y ) = $ 0 0 8 0 , 单步执行后 S R A M ( $ 0 0 8 0 ) = $ 3 3 s t - y , r 3 ; 设( R 3 ) = $ 4 4 , 这时先单步执行( Y ) - 1 = $ 0 0 7 F , 然后 R 3 内容送 S R A M ( $ 0 0 7 F ) s t d y + 2 , r 4 ; 设( R 4 ) = $ 5 5 , ; 单步执行, 先计算出增量地址( Y + q ) = ( y + 2 ) = ( $ 0 0 7 F + 2 ) = $ 0 0 8 1 , 后传送数据 S R A M ( $ 0 0 8 1 ) = $ 5 5 , ; 但这时 Y 指计内容不变( Y 不含 q ) ( Y ) = $ 0 0 7 F n o p ; r j m p l p ; 反复测试 W o r d s 1 2 b y t e s C y c l e s 2 三使用 Z寄存器间接传送数据 5 . 使用变址Z 间接将 S R A M中的内容传送到寄存器 L D L D D 使用变址Z 间接将 S R A M中的内容传送到寄存器 说明 带或不带偏移间接从 S R A M中传送一个字节到寄存器 S R A M中的位置由寄存器区中的 Z1 6位指针寄存器指出存储器访问被限制在当前 6 4 K字节的 S R A M页中为访问另外 S R A M页则 I O 范围内的寄存器 R A M P Z 需改变在指令执行后Z 指针寄存器值要么不改变要么就加 1 或减 1 操作使用 Z 指针寄存器的这些特性特别适合于堆栈指针因为 Z 指针寄存器能用于直接子程序调用直接跳转和查表Z 指针寄存器用作为专用堆栈指针要比X Y 指针方便 用 Z 指针在程序存储器中查表可参见 L P M 指令 操作R d ?Z R d ?Z Z ? Z 1 R d ? Z q 语法 操作码 操作流程: 程序计数器 L D R d , Z 0 d 3 1 送数, Z 指针不改变 P C ?P C 1 第四章 AVR 单片机指令系统 4 61 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN L D R d Z 0 d 3 1 先送数, 后 Z 指针加 1 P C ?P C 1 L D R d , - Z 0 d 3 1 先 Z 指针减 1 , 后送数 P C ?P C l L D D R d Z q 0 d 3 1 先 Z 指针加 q , 后送数, P C ?P C 1 0 q 6 3 执行后 Z 指针( Z 不含 q ) 不变 1 6 位操作码 1 . 1 0 0 0 0 0 0 d d d d d 0 0 0 0 2 . 1 0 0 1 0 0 0 d d d d d 0 0 0 1 3 . 1 0 0 1 0 0 0 d d d d d 0 0 1 0 4 . 1 0 q 0 q q 0 d d d d d 0 q q q 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 6 2 5 . A S M ) L P : c l r r 3 1 ; Z 寄存器高位清零, Z 寄存器高位地址为 R 3 1 , 低位地址为 R 3 0 l d i r 3 0 , $ 6 0 ; 将$ 6 0 送 Z 寄存器低位 S R A M 地址$ 6 0 l d r 0 , Z + ; ; 执行 Z 寄存器, Z + 1为地址的S R A M内容送 R 0 , 设: S R A M ( $ 0 0 6 0 ) = $ 1 1 ; ( $ 0 0 6 1 ) = $ 2 2 , ( $ 0 0 6 2 ) = $ 3 3 ; 这时( Z ) = $ 0 0 6 0 , 先单步执行 ( R 0 ) = $ 1 1 , 然后( Z ) + 1 = $ 0 0 6 1 l d r 1 , Z ; 这时( Z ) = $ 0 0 6 1 , 单步执行后, ( R 1 ) = $ 2 2 l d i r 3 0 , $ 7 0 ; 将$ 7 0 送 Y 寄存器低位 l d r 2 , Z ; 这时( Z ) = $ 0 0 7 0 , 设( $ 0 0 7 0 ) = $ 4 4 , ( $ 0 0 6 F ) = $ 5 5 , ( $ 0 0 7 1 ) = $ 6 6 ; 单步执行后( R 2 ) = $ 4 4 l d r 3 , - Z ; 单步先执行( Z ) - 1 = $ 0 0 6 F , 然后单步执行( R 3 ) = $ 5 5 l d d r 4 , Z + 2 ; 单步执行, 先找增量地址( Z + Q ) = ( Z + 2 ) = ( $ 0 0 6 F + 2 ) = $ 0 7 1 , 后送数( R 4 ) = $ 6 6 , ;但 Z指计内容不变( Z 不含 q )( Z ) = $ 0 0 6 F n o p ; r j m p l p ; 反复测试 W o r d s 1 2 b y t e s C y c l e s 2 6 使用变址 Z 间接将寄存器内容传送到 S R A M S T S T D 使用变址Z 间接将寄存器内容传送到 S R A M 说明间接将带或不带偏移的寄存器的一个字节传送到 S R A M S R A M的位置由寄存器区中的Z1 6 位指针寄存器指出存储器访问被限制在当前 6 4 K 字节的 S R A M页为访问另外 S R A M 页则 I O 范围的寄存器 R A M P Z 将被修改在操作之后 Z 指针寄存器要么不改变要么是加1 或减 1 使用 Z 指针寄存器的这些特性特别适合用作堆栈指针因为Z 指针寄存器能适用于间接子程序调用间接跳转和查表所以 Z 指针寄存器像一个专用堆栈指针用起来比 X 和 Y 指针更方便 操作Z ?R r ( Z ?R r Z ?Z 十 1 Z ? Z - 1 Z ?R r 第四章 AVR 单片机指令系统 4 62 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN Z q ?R r 语法 操作码 操作流程: 程序计数器 S T Z , R r 0 d 3 1 送数, Z 指针不改变 P C ?P C 1 S T Z , R r 0 d 3 1 先送数, 后 Z 指针加 1 P C ?P C 1 S T - Z R r 0 d 3 1 先 Z 指针减 1 , 后送数 P C ?P C l S T D Z q , R r 0 d 3 1 先 Z 指针加 q , 后送数, P C ?P C 1 0 q 6 3 执行后 Z 指针( Z 不含 q ) 不变 1 6 位操作码 1 . 1 0 0 0 0 0 1 r r r r r 0 0 0 0 2 . 1 0 0 1 0 0 1 r r r r r 0 0 0 1 3 . 1 0 0 1 0 0 1 r r r r r 0 0 1 0 4 . 1 0 q 0 q q 1 r r r r r 0 q q q 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 6 2 6 . A S M ) L P : c l r r 3 1 ; Z 寄存器高位清零 Z 寄存器高位地址为R 3 1 , 低位地址为 R 3 0 l d i r 3 0 , $ 7 0 ; $ 7 0 送 Z 寄存器低位, S R A M 地址$ 6 0 s t Z + , r 0 ; 设( R 0 ) = $ 1 1 , 先单步执行送 S R A M ( Y ) = $ 0 0 7 0 , 然后( Z ) + 1 = $ 0 0 7 1 s t Z , r 1 ; 设( R 1 ) = $ 2 2 , 这时( Z ) = $ 0 0 7 1 , 单步执行后 S R A M ( $ 0 0 7 1 ) = $ 2 2 l d i r 3 0 , $ 8 0 ; $ 8 0 送 Z 寄存器低位 s t Z , r 2 ; 设( R 2 ) = $ 3 3 , 这时( Z ) = $ 0 0 8 0 , 单步执行后 S R A M ( $ 0 0 8 0 ) = $ 3 3 s t - Z , r 3 ; 设( R 3 ) = $ 4 4 , 这时先单步执行( Z ) - 1 = $ 0 0 7 F , 然后 R 3 内容送 S R A M ( $ 0 0 7 F ) s t d Z + 2 , r 4 ; 设( R 4 ) = $ 5 5 , ; 单步执行, 先计算出增量地址( Z + q ) = ( Z + 2 ) = ( $ 0 0 7 F + 2 ) = $ 0 0 8 1 , 后传送数据 S R A M ( $ 0 0 8 1 ) = $ 5 5 , ;但这时 Z指计内容不变( Z 不含 q )( Z ) = $ 0 0 7 F n o p ; r j m p l p ; 反复测试 W o r d s 1 2 b y t e s C y c l e s : 2 3 . 6 . 3从程序存储器直接取数据指令 1 . L P M 装入程序存储器 说明将 Z 寄存器指向的一个字节传送到寄存器0 R O该指令使1 0 0 空间有效, 常 量初始化或常数取数特别有用程序存储器被编为1 6 位字Z 1 6 位指针的最低位L S B 选 择为 0 是低字节选择为1 是高字节该指令能寻址程序存储器第一个 6 4 K 字节3 2 字 操作R 0 ?Z 语法 操作码 程序计数器 L P M N o n e P C ?P C 1 1 6 位操作码 第四章 AVR 单片机指令系统 4 63 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 1 0 0 1 0 1 0 1 1 1 0 X 1 0 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 6 3 1 . A S M , 更详细资料阅”按钮猜数. A S M ”) . o r g $ 0 0 1 0 ; 主程序实际地址为$ 0 0 2 0 c l r r 3 1 ; Z 寄存器高位, 存放程序存储器高位地址 l d i r 3 0 , $ F 0 ; Z 寄存器低位, 存放程序存储器低位地址 C L R R 2 9 ; 清零 Y 寄存器高位 L D I R 2 8 , $ F 0 ; 将$ F 0 装入 Y 寄存器低位 L P : N O P ; 也可设程序存储器( $ 0 0 0 F 0 ) = $ 0 0 , 以此类推至设( $ 0 0 F F ) = $ F F l P M ; 将 Z 寄存器低位数送 R 0 S T Y + , R 0 ; Y变址先将R 0 送 S R A M ( $ 0 0 F 0 ) , 后 Y 地址 Y = ( Y + 1 ) I N C R 3 0 ; Y 变址将 R 0 送 S R A M ( $ 0 0 F 1 ) , 这时 Y = ( Y + 1 ) C P I R 3 0 , $ 0 0 ; R 3 0内容( Z 寄存器低位) 与立即数$ 0 0 比较 B R N E L P ; R 3 0内容不为0 转, 为 0 顺执 I N C R 3 1 ; Z 寄存器高位加1 , ( Z ) = $ 0 1 0 0 R J M P L P ; 反复取数送数, 怎样修改程序, 使数据存储器与 ; 程序存储器数据大小排列相同, . O R G $ 0 0 7 8 ; 实际存放数据地址为$ 0 0 F 0 . D W 0 X 1 1 2 2 , 0 X 2 2 3 3 , 0 X 4 4 5 5 , 0 X 6 6 7 7 , 0 X 8 8 9 9 , 0 X A A B B , 0 X C C D D , 0 X E E F F . D W $ 0 2 0 8 , $ 5 5 1 0 , $ 1 9 1 0 , $ 8 7 5 0 , $ 5 0 1 2 , $ 8 7 5 7 , $ 8 8 7 2 , $ 8 7 5 7 , $ 8 8 5 2 W o r d s 1 2 b y t e s C y c l e s 3 464 I0 口数据传送 1 I O 口数据传送到寄存器 I N I O 口数据传送到寄存器 说明将 I O 空间口定时器配置寄存器等的数据传送到寄存器区中的寄存器 R d 中 操作R d ?P 语法 操作码 程序计数器 I N R d P O d 3 1 0 P 6 3 P C ?P C 1 1 6 位操作码 1 0 1 1 0 P P d d d d d P P P P 状态寄存器S R E G 和布尔格式 I T H S V N Z C 第四章 AVR 单片机指令系统 4 64 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 例子( 实践操作程序4 6 4 1 . A S M ) L P : I N R 2 5 , $ 1 B ; A口的内容送入 R 2 5 中 L D I R 2 3 , $ 2 6 ; 将 2 6 送入 R 2 3 中 A D D R 2 3 , R 2 5 ; R 2 3 与 R 2 5 相加送入R 2 3 R J M P L P ; 循环 W o r d s 1 2 b y t e s C y c l e s 1 2 寄存器数据送 I O 口 O U T 寄存器数据送 I O 口 说明将寄存器区中寄存器 R r 的数据传送到 I 0 空间口定时器配置寄存器等 操作 P ? R r 语法 操作码 程序计数器 O U T P R r 0 r 3 1 0 P 6 3 P C ?P C 十 1 1 6 位操作码 1 0 1 1 1 P P r r r r r P P P P 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 6 4 2 . A S M ) ; A T 9 0 S 1 2 0 0 的 P B 口P D 口 接 L E D 发光二极管, 用单步模拟测试 I / O 口工作情况 . D E V I C E A T 9 0 S 1 2 0 0 ; 定义被汇编的器件为A T 9 0 S 1 2 0 0 . E Q U P O R T B = 0 X 1 8 . E Q U D D R B = 0 X 1 7 ; B 口数据方向寄存器 . E Q U P O R T D = 0 X 1 2 . E Q U D D R D = 0 X 1 1 ; D 口数据方向寄存器 . O R G 0 X 0 0 0 0 L O P : R J M P L O P 1 ; 跳转 . O R G 0 X 0 0 1 0 L O P 1 : L D I R 2 0 , 0 X F F ; 硬件设定低电平 L E D 灯亮, 高电平 L E D 灭 O U T 0 X 1 7 , R 2 0 ; 送 B 口数据方向寄存器 O U T 0 X 1 1 , R 2 0 ; 送 D 口数据方向寄存器 C L R R 2 0 ; 清零 L E D 灯亮 O U T 0 X 1 8 , R 2 0 ; 送 B 口数据寄存器 O U T 0 X 1 2 , R 2 0 ; 送 D 口数据寄存器 L D I R 2 0 , 0 X 6 4 L D I R 2 0 , 0 X F F ; 关 L E D 灯 O U T 0 X 1 8 , R 2 0 ; 送 B 口 P O R T B O U T 0 X 1 2 , R 2 0 ; 送 D 口 P O R T D L D I R 2 0 , 0 X 6 4 第四章 AVR 单片机指令系统 4 65 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN R J M P L O P 1 ; 循环 W o r d s 1 2 b y t e S C y c l e s 1 46 5堆栈操作指令 A V R单片机的特殊功能寄存器中有一个堆栈指针 S P 它指出栈顶的位置在指令系统中有两条用于数据传送的栈操作指令 1 进栈指令 P U S H 压寄存器到堆栈 说明该指令存储寄存器R r 的内容到堆栈 操作 S T A C K ?R r 语法 操作码 程序计数器 P U S H R r O d 3 1 P C ?P C 1 S P ?S P 1 1 6 位操作码 1 0 0 1 0 0 1 d d d d d 1 1 1 1 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 6 5 1 . A S M ) L P : r c a l l r o u t i n e ; 调用 R O U T I N E 子程序 r o u t i n e : p u s h r 1 3 ; 把 R 1 3 压入堆栈 p u s h r 1 4 ; 把 R 1 4 压入堆栈 p u s h r 1 5 ; 把 R 1 5 压入堆栈 p o p r 1 5 ; 从堆栈中取出数据放入 R 1 5 p o p r 1 4 ; 从堆栈中取出数据放入 R 1 4 p o p r 1 3 ; 从堆栈中取出数据放入 R 1 3 r e t ; 返回 R 1 3 R 1 4 R 1 5 的数据 r j m p l p ; 循环继续做 W o r d s l 2 b y t e s C y c l e s 2 2 出栈指令 P O P 堆栈弹出到寄存器 说明该指令将堆栈中的字节装入到寄存器 R d 中 操作R d ?S T A C K 语法 操作码 程序计数器 P O P R d 0 d 3 1 P C ?P C 1 S P ?S P 1 1 6 位操作码 1 0 0 1 0 0 0 d d d d d 1 1 1 1 第四章 AVR 单片机指令系统 4 66 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 6 5 2 . A S M ) L P : r c a l l r o u t i n e ; 调用子程序 R O U T I N E r o u t i n e : l d i r 1 6 , $ 0 1 ; 把立即数 0 1 送入到 R 1 6 中 l d i r 1 7 , $ 0 2 ; 把立即数 0 2 送入到 R 1 7 中 p u s h r 1 6 ; 把 R 1 6 压入堆栈内 p u s h r 1 7 ; 把 R 1 7 压入堆栈内 p o p r 1 7 ; 出栈 p o p r 1 6 ; 出栈 r e t ; 返回 W o r d s 1 2 b y t e s C y c l e s 2 第四章 AVR 单片机指令系统 4 67 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 4 . 7 位指令和位测试指令 A V R 单片机指令系统中有四分之一的指令为位和位测试指令 位指令的灵活应用 极大地提高了系统的逻辑控制和处理能力 4 . 7 . 1 带进位逻辑操作指令 1 逻辑左移 L S L 逻辑左移 说明寄存器 R d 中所有位左移1 位第 0 位被清零第 7 位移到 S R E G中的 C 标志 该指令完成一个无符号数乘 2 的操作 操作 语法 操作码 程序计数器 L S L R d 0 d 3 1 P C ?P C 1 1 6 位操作码 0 0 0 0 1 1 d d d d d d d d d d P 1 2 5 状态寄存器S R E 和布尔格式 I T H S V N Z C - - ? ? ? ? ? ? H R d 3 N R 7 S N V Z / R 7 / R 6 / R S / R 4 / R 3 / R 2 / R 1 / R 0 V N C C R d 7 例子( 实践操作程序4 7 1 1 . A S M ) L P : l d i r 1 6 , $ 0 1 ; 将 0 1 送入到 R 1 6 中 l d i r 1 7 , $ 0 2 ; 将 0 2 送入到 R 1 7 中 a d d r 1 6 , r 1 7 ; R 1 6与 R 1 7 相加 l s l r 1 6 ; 加后再左移一位0 1 + 0 2 = 0 3 左一位即乘以2 所以 r = 0 6 r j m p l p ; 继续实验 W o r d s 1 2 b y t e s C y c l e s 1 第四章 AVR 单片机指令系统 4 68 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 2 逻辑右移 L S R 逻辑右移 说明寄存器 R d 中所有位右移1 位第 7 位被清零第 0 位移到 S R E G中的 C 标志 该指令完成一个无符号数除 2 的操作C 标志被用于结果舍入 操作 语法 操作码 程序计数器 L S R R d 0 d 3 1 P C ?P C 1 1 6 位操作码 1 0 0 1 0 1 0 d d d d d 0 1 1 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? ? ? ? ? S N V Z : / R 7 / R 6 . R / R 4 / R 3 / R 2 / R 1 R 0 V N C C R d 0 N 0 例子( 实践操作程序4 7 1 2 . A S M ) L P : a d d r 0 , r 1 ; 将 R 0 与 R 1 的内容相加 ( r 0 ) = , ( r 1 ) = l s r r 0 ; 将 R 0 的内容右转移一位 r j m p l p ; 循环继续做 W o r d s l 2 b y t 6 s C y c l e s 1 3 通过进位左循环 R O L 通过进位左循环 说明寄存器 R d 的所有位左移1 位C 标志被移到 R d 的第 0 位R d 的第 7 位移到 C 标志 操作 第四章 AVR 单片机指令系统 4 69 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 语法 操作码 程序计数器 R O L R d 0 d 3 1 P C ?P C 1 1 6 位操作码 0 0 0 1 1 1 d d d d d d d d d d 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? ? ? ? ? ? H : R d 3 N R 7 S N V Z : / R 7 / R 6 . R / R 4 / R 3 / R 2 / R 1 R 0 V N C C R d 7 例子( 实践操作程序4 7 1 3 . A S M ) L P : r o l r 1 5 ; 将 R 1 5 中的内容通过进位位循环左移一位, 设: ( r 1 5 ) = r o l r 1 5 ; 通过进位位循环左移一位 n o p ; r j m p l p ; W o r d s 1 2 b y t e s C y c l e s 1 4 通过进位右循环 R O R 通过进位右循环 说明寄存器 R d 的所有位右移1 位C 标志被移到 R d 的第 7 位R d 的第 0 位移到 C 标志 操作 语法 操作码 程序计数器 R O R R d 0 d 3 1 P C ?P C 1 1 6 位操作码 1 0 0 1 0 1 0 d d d d d 0 1 1 1 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? ? ? ? ? 第四章 AVR 单片机指令系统 4 70 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN S N V Z : / R 7 / R 6 . R / R 4 / R 3 / R 2 / R 1 R 0 V N C C R d 0 N R 7 例子: ( 实践操作程序4 7 1 4 . A S M ) L P : r o r r 1 5 ; 将 R 1 5 中的内容通过进位循环右移, 设: ( r 1 5 ) = r o r r 1 5 n o p ; r j m p l p ; W o r d s 1 2 b y t e s C y c l e s 1 5 算术右移 A S R 算术右移 说明寄存器 R d 中的所有位右移 1 位而位 7 保持常量位 0 被装入 S R E G 的 C 标志位这个操作实现 2 的补码值除 2 而不改变符号进位标志用于结果的舍入 操作 语法 操作码 程序计数器 A S R R d 0 d 3 1 P C ?P C 1 1 6 位操作码 1 0 0 1 0 1 0 d d d d d 0 1 0 1 状态寄存器S R E G 和布尔格式 I T H S V N Z C - - ? ? ? ? ? S N V Z : R 7 R 6 R 5 R 4 R 3 R 2 R 1 R O V N C C R d 0 N R 7 例子( 实践操作程序4 7 1 5 . A S M ) L P : l d i r 1 6 , $ 1 0 ; l d i r 1 7 , $ f c ; a s r r 1 6 ; a s r r 1 7 ; r j m p l p ; w o r d s 1 2 b y t e s C y c l e s 1 6 半字节交换 S W A P 半字节交换 说明寄存器中的高半字节和低半字节交换 第四章 AVR 单片机指令系统 4 71 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 操作R 7 4 ?R d 3 0 ?R 3 0 ?R d 7 4 语法 操作码 程序计数器 S W A P R d 0 d 3 1 P C ?P C 1 1 6 位操作码 1 0 0 1 0 1 0 d d d d d 0 0 1 0 状态寄存器S R E 和布尔格式 I T H S V N Z C 例子( 实践操作程序 4 7 1 6 . A S M ) L P : i n c r 1 ; i n c r 2 ; s w a p r 1 ; s w a p r 2 ; r j m p l p ; W o r d s 1 2 b y t e s C y c l e s 1 4 . 7 . 2 位变量传送指令 1 寄存器中的位存储到 S R E G中的 T 标志 B S T 寄存器中的位存储到S R E G中的 T 标志 说明把寄存器中的位 b 存储到 S R E G 状态寄存器中的 T 标志 操作T ?R d b 语法 操作码 程序计数器 B S T R d b 0 d 3 1 , 0 b 7 P C ?P C l 1 6 位操作码 1 1 1 1 1 0 1 d d d d d X b b b 状态寄存器S R E 和布尔格式 I T H S V N Z C T 0 i f b i t b i n R d i s c l e a r e d S e t t o l o t h e r w i s e 例子 b s t r 1 , 2 ; T ?R 1 2 b l d r O 4 ; R 0 4 ?T W o r d s l 2 b y t e s C y c l e s 1 第四章 AVR 单片机指令系统 4 72 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 2 S R E G 中的 T 标志装入寄存器中的某一位 B L D 一位装入将 S R E G中的 T 标志装入到寄存器中的某一位 说明拷贝 S R E G 状态寄存器的 T 标志到寄存器R d 中的位 b 操作R d b ?T 语法 操作码 程序计数器 B L D R d , d 0 d 3 1 , 0 b 7 P C ?P C 1 1 6 位操作码 1 1 1 1 1 0 0 d d d d d 0 b b b 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子( 实践操作程序4 7 2 2 . A S M ) b s t r 1 , 2 ; T ?R 1 2 b l d r O 4 ; R 0 4 ?T W o r d s 1 2 b y t e s C y c l e s 1 4 . 7 . 3 位变量修改指令 1 置状态寄存器的位 B S E T 置状态寄存器的位 说明置状态寄存器S R E G 的某一标志或某一位 操作S R E G S ?1 语法 操作码 程序计数器 B S E T s 0 s 7 P C ?P C 1 1 6 位操作码 1 0 0 1 0 1 0 0 0 s s s 1 0 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C ? ? ? ? ? ? ? ? I 1 i f s = 7 V 1 i f s = 3 T 1 i f s = 6 N i f s = 3 H 1 i f s = 5 Z 1 i f s = 1 S 1 i f s = 4 C i f s = 0 例子 b s e t 6 ; S R E G 6 ?1 b s e t 7 ; S R E G 7 ?1 W o r d s 1 2 b y t e s C y c l e s 1 第四章 AVR 单片机指令系统 4 73 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 2 清状态寄存器的位 B C L RS R E G中的位清零 说明清零 S R E G状态寄存器中的一个标志位 操作 S R E G S ? 0 语法 操作码 程序计数器 B C L R s 0 s 7 P C ?P C 1 1 6 位操作码 1 0 0 1 0 1 0 0 1 s s s 1 0 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C ? ? ? ? ? ? ? ? ? I 0 i f s 7 V 0 i f s 3 T 0 i f s 6 N 0 i f s 2 H 0 i f s 5 Z 0 i f s 1 S 0 i f s 4 C 0 i f s 0 例子 b c l r 0 ; S R E G 0 ? 0 b c l r 7 ; S R E G 7 ? 0 W o r d s 1 2 b y t e s C y c l e s 1 3 置 I O 寄存器的位 S B I置 I O 寄存器的位 说明对 I O 寄存器指定的位置位该指令在低3 2 个 I O 寄存器内操作I O 寄存器地 址为 0 3 1 操作I O ( P b ?1 语法 操作码 程序计数器 S B I P b 0 P 3 1 0 b 7 P C ?P C 1 1 6 位操作码 1 0 0 1 1 0 1 0 P P P P P b b b 状态寄存器S R E G 和布尔格式 I T H S V N Z C 例子 o u t $ 1 e , r 0 ; ( E E A R L 寄存器) ( R 0 ) s b i $ 1 c , 0 ; ( E E C R寄存器 0 位) ?1 i n r l , $ 1 d ; ( R 0 ) ( E E D R 寄存器) W 0 r d S 1 2 b y t e s C y c l e s 2 第四章 AVR 单片机指令系统 4 74 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 4 清 I O 寄存器的位 C B I 清 I O 寄存器的位 说明清零 I O 寄存器中的指定位该指令用在寄存器最低的3 2 个 I O 寄存器上I O 寄存器地址为 0 3 1 操作I O P b ?0 语法 操作码 程序计数器 C B I P , b 0 P 3 1 0 b 7 P C ?P C 十 1 1 6 位操作码 1 0 0 1 1 0 0 0 P P P P P b b b 状态寄存器S R E G 和布尔格式 I T H S V N Z C C 1 例子 c b i $ 1 8 , 7 ; I O P O R T B 寄存器的7 位?0 W o r d s 1 2 b y t e s C y c l e s 2 5 置进位位 S E C 一置位进位标志 说明置位 S R E G 状态寄存器中的进位标志C 操作C ?1 语法 操作码 程序计数器 S E C N 0 n e P C ?P C 1 1 6 位操作码 1 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 1 C 1 例子 s e c ; C ?1 a d c r 0 , r 1 ; 带进位位加 w o r d s 1 2 b y t e s C y c l e s 1 6 清进位位 C L C 清零进位标志 说明清零 S R E G 状态寄存器中的进位标志C 操作C ?0 语法 操作码 程序计数器 C L C N o n e P C ?P C 1 第四章 AVR 单片机指令系统 4 75 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 1 6 位操作码 1 0 0 1 0 1 0 0 1 0 0 0 1 0 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 0 C 0 例子 a d d r 0 , r 0 ; 加 c l c ; C ?0 W o r d s 1 2 b y t e s C y c l e s 1 7 置位负标志位 S E N 置位负数标志 说明置位 S R E G 状态寄存器中的负数标志N 操作N ?1 语法 操作码: 程序计数器 S E N N o n e P C ?P C 1 1 6 位操作码 1 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 状态寄存器S R E 和布尔格式 I T H S V N Z C 1 N 1 例子 a d d r 2 r 1 9 ; 加 s e n ; N ?1 W o r d s : 1 2 b y t e s C y c l e s 1 8 清负标志位 C L N 一清零负数标志 说明清零 S R E G 状态寄存器中的负数标志N 操作N ?0 语法 操作码 程序计数器 C L N N o n e P C ?P C 1 第四章 AVR 单片机指令系统 4 76 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 1 6 位操作码 1 0 0 1 0 1 0 0 1 0 1 0 1 0 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 0 N 0 例子 a d d r 2 r 3 ; 加 c l n ; N ?0 W 0 r d s l 2 b y t e s C y c l e s 1 9 置零标志位 S E Z 置位零标志 说明置位 S R E G 状态寄存器中的零标志Z 操作Z ?1 语法 操作码 程序计数器 S E Z N o n e P C ?P C 1 1 6 位操作码 1 0 0 1 0 1 0 0 0 0 0 1 1 0 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 1 Z l 例子 a d d r 2 r 1 9 ; 加 s e z ; Z ?1 W 0 r d s l ?( 2 b y t e s ) C y C I C S l 1 0 清零标志位 C L Z 清零零标志 说明清零 S R E G 状态寄存器中的零标志Z 操作Z ?0 语法 操作码 程序计数器 C L Z N o n e P C ?P C 1 1 6 位操作码 第四章 AVR 单片机指令系统 4 77 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 1 0 0 1 0 1 0 0 1 0 0 1 1 0 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 0 Z 0 例子 a d d r 2 r 3 ; 加 c l z ; Z ?0 W O r d s 1 2 b y t e s C y c l e s 1 1 1 触发全局中断位 S E I 置位全局中断标志 说明置位 S R E G 状态寄存器中的全局中断标志I 操作I ?1 语法 操作码 程序计数器 S E I N o n e P C ?P C 1 1 6 位操作码 1 0 0 1 0 1 0 0 0 1 1 1 1 0 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 1 I 1 例子 c l i ; I ?0 i n r 1 3 , $ 1 6 ; ( r 1 3 ) ( P I N B 寄存器数据) s e t ; I ?1 W o r d s l 2 b y t e s C y c l e s : 1 1 2 禁止全局中断位 C L I 清零全局中断标志 说明清除 S R E G 状态寄存器中的全局中断标志I 操作I ?0 语法 操作码 程序计数器 C L I N o n e P C ?P C 1 1 6 位操作码 1 0 0 1 0 1 0 0 1 1 1 1 1 0 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 0 I 0 第四章 AVR 单片机指令系统 4 78 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 例子( 实践操作程序4 7 3 1 2 . A S M ) c l i ; I ?0 i n r 1 3 , $ 1 6 ; ( r 1 3 ) ( P I N B 寄存器数据) s e t ; I ?1 W o r d s 1 2 b y t e s C y c l e s 1 1 3 置 S 标志位 S E S 一置位符号标志 说明置位 S R E G 状态寄存器中的符号标志S 操作s ?1 语法 操作码 程序计数器 S E S N 0 n e P C ?P C 1 1 6 位操作码 1 0 0 1 0 1 0 0 0 1 0 0 1 0 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 1 S 1 例子( 实践操作程序4 7 3 1 3 . A S M ) a d d r 2 r 1 9 ; 加 s e s ; s ?1 W o r d s 1 2 b y t e s C y c l e s : 1 1 4 清 S 标志位 C L S 清零符号标志 说明清零 S R E G 状态寄存器中的符号标志S 操作S ?0 语法 操作码 程序计数器 C L S N o n e P C ?P C 1 1 6 位操作码 1 0 0 1 0 1 0 0 1 1 0 0 1 0 0 0 状态寄存器S R E G 和布尔格式 I T H S V N Z C 0 S 0 例子 a d d r 2 r 3 ; 加 第四章 AVR 单片机指令系统 4 79 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN c l s ; S ?0 W o r d s 1 2 b y t e s C y c l e s 1 1 5 置溢出标志位 S E V置位溢出标志 说明置位 S R E G状态寄存器中的溢出标志V 操作V ?1 语法 操作码 程序计数器 S E V N o n e P C ?P C 十 1 1 6 位操作码 1 0 0 1 0 1 0 0 0 0 1 1 1 0 0 0 状态寄存器 S R E G 和布尔格式 I T H S V N Z C 1 V 1 例子( 实践操作程序4 7 3 1 5 . A S M ) a d d r 2 r 1 9 ; 加 s e v ; V ?1 W o r d s 1 2 b y t e s C y c l e s l 1 6 清溢出标志位 C L V清零溢出标志 说明清零 S R E G 状态寄存器中的溢出标志V 操作V ?0 语法 操作码 程序计数器 C L V N o n e P C ?P C l 1 6 位操作码 1 0 0
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:0596、《AVR高速嵌入式单片机原理与应用》
链接地址:https://www.renrendoc.com/p-6127029.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2024  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!