单片机第3章(全国重点大学课件).ppt

上传人:sh****n 文档编号:8729419 上传时间:2020-03-31 格式:PPT 页数:82 大小:972.81KB
返回 下载 相关 举报
单片机第3章(全国重点大学课件).ppt_第1页
第1页 / 共82页
单片机第3章(全国重点大学课件).ppt_第2页
第2页 / 共82页
单片机第3章(全国重点大学课件).ppt_第3页
第3页 / 共82页
点击查看更多>>
资源描述
2020 3 31 1 3 1概述 7种寻址方式 111条指令 字节数 运算速度 单字节指令 49条双字节指令 45条三字节指令 17条 单周期指令 64条双周期指令 45条四周期指令 2条 第三章MCS 51指令系统InstructionSet 2020 3 31 2 功能 数据传送类 29条算术运算类 24条逻辑运算类 24条控制转移类 17条位操作类 17条 2020 3 31 3 常用符号 Rn 工作寄存器中的寄存器Rn R1 R7之一 Ri 工作寄存器中的寄存器R0或R1 data 8位立即数 data16 16位立即数 direct 片内RAM或SFR的地址 8位 间接寻址寄存器 Bit 片内RAM或SFR的位地址 addr11 11位目的地址 addr16 16位目的地址 2020 3 31 4 rel 补码形式的8位地址偏移量 偏移范围为 128 127 位操作指令中 该位求反后参与操作 不影响该位X 片内RAM的直接地址或寄存器 X 相应地址单元中的内容 箭头左边的内容送入箭头右边的单元内 2020 3 31 5 3 2寻址方式 3 2 1立即寻址ImmediateAddressing 操作数就包含在指令代码中 在操作码之后 称为立即数 用 表示 MCS 51如 MOVP1 80HMOVR7 0F5HMOVDPTR 1245H 8086 8088MOVAL 80HMOVAL 0F5HMOVBX 1245H 操作数存在程序存储器中 2020 3 31 6 3 2 2直接寻址DirectAddressing直接使用数所在单元的地址找到了操作数 所以称这种方法为直接寻址 操作数在SFR 内部RAM 位地址空间 如 MOVA 00HMOVC 60HMOVA 0F0H 8086 8088CPUMOVAL 2000H 2020 3 31 7 3 2 3寄存器寻址RegisterAddressing 对选定的工作寄存器R0 R7 累加器A 通用寄存器B 地址寄存器DPTR中的数进行操作 例 MOVA R0 将R0工作寄存器中的数据送到累加器A中去 提一个问题 我们知道 工作寄存器就是内存单元的一部分 如果我们选择工作寄存器组0 则R0就是RAM的00H单元 那么这样一来 MOVA 00H和MOVA R0不就没什么区别了吗 MOVAL BL 8086CPU的寄存器寻址方式 2020 3 31 8 的确 这两条指令执行的结果是完全相同的 都是将00H单元中的内容送到A中去 但是执行的过程不同 执行第一条指令需要2个机器周期 而第二条则只需要1个机器周期 第一条指令变成最终的目标码要两个字节 E5H00H 而第二条则只要一个字节 E8H 就可以了 2020 3 31 9 3 2 4寄存器间接寻址RegisterIndirectAddressing 把地址放在另外一个寄存器中 根据这个寄存器中的数值决定该到哪个单元中取数据 R0 R1 8位地址 片内低128字节或片外DPTR 16位 片外64KBMCS 51如 MOVA R0MOVXA R0MOVXA DPTR 8086 8088CPUMOVAL BX MOVAX SI 操作数在片内RAM中 操作数在片外RAM中 操作数在片外RAM中 2020 3 31 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 8086 8088CPUMOVAL BX SI MOVAX BP DI 操作数在程序存储器中 2020 3 31 11 如 MOVCA A DPTR设DPTR 2000H A E0H 20E0H 47 指令代码 2020 3 31 12 如 MOVCA A PC设A E0H 2121H 45 当前PC 指令代码 2020 3 31 13 两条指令的区别在于 MOVCA A PC的优点是不改变PC的状态 根据A的内容即可取出表格中的常数 缺点是表格只能存放在该条指令后面的256个单元之内 表格的大小和位置受到限制 而且表格只能被一段程序所利用 MOVCA A DPTR指令的执行结果只和指针DPTR及累加器A的内容有关 与该条指令存放的位置 及PC的值 及常数表格存放的地址无关 表格的大小和位置可以在64KB程序存储器中任意安排 一个表格可以为多个程序共用 2020 3 31 14 3 2 6相对寻址 将PC中的当前内容与指令第二字节给出的数相加 结果作为跳转指令的转移地址 转移目的地址 PC中的当前内容称为基地址 本指令后的字节地址 指令第二字节给出的数据称为偏移量 1字节带符号数 常用于跳转指令 如 JC23H若C 0 不跳转 C 1 跳转 RelativeAddressing 改变PC 2020 3 31 15 如 JC23 1025H 23H 1002H 指令代码 当前PC 2020 3 31 16 对片内RAM的位寻址区和某些可位寻址的特殊功能寄存器进行位操作时的寻址方式 如 SETB3DH 将27H 5位置1CLRC Cy位清08086 8088CPU无此寻址方式 3 2 7位寻址BitAddressing 操作数在片内RAM位地址区或SFR某些位中 2020 3 31 17 寻址方式涉及的存储器空间 2020 3 31 18 3 3数据传送类指令 29条 DataTransferInstruction MCS 51助记符 8086 8088助记符 MOV MOVX MOVCMOVXCH XCHD SWAPXCHGPUSH POPPUSH POP源操作数寻址方式 5种 立即寻址 直接寻址 寄存器寻址 寄存器间接寻址 变址寻址 目的操作数寻址方式 3种 直接寻址 寄存器寻址 寄存器间接寻址除了目的操作数为ACC的指令影响奇偶标志P外 一般不影响标志位 2020 3 31 19 3 3 1以累加器为目的操作数的指令 4条 MOVA Rn Rn AMOVA direct direct AMOVA Ri Ri AMOVA data data A将源操作数指定内容送到A中 3 3 2以寄存器Rn为目的操作数的指令 3条 MOVRn AMOVRn directMOVRn data这组指令功能是把源操作数指定的内容送入当前工作寄存器 源操作数不变 2020 3 31 20 3 3 3以直接地址为目的操作数的指令 5条 MOVdirect AMOVdirect RnMOVdirect1 direct2MOVdirect RiMOVdirect data这组指令功能是把源操作数指定的内容送入由直接地址指出的片内存储单元 例 MOV20H AMOV20H R1MOV20H 30HMOV20H R1MOV0A0H 34HMOVP2 34H 2020 3 31 21 3 3 4以间接地址为目的操作数的指令 3条 MOV Ri A A Ri MOV Ri direct direct Ri MOV Ri data data Ri 功能 把源操作数指定的内容送入以R0或R1为地址指针的片内存储单元中 例 MOV R0 AMOV R1 20HMOV R0 34H 2020 3 31 22 3 3 5十六位数的传递指令 1条 MOVDPTR data168051是一种8位机 这是唯一的一条16位立即数传递指令 功能 将一个16位的立即数送入DPTR中去 其中高8位送入DPH 低8位送入DPL 例 MOVDPTR 1234H执行完了之后DPH中的值为12H DPL中的值为34H 如果我们分别向DPH DPL送数 则结果也一样 如下面两条指令 MOVDPH 35HMOVDPL 12H 则就相当于执行了MOVDPTR 3512H 2020 3 31 23 3 3 6累加器A与片外RAM之间的数据传递类指令 4条 MOVXA RiMOVX Ri AMOVXA DPTRMOVX DPTR A说明 1 在51中 与外部存储器RAM打交道的只可以是A累加器 所有需要送入外部RAM的数据必需要通过A送去 而所有要读入的外部RAM中的数据也必需通过A读入 在此我们可以看出内外部RAM的区别了 内部RAM间可以直接进行数据的传递 而外部则不行 比如 要将外部RAM中某一单元 设为0100H单元的数据 送入另一个单元 设为0200H单元 也必须先将0100H单元中的内容读入A 然后再送到0200H单元中去 2020 3 31 24 2 要读或写外部的RAM 当然也必须要知道RAM的地址 在后两条指令中 地址是被直接放在DPTR中的 而前两条指令 由于Ri 即R0或R1 只是8位的寄存器 所以只提供低8位地址 高8位地址由P2口来提供 3 使用时应先将要读或写的地址送入DPTR或Ri中 然后再用读写命令 例 将外部RAM中100H单元中的内容送入外部RAM中200H单元中 MOVDPTR 0100HMOVXA DPTRMOVDPTR 0200HMOVX DPTR A 2020 3 31 25 3 3 7读程序存储器指令 2条 MOVCA A DPTRMOVCA A PC本组指令是将ROM中的数送入A中 本组指令也被称为查表指令 常用此指令来查一个已做好在ROM中的表格说明 查找到的结果被放在A中 因此 本条指令执行前后 A中的值不一定相同 例 有一个数在R0中 要求用查表的方法确定它的平方值 此数的取值范围是0 5 MOVDPTR 100HMOVA R0MOVCA A DPTR ORG0100HDB0 1 4 9 16 25 如果R0中的值为2 则最终地址为100H 2为102H 到102H单元中找到的是4 2020 3 31 26 3 3 8堆栈操作 2条 PUSHdirect SP SP 1 SP direct POPdirect direct SP SP SP 1第一条为压入指令 就是将direct中的内容送入堆栈中 第二条为弹出指令 就是将堆栈中的内容送回到direct中 例 MOVSP 5FHMOVA 100MOVB 20PUSHACCPUSHB则执行第一条PUSHACC指令是这样的 将SP中的值加1 即变为60H 然后将A中的值送到60H单元中 因此执行完本条指令后 内存60H单元的值就是100 同样 执行PUSHB时 是将SP 1 即变为61H 然后将B中的值送入到61H单元中 即执行完本条指令后 61H单元中的值变为20 2020 3 31 27 3 3 9交换指令 5条 XCHA Rn A RnXCHA direct A direct XCHA Ri A Ri XCHDA Ri A 3 A 0 Ri 3 Ri 0SWAPA A 3 A 0 A 7 A 4例 已知A中的内容为34HMOVR6 29HXCHA R6SWAPAXCHA R6XCHDA R0 R6 29H A 29H R6 34H A 92H A 34H R6 92H A 36H R0 54H 设原来R0 指向的单元的内容为56H 2020 3 31 28 40H H50H HA H 41H H51H HR0 H 课堂练习 1 设 内部RAM中 40H 50H 41H 60H 50H 30H 51H 70H 执行下列片段后 MOVR0 40HMOVA R0INCR0MOV R0 A b MOVR0 40HMOVA R0INC R0MOVA R0 R0 50H A 30H R0 51H 51H 30H R0 40H A 50H 40 51H A 51H 2020 3 31 29 2 给出每条指令执行后的结果 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 45H 34H DPTR 6712H 12H 67H R0 12H A 67H 内部RAM 2020 3 31 30 3 利用传送类指令并用多种方法将内部RAM中50H单元的内容与40H单元的内容互换 2020 3 31 31 3 4算术运算类指令 24条 ArithmeticOperations 主要对8位无符号数 也可用于带符号数运算 包括 加 减 乘 除 加1 减1运算指令影响PSW有关位 2020 3 31 32 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 3 31 33 例1 ADDA 47HADDA 34HADDA R7ADDA R0 例2 MOVA 0AEH 82DADDA 81H 127D则执行完本条指令后 A中的值为2FH C 1 AC 0 OV 1 P 1 对无符号数 结果为12FH 带符号数运算 OV 1 有错 2020 3 31 34 2 带进位位的加法指令 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 3 31 35 例 先做67H A0H 107H 而107H显然超过了0FFH 因此最终保存在A中的是07H 而1则到了PSW中的CY位了 换言之 CY就相当于是100H 然后再做10H 30H CY 结果是41H 所以最终的结果是4107H 1067H 30A0H 0001000001100111 0011000010100000 0100000100000111 1067H 30A0H 4107H 2020 3 31 36 设 1067H存在R1R0中 30A0H存在R3R2中 计算R1R0 R3R2 结果存在R5R4中 MOVA R0ADDA R2 R0 R2 A和CYMOVR4 AMOVA R1ADDCA R3 R1 R3 CY A和CYMOVR5 A 2020 3 31 37 又例 先做67H 20H 87H 没有超过0FFH 因此最终保存在A中的是87H 而PSW中的CY 0 然后再做10H 30H CY 结果是40H 所以最终的结果是4087H 1067H 3020H 0001000001100111 0011000000100000 0100000010000111 1067H 3020H 4087H 设 1067H存在R1R0中 3020H存在R3R2中 计算R1R0 R3R2 结果存在R5R4中 2020 3 31 38 3 加1指令 5条 INCA A 1 A 影响P标志INCRn Rn 1 RnINCdirect direct 1 direct INC Ri Rn 1 Rn INCDPTR DPTR 1 DPTR功能很简单 就是将后面目标中的值加1 例 A 12H R0 33H 21H 32H 34H 22H DPTR 1234H 连续执行下面的指令 INCAINCR0INC21HINC R0INCDPTR A 13H R0 34H 21H 33H 34H 23H DPTR 1235H 2020 3 31 39 DAA在进行BCD码加法运算时 跟在ADD和ADDC指令之后 用来对BCD码加法运算结果进行自动修正 例 A 00010101BCD 代表十进制数15 ADDA 8 4 十进制调整指令 1条 A 1DH 按二进制规律加 A 23H 按十进制规律加 DAA 2020 3 31 40 3 4 减法指令 8条 SUBBA Rn A Rn CY ASUBBA direct A direct CY ASUBBA Ri A Ri CY ASUBBA data A data CY A将A中的值减去源操作数所指内容以及进位位C中的值 最终结果存在A中 如 SUBBA R2设 A C9H R2 55H CY 1 执行指令之后 A中的值为73H 1 带借位的减法指令 4条 2020 3 31 41 说明 没有不带借位的减法指令 如果需要做不带位的减法指令 在做第一次相减时 只要将CY清零即可 对带符号数 要注意OV标志 OV 1 出错 2 减1指令 4条 DECA A 1 A 影响P标志DECRn Rn 1 RnDECdirect direct 1 direct DEC Ri Rn 1 Rn 与加1指令类似 2020 3 31 42 3 4 3乘法指令 1条 MULAB A B BA此指令的功能是将A和B中的两个8位无符号数相乘 两数相乘结果一般比较大 因此最终结果用1个16位数来表达 其中高8位放在B中 低8位放在A中 在乘积大于FFH时 0V置1 否则OV为0 而CY总是0 例 A 4EH B 5DH 执行指令MULAB后 乘积是1C56H 所以在B中放的是1CH 而A中放的则是56H OV P 10 2020 3 31 43 3 4 4除法指令 1条 DIVAB A B的商 A 余数 B此指令的功能是将A中的8位无符号数除B中的8位无符号数 A B 除了以后 商放在A中 余数放在B中 CY和OV都是0 如果在做除法前B中的值是00H 也就是除数为0 那么0V 1 如 A 11H B 04H 执行指令DIVAB后 结果 A 04H B 1 CY OV P 001 2020 3 31 44 练习 试编写1234H 0FA3H的程序段 将结果高8位存入51H 低8位存入50H单元 MOVA 34HSUBBA 0A3HMOV50H AMOVA 12HSUBBA 0FHMOV51H A CLRC 2020 3 31 45 3 5逻辑运算类指令 24条 主要用于对2个操作数按位进行逻辑操作 结果送到A或直接寻址单元 主要操作与 或 异或 移位 取反 清零等 对标志位的影响除了目的操作数为ACC的指令影响奇偶标志P外 一般不影响标志位 LogicOperations 2020 3 31 46 3 5 1逻辑或指令 6条 ORLA Rn A Rn AORLA direct A direct AORLA Ri A Ri AORLA data A data AORLdirect A direct A direct ORLdirect data direct data direct 例 71H和56H相或 01110001 71H 01010110 56H 01110111即77H 后两条指令 若直接地址为I O端口 则为 读 改写 操作 ORLogicInstruction 2020 3 31 47 例 MOVA 45HMOVR1 25HMOV25H 39HORLA R1ORL25H 13HORL25H A A 45H R1 25H 25H 39H 45H 39H 7DH A 39H 13H 3BH 25H 3BH 7DH 7FH 25H 2020 3 31 48 3 5 2逻辑与指令 6条 ANLA Rn A Rn AANLA direct A direct AANLA Ri A Ri AANLA data A data AANLdirect A direct A direct ANLdirect data direct data direct 例 71H和56H相与 01110001 71H 01010110 56H 01010000即50H 后两条指令 若直接地址为I O端口 则为 读 改写 操作 ANdLogicInstruction 2020 3 31 49 例 MOVA 45HMOVR1 25HMOV25H 79HANLA R1ANL25H 15HANL25H A A 45H R1 25H 25H 79H 45H 79H 41H A 79H 15H 11H 25H 11H 41H 01H 25H 2020 3 31 50 例 71H和56H相异或 01110001 71H 01010110 56H 3 5 3逻辑异或指令 6条 XRLA Rn A Rn AXRLA direct A direct AXRLA Ri A Ri AXRLA data A data AXRLdirect A direct A direct XRLdirect data direct data direct 00100111即27H 后两条指令 若直接地址为I O端口 则为 读 改写 操作 eXclusive oRLogicInstruction 2020 3 31 51 例 MOVA 45HMOVR1 25HMOV25H 39HXRLA R1XRL25H 13HXRL25H A A 45H R1 25H 25H 39H 45H 39H 7CH A 39H 13H 2AH 25H 2AH 7CH 56H 25H 2020 3 31 52 3 5 4清0与取反指令 2条 取反 CPLA A A例 若A 5CH 执行CPLA结果 A A3H 清0 CLRA 0 A ComPlementLogicOperation 2020 3 31 53 3 5 5循环移位指令 4条 RLARRARLCARRCA 后两条指令 影响P标志和CY RotateLogicinstruction 2020 3 31 54 例 若A 5CH CY 1 执行RLCA后 对RLC RRC指令 在CY 0时RLC相当于乘以2RRC相当于除以2 结果 A B9H CY 0 P 1 2020 3 31 55 综合举例 ANLA 0FH 屏蔽A的高4位SWAPAANLP1 0FH 清P1口高4位ORLP1 A P1口高4位输出A的低4位 把累加器A中的低4位状态 通过P1口的高4位输出 P1口的低4位状态不变 2020 3 31 56 3 6控制转移类指令 17条 BranchingInstruction 共有控制程序转移类指令 不包括位操作类的转移指令 此类指令一般不影响PSW 包括以下类型 无条件转移和条件转移相对转移和绝对转移长转移和短转移调用与返回指令 2020 3 31 57 3 6 1无条件转移类指令 4条 短转移类指令 AJMPaddr11长转移类指令 LJMPaddr16相对转移指令 SJMPrel间接转移指令 JMP A DPTR 1 上面的前三条指令 统统理解成 PC值改变 即跳转到一个标号处 那么他们的区别何在呢 2020 3 31 58 跳转的范围不同 短转移类指令 AJMPaddr11长转移类指令 LJMPaddr16相对转移指令 SJMPrel 转移范围 2KB64KB 128 127 指令构成不同 AJMP LJMP后跟的是绝对地址 而SJMP后跟的是相对地址 指令长度不同原则上 所有用SJMP或AJMP的地方都可以用LJMP来替代 2020 3 31 59 间接转移指令 JMP A DPTR 这条指令的用途也是跳转 转到什么地方去呢 这可不能由标号简单地决定了 转移地址由A DPTR形成 并直接送入PC 指令对A DPTR和标志位均无影响 本指令可代替众多的判别跳转指令 又称为散转指令 多用于多分支程序结构中 2 第四条指令与前三条指令相比有所不同 2020 3 31 60 例 MOVDPTR TAB 将TAB代表的地址送入DPTRJMP A DPTR 跳转TAB AJMPROUT0 跳转ROUT0开始的程序段TAB 2 AJMPROUT1 跳转ROUT1开始的程序段TAB 4 AJMPROUT2 跳转ROUT2开始的程序段TAB 6 AJMPROUT3 跳转ROUT3开始的程序段 ROUT0 ROUT1 ROUT2 ROUT3 执行该段程序后 程序将根据A中的内容转移到不同的程序段去执行 散转 A 0 转ROUT0A 2 转ROUT1A 4 转ROUT2A 6 转ROUT3 2020 3 31 61 3 6 2条件转移指令 8条 条件转移指令是指在满足一定条件时进行相对转移 否则程序继续执行本指令的下一条指令 一 判A内容是否为0转移指令 2条 JZrel 如果A 0 则转移 否则顺序执行 JNZrel 如果A 0 就转移 转移到相对于当前PC值的8位移量的地址去 即 新的PC值 当前PC 偏移量rel我们在编写汇编语言源程序时 可以直接写成 JZ标号 即转移到标号处 2020 3 31 62 例 MOVA R0JZL1MOVR1 00HAJMPL2L1 MOVR1 0FFHL2 SJMPL2END在执行上面这段程序前 如果R0 0 结果R1 0FFH 而如果R0 0 则结果是R1 00H 把上面的那个例子中的JZ改成JNZ 看看程序执行的结果是什么 如果R0 0 结果R1 00H 如果R0 0 结果是R1中的值为0FFH 2020 3 31 63 二 比较不等转移指令 4条 CJNEA data relCJNEA direct relCJNERn data relCJNE Ri data rel此类指令的功能是将两个操作数比较 如果两者相等 就顺序执行 如果不相等 就转移 同样地 使用时 我们可以将rel理解成标号 即 CJNEA data 标号CJNEA direct 标号CJNERn data 标号CJNE Ri data 标号 2020 3 31 64 利用这些指令 可以判断两数是否相等 但有时还想得知两数比较之后哪个大 哪个小 本条指令也具有这样的功能 如果两数不相等 则CPU还会用CY 进位位 来反映哪个数大 哪个数小 如果前面的数大 则CY 0 否则CY 1 因此在程序转移后再次利用CY就可判断出哪个数大 哪个数小了 2020 3 31 65 举例 MOVA R0CJNEA 10H L1MOVR1 0 如R0 10H 则不转移R1 00H AJMPL3L1 JCL2 如CY 1即R010H 则转移AJMPL3L2 MOVR1 0FFHL3 SJMPL3因此最终结果是 本程序执行前 如果R0 10H 则R1 00H 如果R0 10H 则R1 0AAH 如果R0 10H 则R1 0FFH 2020 3 31 66 三 减1不为0转移指令 2条 DJNZRn relDJNZdirect relDJNZ指令的执行过程是这样的 它将第一个参数中的值减1 然后看这个值是否等于0 如果等于0 就往下执行 如果不等于0 就转移到第二个参数所指定的地方去 例 DJNZ10H LOOP LOOP 2020 3 31 67 例 MOV23H 0AHCLRALOOP ADDA 23HDJNZ23H LOOPSJMP 上述程序段的执行过程是 将23H单元中的数连续相加 存至A中 每加一次 23H单元中的数值减1 直至减到0 共加 23H 次 2020 3 31 68 3 6 3调用与返回指令 4条 一 调用指令 2条 LCALLaddr16 长调用指令 3字节 ACALLaddr11 短调用指令 2字节 上面两条指令都是在主程序中调用子程序 两者的区别 对短调用指令 被调用子程序入口地址必须与调用指令的下一条指令的第一字节在相同的2KB存储区之内 使用时可以用 LCALL标号 标号表示子程序首地址ACALL标号来调用子程序 2020 3 31 69 指令的执行过程是 当前PC压栈 子程序首地址送PC 实现转移 二 返回指令 2条 子程序执行完后必须回到主程序 如何返回呢 只要执行一条返回指令就可以了 RET 子程序返回指令RETI 中断子程序返回指令两者不能互换使用 2020 3 31 70 3 6 4空操作指令 1条 NOP空操作 就是什么事也不干 停一个周期 一般用作短时间的延时 RET指令的执行过程是 堆栈栈顶内容 2字节 调用时保存的当前PC值 弹出给PC 实现返回 RETI指令除了具有RET指令的功能实现程序返回外 还有对中断优先级状态触发器的清零 2020 3 31 71 3 7位操作指令 17条 BooleanOperations MCS 51单片机的硬件结构中 有一个位处理器 又称布尔处理器 它有一套位变量处理的指令集 包括位变量传送 逻辑运算 控制程序转移等 在MCS 51中 有一部份RAM和一部份SFR是具有位寻址功能的 位操作区 内部RAM的20H 2FH这16个字节单元 即128个位单元 位地址空间位00 7FH 可以位寻址的特殊功能寄存器 8031中有一 2020 3 31 72 些SFR是可以进行位寻址的 这些SFR的特点是其字节地址均可被8整除 如A累加器 B寄存器 PSW IP 中断优先级控制寄存器 IE 中断允许控制寄存器 SCON 串行口控制寄存器 TCON 定时器 计数器控制寄存器 P0 P3 I O端口锁存器 在进行位处理时 CY用作 位累加器 2020 3 31 73 以PSW中位4 RS1 为例 直接 位 地址方式 如D4H 点操作符号方式 如PSW 4 D0H 4 位名称方式 如RS1 用户定义名方式 如用伪指令bitSUB REGbitRS1定义后 可用SUB REG代替RS1 位地址表达方式 2020 3 31 74 4 7 1位传送指令 2条 MOVC bit bit CMOVbit C C bit这组指令的功能是实现位累加器 CY 和其它位地址之间的数据传递 例 MOVC P1 0 将P1 0的状态送给C MOVP1 0 C 将C中的状态送到P1 0 引脚上去 2020 3 31 75 3 7 2位清0和置位 4条 位清0指令CLRC 使CY 0CLRbit 使指令的位地址等于0 例 CLRP1 0 即使P1 0变为0位置1指令SETBC 使CY 1SETBbit 使指定的位地址等于1 例 SETBP1 0 使P 0变为1 2020 3 31 76 4 7 3位逻辑运算指令 6条 位与指令ANLC bit Cy与指定位的值相与 结果送CyANLC bit 先将指定的位地址中的值取出后取反 再和Cy相与 结果送回Cy 但注意 指定的位地址中的值本身并不发生变化 例 ANLC P1 0 2020 3 31 77 位取反指令CPLC 使Cy值取反 CPLbit 使指定的位的值取反 例 CPLP1 0 位或指令ORLC bitORLC bit 2020 3 31 78 4 7 4位条件转移指令 5条 判Cy转移指令JCrelJNCrel第一条指令的功能是如果Cy 1就转移 否则就顺序执行 第二条指令则和第一条指令相反 即如果Cy 0就转移 否则就顺序执行 同样理解 JNC标号 2020 3 31 79 判位变量转移指令JBbit relJNBbit relJBCbit rel第一条指令 如果指定的 bit 1 则转移 否则顺序执行 第二条指令功能相反 同样理解 JBbit 标号第三条指令是如果指定的 bit 1 则转移 并把该位清0 否则顺序执行 2020 3 31 80 P3 2和P3 3上各接有一只按键 要求它们分别按下时 P3 2 0或P3 3 0 分别使P1口为0或FFH START MOVP1 0FFHMOVP3 0FFHL1 JNBP3 2 L2 JNBP3 3 L3 P3 2 1 P3 3 1 等待LJMPL1L2 MOVP1 00H P3 2 0 使P1口全为 0 LJMPL1L3 MOVP1 0FFH P3 3 0 使P1口全为 1 LJMPL1 举例 2020 3 31 81 本章小结 7种寻址方式 111条指令 字节数 单字节指令 49条双字节指令 45条三字节指令 17条 7种寻址方式 立即 直接 寄存器 寄存器间接 变址 相对 位寻址 2020 3 31 82 111条指令 数据传送类 29条 算术运算类 24条 逻辑运算与循环类 24条 控制转移类 17条 位操作类 17条
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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