单片机中断汇编

上传人:我*** 文档编号:134608876 上传时间:2020-06-07 格式:PPT 页数:64 大小:574KB
返回 下载 相关 举报
单片机中断汇编_第1页
第1页 / 共64页
单片机中断汇编_第2页
第2页 / 共64页
单片机中断汇编_第3页
第3页 / 共64页
单片机中断汇编_第4页
第4页 / 共64页
单片机中断汇编_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《单片机中断汇编》由会员分享,可在线阅读,更多相关《单片机中断汇编(64页珍藏版)》请在金锄头文库上搜索。

1、2020 6 7 1 3 1概述 7种寻址方式 111条指令 字节数 运算速度 单字节指令 49条双字节指令 45条三字节指令 17条 单周期指令 64条双周期指令 45条四周期指令 2条 第三章MCS 51指令系统InstructionSet 2020 6 7 2 功能 数据传送类 29条算术运算类 24条逻辑运算类 24条控制转移类 17条位操作类 17条 2020 6 7 3 常用符号 Rn 工作寄存器中的寄存器Rn R1 R7之一 Ri 工作寄存器中的寄存器R0或R1 data 8位立即数 data16 16位立即数 direct 片内RAM或SFR的地址 8位 间接寻址寄存器 Bit

2、 片内RAM或SFR的位地址 addr11 11位目的地址 addr16 16位目的地址 2020 6 7 4 rel 补码形式的8位地址偏移量 偏移范围为 128 127 位操作指令中 该位求反后参与操作 不影响该位X 片内RAM的直接地址或寄存器 X 相应地址单元中的内容 箭头左边的内容送入箭头右边的单元内 2020 6 7 5 3 2寻址方式 3 2 1立即寻址ImmediateAddressing 操作数就包含在指令代码中 在操作码之后 称为立即数 用 表示 MCS 51如 MOVP1 80HMOVR7 0F5HMOVDPTR 1245H 操作数存在程序存储器中 2020 6 7 6

3、3 2 2直接寻址DirectAddressing直接使用数所在单元的地址找到了操作数 所以称这种方法为直接寻址 操作数在SFR 内部RAM 位地址空间 如 MOVA 00HMOVC 60HMOVA 0F0H 2020 6 7 7 3 2 3寄存器寻址RegisterAddressing 对选定的工作寄存器R0 R7 累加器A 通用寄存器B 地址寄存器DPTR中的数进行操作 例 MOVA R0 将R0工作寄存器中的数据送到累加器A中去 提一个问题 我们知道 工作寄存器就是内存单元的一部分 如果我们选择工作寄存器组0 则R0就是RAM的00H单元 那么这样一来 MOVA 00H和MOVA R0不

4、就没什么区别了吗 2020 6 7 8 的确 这两条指令执行的结果是完全相同的 都是将00H单元中的内容送到A中去 但是执行的过程不同 执行第一条指令需要2个机器周期 而第二条则只需要1个机器周期 第一条指令变成最终的目标码要两个字节 E5H00H 而第二条则只要一个字节 E8H 就可以了 2020 6 7 9 3 2 4寄存器间接寻址RegisterIndirectAddressing 把地址放在另外一个寄存器中 根据这个寄存器中的数值决定该到哪个单元中取数据 R0 R1 8位地址 片内低128字节或片外DPTR 16位 片外64KBMCS 51如 MOVA R0MOVXA R0MOVXA

5、DPTR 操作数在片内RAM中 操作数在片外RAM中 操作数在片外RAM中 2020 6 7 10 以DPTR或PC为基址寄存器 累加器A为变址寄存器 把两者内容相加 结果作为操作数的地址 常用于查表操作 MCS 51MOVCA A DPTR A DPTR AMOVCA A PC PC 1 PC A PC A 3 2 5变址寻址 基址 变址 Base Register plus Index Register IndirectAddressing 操作数在程序存储器中 2020 6 7 11 如 MOVCA A DPTR设DPTR 2000H A E0H 20E0H 47 指令代码 2020 6

6、 7 12 3 2 6相对寻址 将PC中的当前内容与指令第二字节给出的数相加 结果作为跳转指令的转移地址 转移目的地址 PC中的当前内容称为基地址 本指令后的字节地址 指令第二字节给出的数据称为偏移量 1字节带符号数 常用于跳转指令 如 JC23H若C 0 不跳转 C 1 跳转 RelativeAddressing 改变PC 2020 6 7 13 如 JC23 1025H 23H 1002H 指令代码 当前PC 2020 6 7 14 对片内RAM的位寻址区和某些可位寻址的特殊功能寄存器进行位操作时的寻址方式 如 SETB3DH 将27H 5位置1CLRC Cy位清0 3 2 7位寻址Bit

7、Addressing 操作数在片内RAM位地址区或SFR某些位中 2020 6 7 15 寻址方式涉及的存储器空间 2020 6 7 16 3 3数据传送类指令 29条 DataTransferInstruction MCS 51助记符 助记符 MOV MOVX MOVCXCH XCHD SWAPPUSH POP源操作数寻址方式 5种 立即寻址 直接寻址 寄存器寻址 寄存器间接寻址 变址寻址 目的操作数寻址方式 3种 直接寻址 寄存器寻址 寄存器间接寻址除了目的操作数为ACC的指令影响奇偶标志P外 一般不影响标志位 2020 6 7 17 3 3 1十六位数的传递指令 1条 MOVDPTR d

8、ata168051是一种8位机 这是唯一的一条16位立即数传递指令 功能 将一个16位的立即数送入DPTR中去 其中高8位送入DPH 低8位送入DPL 例 MOVDPTR 1234H执行完了之后DPH中的值为12H DPL中的值为34H 如果我们分别向DPH DPL送数 则结果也一样 如下面两条指令 MOVDPH 35HMOVDPL 12H 则就相当于执行了MOVDPTR 3512H 2020 6 7 18 3 3 2累加器A与片外RAM之间的数据传递类指令 4条 MOVXA RiMOVX Ri AMOVXA DPTRMOVX DPTR A说明 1 在51中 与外部存储器RAM打交道的只可以是

9、A累加器 所有需要送入外部RAM的数据必需要通过A送去 而所有要读入的外部RAM中的数据也必需通过A读入 在此我们可以看出内外部RAM的区别了 内部RAM间可以直接进行数据的传递 而外部则不行 比如 要将外部RAM中某一单元 设为0100H单元的数据 送入另一个单元 设为0200H单元 也必须先将0100H单元中的内容读入A 然后再送到0200H单元中去 2020 6 7 19 2 要读或写外部的RAM 当然也必须要知道RAM的地址 在后两条指令中 地址是被直接放在DPTR中的 而前两条指令 由于Ri 即R0或R1 只是8位的寄存器 所以只提供低8位地址 高8位地址由P2口来提供 3 使用时应

10、先将要读或写的地址送入DPTR或Ri中 然后再用读写命令 例 将外部RAM中100H单元中的内容送入外部RAM中200H单元中 MOVDPTR 0100HMOVXA DPTRMOVDPTR 0200HMOVX DPTR A 2020 6 7 20 3 3 3读程序存储器指令 2条 MOVCA A DPTRMOVCA A PC本组指令是将ROM中的数送入A中 本组指令也被称为查表指令 常用此指令来查一个已做好在ROM中的表格说明 查找到的结果被放在A中 因此 本条指令执行前后 A中的值不一定相同 例 有一个数在R0中 要求用查表的方法确定它的平方值 此数的取值范围是0 5 MOVDPTR 100

11、HMOVA R0MOVCA A DPTR ORG0100HDB0 1 4 9 16 25 如果R0中的值为2 则最终地址为100H 2为102H 到102H单元中找到的是4 2020 6 7 21 3 3 4堆栈操作 2条 PUSHdirect SP SP 1 SP direct POPdirect direct SP SP SP 1第一条为压入指令 就是将direct中的内容送入堆栈中 第二条为弹出指令 就是将堆栈中的内容送回到direct中 例 MOVSP 5FHMOVA 100MOVB 20PUSHACCPUSHB则执行第一条PUSHACC指令是这样的 将SP中的值加1 即变为60H 然

12、后将A中的值送到60H单元中 因此执行完本条指令后 内存60H单元的值就是100 同样 执行PUSHB时 是将SP 1 即变为61H 然后将B中的值送入到61H单元中 即执行完本条指令后 61H单元中的值变为20 2020 6 7 22 1 给出每条指令执行后的结果 MOV23H 30HMOV12H 34HMOVR0 23HMOVR7 12HMOVR1 12HMOVA R0MOV34H R1MOV45H 34HMOVDPTR 6712HMOV12H DPHMOVR0 DPLMOVA R0 23H 30H 12H 34H R0 23H R7 34H R1 12H A 30H 34H 34H 45

13、H 34H DPTR 6712H 12H 67H R0 12H A 67H 内部RAM 2020 6 7 23 3 4算术运算类指令 24条 ArithmeticOperations 主要对8位无符号数 也可用于带符号数运算 包括 加 减 乘 除 加1 减1运算指令影响PSW有关位 2020 6 7 24 3 4 1加法指令 ADDA data A data AADDA direct A direct AADDA Rn A Rn AADDA Ri A Ri A用途 将A中的值与源操作数所指内容相加 最终结果存在A中 1 不带进位位的加法指令 4条 2020 6 7 25 2 带进位位的加法指令

14、 4条 ADDCA Rn A Rn CY AADDCA direct A direct CY AADDCA Ri A Ri CY AADDCA data A data CY A用途 将A中的值和其后面的值以及进位位C中的值相加 最终结果存在A 常用于多字节数运算中 说明 由于51单片机是一种8位机 所以只能做8位的数学运算 但8位运算的范围只有0 255 这在实际工作中是不够的 因此就要进行扩展 一般是将2个8位 两字节 的数学运算合起来 成为一个16位的运算 这样 可以表达的数的范围就可以达到0 65535 2020 6 7 26 例 先做67H A0H 107H 而107H显然超过了0FF

15、H 因此最终保存在A中的是07H 而1则到了PSW中的CY位了 换言之 CY就相当于是100H 然后再做10H 30H CY 结果是41H 所以最终的结果是4107H 1067H 30A0H 0001000001100111 0011000010100000 0100000100000111 1067H 30A0H 4107H 2020 6 7 27 设 1067H存在R1R0中 30A0H存在R3R2中 计算R1R0 R3R2 结果存在R5R4中 MOVA R0ADDA R2 R0 R2 A和CYMOVR4 AMOVA R1ADDCA R3 R1 R3 CY A和CYMOVR5 A 2020

16、 6 7 28 又例 先做67H 20H 87H 没有超过0FFH 因此最终保存在A中的是87H 而PSW中的CY 0 然后再做10H 30H CY 结果是40H 所以最终的结果是4087H 1067H 3020H 0001000001100111 0011000000100000 0100000010000111 1067H 3020H 4087H 2020 6 7 29 DAA在进行BCD码加法运算时 跟在ADD和ADDC指令之后 用于对累加器A中刚进行的两个BCD码的加法的结果进行十进制调整 例 A 00010101BCD 代表十进制数15 ADDA 8 3 十进制调整指令 1条 A 1DH 按二进制规律加 A 23H 按十进制规律加 DAA 2020 6 7 30 调整要完成的任务是 1 当累加器A中的低4位数出现了非BCD码 1010 1111 或低4位产生进位 AC 1 则应在低4位加6调整 以产生低4位正确的BCD结果 2 当累加器A中的高4位数出现了非BCD码 1010 1111 或高4位产生进位 CY 1 则应在高4位加6调整 以产生高4位正确的BCD结果 十进制调整

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号