单片机原理与接口技术复习重点.ppt

上传人:文库蛋蛋多 文档编号:2977388 上传时间:2023-03-07 格式:PPT 页数:216 大小:5.68MB
返回 下载 相关 举报
单片机原理与接口技术复习重点.ppt_第1页
第1页 / 共216页
单片机原理与接口技术复习重点.ppt_第2页
第2页 / 共216页
单片机原理与接口技术复习重点.ppt_第3页
第3页 / 共216页
单片机原理与接口技术复习重点.ppt_第4页
第4页 / 共216页
单片机原理与接口技术复习重点.ppt_第5页
第5页 / 共216页
点击查看更多>>
资源描述

《单片机原理与接口技术复习重点.ppt》由会员分享,可在线阅读,更多相关《单片机原理与接口技术复习重点.ppt(216页珍藏版)》请在三一办公上搜索。

1、单片机原理及应用,试卷构成,1 选择题 1分*1515分2 填空题 1分*1515分3 阅读程序 5分4=20分4 简单程序设计10分2=20分5 应用题152=30分试题范围:课本相关理论知识与编程设计、实验、作业,第2章 MCS-51系列单片机的结构和原理,1掌握单片机的基本结构(CPU、ROM、RAM、定时/计数器、并行I/O、全双工串行口、中断系统、总线结构)。2掌握特殊功能寄存器SFR的功能、作用及它们复位后的状态。3掌握存储器的组织结构(分ROM和RAM)及对应的寻址方式。4了解单片机的工作时钟与时序。,2.1 单片机内部组成及引脚功能,MCS-51系列单片机有3种类型的产品:80

2、51、8751和8031,其主要差别:8051内设有4KB的掩膜ROM;8751内设有4KB的EPROM;8031内没有ROM。,51子系列的主要特点为:8位CPU。片内带振荡器,频率范围1.212MHZ。片内带256字节的数据存储器。片内带4K的程序存储器。程序存储器的寻址空间为64K字节。片外数据存储器的寻址空间内64K字节。128个用户位寻址空间。,2.1.1 单片机内部结构,1.微处理器 即CPU,包括运算器和控制器。(1)运算器ALU:进行算术或逻辑运算部件;(2)控制器:产生各种控制信号,控制计算机工作的部件。,2.内部数据存储器 共有256B(00HFFH),其中低128B(00

3、H7FH)用户使用;高128B(80HFFH)为专用寄存器。3.内部程序存储器 8051有4KB(0000H0FFFH)ROM,用于存放程序、原始数据或表格常数。4.定时器/计数器 2个16位定时/计数器。5.并行I/O口 共有4个8位I/O口(P1、P2、P3、P4)。6.串行口 1个全双工的异步串行口,实现串行数据传送。7.中断控制系统 2个外中断、2个定时/计数中断和1个串行口中断。8.时钟电路 为单片机产生时钟脉冲序列,1.2MHz12MHz。,2.1.2 MCS-51的引脚功能,MCS-51单片机的40引脚双列直插式(DIP)封装结构如下图。,表2-1 P3各口线的第二功能表,片外总

4、线结构,1数据总线 数据总线宽度为8位,由P0口直接提供。2地址总线 地址总线宽度为16位,寻址范围都为64KB。由P0口经地址锁存器提供低8位(A7A0),P2口提供高8位(A15A8)而形成。可对片外程序存储器和片外数据存储器寻址。3控制总线 控制总线由第二功能状态下的P3口和4根独立的控制线RST、EA、ALE和PSEN组成。,2.3 存储器组织,2.3.1 MCS-51储存器特点,物理上分为:4个空间,即片内ROM、片外ROM 片内RAM、片外RAM逻辑上分为:3个空间,即程序内存(片内、外)统一编址 MOVC 数据存储器(片内)MOV 数据存储器(片外)MOVX,2.3.2 片内数据

5、存储器,1、片内数据存储器低128B(字节地址为00H7FH),(1)通用寄存器区00H1FH R0R7;单片机复位后自动选择工作寄存器0区。,8051的片内8位地址寻址,寻址范围为256个单元(00HFFH),(2)位寻址区20H2FH:可进行128位的位寻址(3)用户RAM区30H7FH:用户RAM区,字节寻址,用作数据缓冲区以及堆栈区。,表2-3 8051RAM区位地址分配表,(1)位寻址区的访问 SETB 7FH;7FH1 等价于 SETB 2FH.7,两点说明:,(2)堆栈 堆栈是在内存RAM中开辟的一个特定的存储区,专门用来暂存数据或断点地址,并按照“先进后出,后进先出”的原则进行

6、操作。,栈底是固定的,栈顶会自动地向地址递增的方向变化。,系统复位后,SP被初始化位07H。,2、片内数据存储器高128B,表2-4 特殊功能寄存器SFR地址表,特殊功能寄存器(SFR)也称专用寄存器,专门用于控制、管理片内算术逻辑部件、并行I/O口、串行口、定时/计数器、中断系统等功能模块的工作。,(1)累加器ACC 累加器ACC(简称为A)为一个8位的寄存器,它是CPU中使用最频繁的寄存器,ALU进行运算时,数据绝大多数时候都来自于累加器ACC,运算结果也通常送回累加器ACC。,(3)堆栈指针SP 堆栈指针SP是一个8位寄存器,用它存放栈顶的地址。数据入栈时,先SP自动加1,后写入数据;数

7、据出栈时,先读出数据,后SP自动减 1;SP始终指向栈顶地址。复位时 SP=07H。但在程序设计时应将SP值初始化为30H以后,以免占用宝贵的寄存器区和位地址区。,(2)B寄存器 主要用于乘法和除法运算。,(4)程序状态字PSW 程序状态字PSW是一个8位的寄存器,它用于保存指令执行结果的状态,以供程序查询和判别。,Cy 进位/借位标志;位累加器。AC 辅助进/借位标志;用于十进制调整。F0 用户定义标志位;软件置位/清零。OV 溢出标志;硬件置位/清零。P 奇偶标志;A中1的个数为奇数 P=1;否则 P=0。RS1、RS0 寄存器区选择控制位。0 0:0区 R0 R7 0 1:1区 R0 R

8、7 1 0:2区 R0 R7 1 1:3区 R0 R7,(5)数据指针DPTR DPTR为16位寄存器,也可按两个8位寄存器使用:DPH:DPTR高位字节 DPL:DPTR低位字节,(6)程序计数器PC PC用于存放下一条执行的指令地址,是一个16位专用寄存器,可寻址64KB。PC有自动加1的功能,PC没有地址,不可寻址。复位后,PC0000H。,67H=01100111B 58H=01011000B 0 1 1 0 0 1 1 1B+0 1 0 1 1 0 0 0B 1 0 1 1 1 1 1 1=0BFH 则执行后累加器A中的值为0BFH,由相加过程得Cy=0、AC=0、OV=1、P=1。

9、,例:试分析下面指令执行后,累加器A,标志位Cy、AC、OV、P的值?MOV A,#67H ADD A,#58H,分析:第一条指令执行时把立即数67H送入累加器A,第二条指令执行时把累加器A中的立即数67H与立即数58H相加,结果回送到累加器A中。加法运算过程如下:,2.3.3 片内程序存储器,寻址范围:0000H FFFFH 容量64KB,即地址长度:16位,,寻址内部ROM;,,寻址外部ROM。,当PC值超过片内ROM容量时会自动转向外部存储器空间。,作 用:存放程序及程序运行时所需的常数。,0000H 系统复位,PC指向此处;0003H 外部中断0入口000BH T0溢出中断入口 001

10、3H 外中断1入口001BH T1溢出中断入口0023H 串口中断入口,1.P0 口(P0.0P0.7,3932 脚)为三态双向口(1)P0口作地址/数据复用总线使用(低8位)(2)P0口作通用I/O端口使用(3)P0口线上的“读修改写”功能2.P1 口(P1.0P1.7、18 脚)准双向口3.P2 口(P2.0P2.7,2128 脚)准双口(1)P2口作通用I/O端口使用(2)P2口作地址总线口使用(高8位)4.P3 口(P3.0P3.7、1017 脚)双功口(1)P3口作第一功能口(通用I/O端口)使用(2)P3口作第二功能口使用,2.4 并行I/O端口,多路开关1)功能:用于控制选通I/

11、O方式还是地址/数据输出方式 控制信号为0,I/O状态;控制信号为1,地址/数据总线2)方式控制:由内部控制信号产生,1个输出锁存器锁存,就是把信号暂存以维持某种电平状态,2个输入缓冲器(BUF1和BUF2)将外设送来的数据暂时存放,I/O驱动器,2.4 并行I/O端口,共有4个8位双向I/O口,共32口。每位均有自己的锁存器,输出驱动器和输入缓冲器。,1,0,2.4.1 P0口位图内部结构,(1)通用输出 此时必须外接上拉电阻。(2)通用输入读引脚:CPU在执行“MOV”类输入指令时(如:MOV A,P0),内部产生的操作信号是“读引脚”。P0.X引脚上的数据经过缓冲器2读入到内部总线。,1

12、、P0口作通用I/O口使用,2、P0口作地址/数据总线 不必外接上拉电阻。,读锁存器:CPU在执行“读-改-写”类输入指令时(如:ANL P0,A),锁存器中的数据经过缓冲器1送到内部总线,然后与A的内容进行逻辑“与”,结果送回P0锁存器并出现在引脚。,注意:在读引脚时,必须先向电路中的锁存器写入1。MOV P0,#0FFH MOV A,P0,P1口内部结构如下图所示输出部分有内部上拉电阻R*约为20K。其他部分与P0端口使用相类似(读引脚时先写入1)。,写数据,读端口,MOV P1,#0FFHJNB P1.1,$CLR P1.0,2.4.2 P1口内部结构,2.4.3 P2口内部结构,说明:

13、1、P2可以作为通用的I/O,也可以作为高8位地址输出。2、当控制信号为1时P2口输出地址信息,此时单片机完成外部的取指操作或对外部数据存储器16位地址的读写操作。3、当P2口作为普通I/O口使用时用法和P1口类似。,2.4.4 P3口内部结构,说明:1、做普通端口使用时,第二功能应为“1”。,2、使用第二功能时,输出端口锁存器应为“1”。3、第二功能()P3.0 TXD P3.4 T0 P3.1 RXD P3.5 T1 P3.2 INT0 P3.6 WR P3.3 INT1 P3.7 RD,2.5.2 时序定时单位,1、振荡周期:也称为节拍(用P表示),Tosc=1/fosc2、状态周期:用

14、S表示,是振荡周期的2倍,分为P1和P2两个节拍。3、机器周期:CPU完成一个基本操作所需要的时间。执行一条指令分为几个机器周期。每个机器周期完成一个基本操作。MCS-51单片机每12个振荡周期为一个机器周期。4、执令周期:即从取指到执行完一条指令所需时间。,CPU执行一条指令的各个微操作所对应时间顺序称为CPU时序。,8031对片外RAM和ROM的连接,(1)对片外ROM的读操作 MOVC A,A+DPTR(2)对片外RAM的写操作 MOVX DPTR,A,第一阶段是根据程序计数器PC到片外ROM中取指令码;第二阶段是对累加器A和DPTR中16位地址进行运算,并把运算得到的和的地址去片外RO

15、M取出所需要常数送到累加器A。,读片外ROM的指令时序:MOVC A,A+DPTR,读片外RAM的指令时序:MOVX A,DPTR,2.6 MCS-51 单片机工作方式,2.6.1 复位电路与复位方式,1、复位方式 在RST/VPD端持续给出2个机器周期的高电平就可以完成复位操作(一般复位正脉冲宽度大于10 ms)。,使单片机内各寄存器的值变为初始状态的操作称为复位。,1、8051 的引脚RST是_(IN脚还是OUT脚),当其端出现_电平时,8051进入复位状态;复位后PC=_。8051一直维持这个值,直到RST脚收到_电平,8051脱离复位状态,进入程序运行状态。2、MCS51单片机的CPU

16、每取一个指令字节,立即使()A.堆栈指针SP自动加1 B.数据指针DPTR自动加1 C.程序计数器PC自动加1 D.累加器A自动加13MCS51单片机的主程序应该从哪个单元开始存放?为什么?4、单片机上电后或复位后,工作寄存器R2是在()A、0区01H单元B、0区02H单元C、0区0BH单元D、SFR58051复位后,PC与SP的值为()A、0000H,00H B、0000H,07H C、0003H,07H D、0800H,00H,知识总结,1、掌握寻址方式2、掌握指令的含义和使用方法,做到程序注释清晰准确。,第三章 MCS-51单片机指令系统,3.1.3 寻址方式及寻址空间寻址方式即寻找操作

17、数存放单元的地址的方式,共7种方式。,1、立即寻址方式所谓立即寻址,就是指令中直接给出参与操作的数据本身,即操作数出现在指令中,用“#”作前缀。MOV A,#40H,FFH,ROM,74H,40H,SFR,FFH,A,FAH,RAM,FFH,06H,SFR,FFH,A,06H,32H,2、直接寻址方式所谓直接寻址,就是在指令中直接给出参与操作的数据所在内部RAM单元的地址。MOV A,32H,直接寻址方式中可以访问:(1)内部数据存储器的低 128 个字节单元(00H7FH)。(2)特殊功能寄存器,特殊功能寄存器只能用直接寻址方式进行访问。,3、寄存器寻址方式所谓寄存器寻址,就是操作数存放在指

18、定的寄存器中。MOV A,R7,FAH,RAM,FFH,22H,SFR,FFH,A,40H,R7,40H,规定:按字节访问特殊功能寄存器只能用直接寻址方式。MOV A,P0等同于 MOV A,80H,寄存器寻址方式的寻址范围包括:通用工作寄存器有4组共32个通用工作寄存器,R0R7。部分专用寄存器累加器A、B寄存器、DPTR寄存器。,4、寄存器间接寻址方式指令中寄存器的内容作为操作数存放的地址,在工作上间接寻址寄存器前用“”表示前缀。MOV A,R0,FAH,RAM,FFH,22H,SFR,FFH,A,40H,40H,22H,R0,寻址范围:(1)访问内部RAM低128个单元,其通用形式为Ri

19、(2)对片外数据存储器的64K字节的间接寻址,例如:MOVX A,DPTR(3)片外数据存储器的低256字节 例如:MOVX A,Ri,5、基址变址寄存器间接寻址方式 基地址寄存器 DPTR 或 PC 变址寄存器 A 该寻址方式常用于访问程序存储器,查表。如 MOVC A,A+DPTR,56H,ROM,DPTR,+=,2042H,2030H,12H,A,地址,56H,56H,说明:(1)本寻址方式是专门针对程序存储器的寻址方式,寻址范围可达到64KB。(2)本寻址方式的指令只有3条:MOVC A,A+DPTR MOVC A,A+PC JMP A+DPTR,6、相对寻址 把指令中给定的相对偏移量

20、与本指令所在单元地址(PC内容)相加得到真正有效的操作数所存放的地址。例如(rel75H)2000H:SJMP rel,PC=2000H,2,+75,PC=2077H,2077H,2002H,2001H,200,0H,80H,75H,ROM,7位寻址方式 MCS-51有位处理功能,可以对数据位进行操作,例如:MOV C,40H 是把位40H的值送到进位标志位C。,目标地址PC当前值指令字节数相对偏移量rel,rel是8位带符号数,正数则程序向下,负数向上转移,在程序中一般用标号代替。128B127B,Rn 工作寄存器R0 R7Ri 间接寻址寄存器R0、R1direct 直接地址,包括内部128

21、B RAM单元地址、21个SFR地址。#data 8位常数;#data16 16位常数addr11 11位目的地址;addr16 16位目的地址rel 8位带符号的偏移地址 DPTR 16位外部数据指针寄存器bit 可直接位寻址的位;/bit 指定位求反(x)x中的内容(x)x中的地址中的内容$当前指令存放的地址,3.1.5 指令系统标识符,下列各条指令其源操作数的寻址方式是什么?(1)MOVA,#48H(2)ADD A,60H(3)ANL A,R0(4)XCHD A,R0(5)MOVX A,DPTR(6)MOV A,R0(7)MOVC A,A+DPTR(8)PUSH DPH,3.2 数据传送

22、类指令,使用最频繁的一类指令,通用格式:MOV,属“复制”性质,而不是“剪切”此类指令不影响标志位,Cy、Ac和OV,只影响奇偶标志位P。,1以累加器为目的操作数的指令 MOV A,Rn;A(Rn),n=07 MOV A,Ri;A(Ri),i=0,1 MOV A,direct;A(direct)MOV A,#data;A#data,3.2.1 内部RAM单元之间的数据传送,27H,38H,33H,ROM,E6H,FFH,FFH,FFH,A,SFR,FFH,R0,38H,27H,RAM,MOV A,R0(E6H),27H,40H,33H,ROM,E5H,40H,FFH,SFR,FFH,A,RAM

23、,FFH,R5,40H,27H,MOV A,40H;(E5H 40H),例3-1:假设(R0)30H,内RAM中(30H)=0F7H,(68H)=66H,给出执行每条指令后A的内容。MOV A,R0 MOV A,R0 MOV A,68H MOV A,#18,;(A)=30H;(A)=0F7H;(A)=66H;(A)=18,2.以Rn为目的操作数的指令 MOV Rn,A;Rn(A),n=07 MOV Rn,direct;Rn(direct),n=07 MOV Rn,#data;Rn#data,n=07功能:是把源操作数的内容送入当前一组工作寄存器区的R0R7中的某一个寄存器。例3-2:假设(A)

24、2FH,内RAM(36H)0E6H,给出执行每条指令后的Rn的内容。MOV R1,A MOV R7,36H MOV R4,#96H,3.以寄存器间接地址为目的操作数的指令 MOV Ri,A;(Ri)(A)MOV Ri,direct;(Ri)(direct)MOV Ri,#data;(Ri)#data功能:把源操作数所指定的数据送入R0或R1所指向的内RAM单元。,;(R1)=2FH;(R7)=0E6H;(R4)=96H,例3-3:假设(A)2FH,内RAM(36H)0E6H,外RAM(36H)78H,(R0)30H,(R1)32H,给出执行每条指令后的结果。MOV R1,A MOV R1,36

25、H MOV R0,#56,4.以直接地址direct为目的操作数的指令 MOV direct,A;direct(A)MOV direct,Rn;direct(Rn),n=07 MOV direct1,direct2;MOV direct,Ri;direct(Ri)MOV direct,#data;direct#data功能:把源操作数送入直接地址指出的存储单元。direct指的是内部RAM或SFR的地址。,;(32H)=2FH;(32H)=0E6H;(30H)=38H,例3-4:用3种方法将内RAM中30H单元的内容传送到40H单元。MOV 40H,30H MOV R0,#30H MOV 40

26、H,R0 MOV R0,#40H MOV R0,30H,5.以DPTR为目的操作数的传送指令 MOV DPTR,#data16;DPTR#data16 唯一的16位数据的传送指令,立即数的高8位送入DPH,立即数的低8位送入DPL。,40H,33H,ROM,87H,45H,FFH,33H,ROM,C0H,40H,FFH,SFR,FFH,SP,RAM,FFH,40H,50H,51H,3.2.2 堆栈操作指令 1)PUSH direct 2)POP direct,1、在MCS-51 单片机的内部RAM中,可以设定一个先进后出的区域,称其为堆栈。2、在特殊功能寄存器中有一个堆栈指针SP,它指出栈顶的

27、位置。3、执行操作:SP(SP)1(SP)direct例 PUSH 40H(C0H),51H,50H,33H,FFH,40H,ROM,87H,45H,FFH,FFH,ROM,D0H,40H,FFH,SFR,FFH,SP,RAM,40H,50H,51H,出栈指令的功能是:将SP所指出的内部RAM单元的内容送入由直接地址所指出的字节单元,接着将堆栈指针SP的内容减 1。执行操作:direct(SP)SP(SP)1例 POP 40H(D0H),51H,50H,3.2.2 堆栈操作指令 1)PUSH direct 2)POP direct,3.2.3 数据交换指令,1.字节交换指令 XCH A,Rn(

28、A)(Rn)XCH A,direct(A)(direct)XCH A,Ri(A)(Ri)2.半字节交换指令 XCHD A,Ri(A)03(Ri)033.累加器半字节交换指令 SWAP A(A)03(A)47,例3-6:假设(A)=12H,(R0)=34H,内RAM(34H)=56H,分析每条指令执行结果。XCH A,R0 XCHD A,R0 SWAP A,;(A)=56H;(A)=16H;(A)=21H,51H,33H,FFH,40H,ROM,87H,45H,FFH,FFH,ROM,CFH,FFH,FFH,SFR,FFH,A,RAM,R7,50H,51H,51H,33H,XCH A,R7(CF

29、H),F2H,CDH,FFH,40H,ROM,87H,45H,FFH,FFH,ROM,C5H,32H,FFH,SFR,FFH,A,RAM,32H,50H,51H,CDH,F2H,XCH A,32H(C5H 32H),B6H,CDH,44H,40H,ROM,87H,45H,FFH,ROM,C7H,FFH,FFH,SFR,FFH,A,RAM,R1,44H,45H,CDH,B6H,XCH A,R1(C7H),3.2.4 累加器A与外部数据存储器传送指令,ROM,93H,FFH,01H,SFR,DPH,20H,DPL,33H,A,89H,FFH,2001H,89H,外RAM,1、读外部RAM或外部I/

30、O口的指令 MOVX A,DPTR;A(DPTR),读外部RAM/IO MOVX A,Ri;A(Ri),读外部RAM/IO2、写外部RAM或外部I/O口的指令 MOVX DPTR,A;(DPTR)(A),写外部RAM/IO MOVX Ri,A;(Ri)(A),写外部RAM/IO,3.2.5 累加器A与ROM的数据传送指令(查表指令),汇编指令格式 机器指令格式 操 作MOVC A,A+DPTR 93H PC(PC)+1,A(A)+(DPTR)MOVC A,A+PC 83H PC(PC)+1,A(A)+(PC),注意:前一条指令只能查找指令所在位置256B范围内的代码或常数,后一条指令查表范围可

31、达整个程序存储器的64KB空间。,例3.7 在程序存储器中有一平方表,从2000H单元开始存放,如图所示,试通过查表指令查找出6的平方。,解:采用DPTR作为基址寄存器的查表程序比较简单,查表范围大,也容易理解。只要预先使用一条16位数据传送指令,把表的首地址2000H送入DPTR,然后进行查表就可以了。相应的程序如下:MOV A,#6;设定备查的表项MOV DPTR,#2000H;设置DPTR为表始址MOVC A,A+DPTR;将A的平方值查表后送A 如果需要查找其他数的平方,只需要将累加器A的内容(变址)改一下即可。,上述指令不影响任何标志位,但PSW的P位除外。注意:MOV Rn,Rn

32、MOV Ri,Ri MOV Rn,Ri MOV#data,A 等等指令是非法指令。,哇!好容易出错啊!,练习:写出完成下列功能的程序段,(1)将R0的内容送R6中 MOV A,R0 MOV R6,A,(2)将片内RAM 30H单元的内容送片外60H单元中 MOV A,30H MOV R0,#60H MOVX R0,A,(3)将片处RAM 1000H单元的内容送片内20H单元中 MOV DPTR,#1000H MOVX A,DPTR MOV 20H,A,(4)将ROM 2000H单元的内容送片内RAM的30H单元中 MOV A,#0 MOV DPTR,#2000H MOVC A,A+DPTR M

33、OV 30H,A,考试例题,已知(A)=83H,(R0)=17H,(17H)=34H,试写出80C51执行下列程序段后,A的内容(要求写出分析过程)。ANL A,#17H ORL 17H,A XOL A,R0 CPL A,3.3 算术运算类指令,1、不带进位的加法指令 ADD A,Rn;A(A)+(Rn),n=07 ADD A,Ri;A(A)+(Ri),i=0,1 ADD A,direct;A(A)+(direct)ADD A,#data;A(A)+data加法运算影响PSW运算标志位(Cy、AC、P及OV)的状态。,例3-9:设(A)0B3H,(R1)56H,分析指令“ADD A,R1”执行

34、后的结果。,3.3.1 加法指令,运算结果为(A)?,(Cy)?(AC)?(OV)?,(P)?,溢出标志位OV的判断:CyCy11表示溢出。,2DH,ROM,87H,FFH,ROM,24H,3 0H,FFH,SFR,FFH,A,2DH,+,F3H,3 0H,B6H,44H,40H,RAM,R1,30H,31H,B6H,2DH,ROM,87H,FFH,ROM,24H,3 0H,FFH,SFR,FFH,A,2DH,+,F3H,3 0H,B6H,44H,40H,RAM,R0,44H,45H,B6H,ADD A,R0,ADD A,30H,说明:Cy反映两个无符号数运算是有无进位的特征。OV反映两个带符

35、号数运算时有无溢出的特征。将两数看作无符号还是带符号数,完全是事先约定的,编程者必须心中有数,并可随时查询标志,获得正确的结果。,2带进位加法指令 ADDCA,Rn;A(A)+(Rn)+Cy,n=07 ADDCA,direct;A(A)+(direct)+Cy ADDCA,Ri;A(A)+(Ri)+Cy,i=0,1 ADDCA,#data;A(A)+#data+Cy,CDH,ROM,87H,FFH,ROM,34H,3 0H,FFH,SFR,FFH,A,CDH,+,FDH,3 0H,0 0 0 1 1 0 0,FFH,PSW,1,+,1,FFH,FEH,0,ADDC A,#30H,例3-11:设

36、内部RAM 30H32H 有3个单字节的无符号数,求和并将和的低字节送入33H单元,高字节送入34H单元。MOV A,30H ADD A,31H MOV 33H,A MOV A,#00H ADDC A,#00H MOV 34H,A MOV A,33H ADD A,32H MOV 33H,A MOV A,34H ADDC A,#00H MOV 34H,A,3加1指令 INC A INC Rn;n=07 INC direct INC Ri;i=0,1 INC DPTR,例3-12:设(R0)7EH,(DPTR)=10FEH,内RAM(7EH)=0FFH,(7FH)=38H,分析下列指令顺序执行的情

37、况。INC R0 INC R0 INC R0 INC DPTR,B6H,35H,+,1,B7H,0,B6H,30H,RAM,34H,35H,30H,R0,B6H,INC 34H,4十进制调整指令指令格式:DA A调整的方法是把结果加6调整,即所谓十进制调整修正。,修正方法应是:(a)累加器低4位大于9或辅助进位位Ac=1,则进行低4位加6修正。(b)累加器高4位大于9或进位位Cy=1,则进行高4位加6修正。(c)累加器高4位9或Cy=1,低4位9或AC,则高4位和低4位分别加6修正。,例3-13:编程实现对两个BCD码数56和67的加法运算,要求和仍为BCD数。解:MOV A,#56H ADD

38、 A,#67H DA A,注意:1)DA指令只能跟在加法指令后面使用;2)调整前参与运算的两数是BCD码数;,1带借位的减法指令 SUBB A,Rn;A(A)(Rn)Cy,n=07 SUBB A,direct;A(A)(direct)Cy SUBB A,Ri;A(A)(Ri)Cy,i=0,1 SUBB A,#data;A(A)#dataCy功能:从累加器A中的内容减去指定的变量和进位标志Cy的值,结果存在累加器A中。,3.3.2 减法指令,CDH,ROM,87H,FFH,ROM,34H,3 0H,FFH,SFR,FFH,A,CDH,-,9DH,3 0H,0 0 0 1 1 0 0,FFH,PS

39、W,1,-,1,FFH,9CH,0,FFH,B6H,30H,RAM,34H,35H,B6H,30H,SUBB A,35H,假设外部数据存储器1000H单元的内容为28H,PSW的内容为82H,执行指令序列后,A的内容为,CY的内容为,AC的内容为,OV的内容为。MOV DPTR,#1000H MOVX A,DPTR MOV R6,#0FAH SUBB A,R6,2DH 1 1 0,2、减1指令 DEC A;(A)-1ADEC Rn;(Rn)-1Rn,n=07DEC direct;(direct)-1directDEC Ri;(Ri)-1(Ri),i=0,1说明:减1指令不影响标志位。,CDH,

40、ROM,87H,35H,ROM,04H,SFR,FFH,A,CDH,-,1,FFH,0 0 0 1 1 0 0,FFH,PSW,1,1,FFH,CCH,0,B6H,30H,RAM,34H,35H,B6H,30H,R0,DEC A,例:试编程计算5678H-1234H的值,结果保存在R6、R5中。解:减数和被减数都是16位二进制数,计算时要先进行低8位的减法,然后再进行高8位的减法,在进行低8位减法时,不需要考虑借位,所以要在减法指令之前将借位标志清0。程序如下:MOV A,#78H;被减数低8位送累加器 CLR C;清进位标志位Cy SUBB A,#34H;减去减数 MOV R5,A;保存低8

41、位 MOV A,#56H;被减数高8位送累加器 SUBB A,#12H;减去减数 MOV R6,A;保存高8位,3.3.3 乘法指令(无符号数)MUL AB;A(A)(B)低字节;B(A)(B)高字节注意:若乘积大于0FFH,则OV置1,否则清0(此时B的内容为0)。Cy总是被清0。该操作也影响标志位P。,02H,ROM,87H,FFH,ROM,24H,3 0H,FFH,00H,3 0H,06H,FFH,02H,SFR,A,B,06H,0CH,0CH,00H,0 0 0 1 1 0 0,PSW,0,1,3.3.4 除法指令DIV AB;A(A)/(B)(商);B(A)/(B)(余数)注意:若除

42、数(B)=00H,则结果无法确定,则OV置1。Cy总是被清0。该操作也影响标志位P。,3.4.1 单操作数逻辑操作指令1、CLR A;(A)02、CPL A;A中8位按位求反,3.4 逻辑运算类指令,SFR,A,1,1,0,1,0,1,0,0,1,1,0,1,0,1,0,0,3、累加器A循环左移指令 RL A,4、累加器A带进位循环左移指令 RLC A,0,0,SFR,A,1,1,0,1,0,1,0,1,1,0,1,0,1,0,0,PSW,1,0,1,0,1,0,0,1,0,1,0,1,0,0,5、累加器A循环右移指令 RR A,6、累加器A带进位循环右移指令 RRC A,0,0,PSW,1,

43、0,1,0,1,0,0,0,1,0,1,0,0,SFR,A,1,1,0,1,0,1,0,1,1,0,1,0,1,0,0,3.4.2 双操作数逻辑运算指令1、逻辑“与”指令ANL A,Rn;(A)(A)(Rn),以下类同。ANL A,directANL A,RiANL A,#dataANL direct,AANL direct,#data,例、(P1)=35H,使其高4位输出0,低4位不变。解:ANL P1,#0FH 此做法称为“屏蔽”位。,2、逻辑“或”指令ORL A,Rn;(A)(A)(Rn),以下类同。ORL A,directORL A,RiORL A,#dataORL direct,AO

44、RL direct,#data,例、将A中的低3位送入P1中,并且保持P1中高5位不变。ANL A,#07HANL P1,#0F8HORL P1,A;(P1)=P17P16P15P14P13A2A1A0这称为“数位组合”。,3、逻辑“异或”指令XRL A,Rn;(A)(A)(Rn),以下类同。XRL A,directXRL A,RiXRL A,#dataXRL direct,AXRL direct,#data,例、设(P1)=0B4H=10110100B,执行:XRL P1,#00110001B 结果按#0 0 1 1 0 0 0 1 取反,即:(P1)=1 0 0 0 0 1 0 1 B=8

45、5H 这称为“指定位取反”。,【问】写出完成下列功能的指令段。1对累加器A中的1、3、5位清0,其余位不变ANL A,#11010101B2对累加器A中的2、4、6位置1,其余位不变ORL A,#01010100B3对累加器A中的0、1位取反,其余位不变XRL A,#00000011B,【例】拆字程序:在内部RAM 40H单元保存有以压缩BCD码表示的2位十进制数,编程将它们拆开,分别保存在内部RAM的41H、42H单元。,解:程序如下:MOV A,40H;压缩BCD码送累加器 ANL A,#0FH;高4位清0,保留低4位 MOV 41H,A;保存低4位BCD码 MOV A,40H;取数据 A

46、NL A,#0F0H;低4位清0,保留高4位 SWAP A;高低位交换 MOV 42H,A;保存高4位BCD码,例3-19:编写程序,将A的低5位传送到P1的低5位,但保持P1的高3位不变,A的内容也保持不变。参考程序:PUSH ACC ANL A,#00011111B ANL P1,#11100000B ORL P1,A POP ACC,作用:改变程序的执行顺序。分为四大类:无条件转移指令;条件转移指令;调用指令;返回指令。,3.5 控制转移类指令,3.5.1 无条件转移指令,1、长转移指令 LJMP addr16;转移范围 64KB2、绝对转移指令 AJMP addr11;转移在2KB范围

47、内 3、短转移指令 SJMP rel;-128B127B,实际使用时addr16、addr11、rel常用符号地址(标号)表示。LOOP:SJMP LOOP 等价于 SJMP$,3.5.2 条件转移指令所谓条件转移是指程序的转移是有条件的,当条件满足时,就按指令给定的相对偏移量进行转移;否则,程序顺序执行。,1、累加器判零转移指令 JZ rel;若(A)=0,则转移,否则顺序执行。JNZ rel;若(A)0,则转移,否则顺序执行。不影响任何标志位。,2、比较转移指令 CJNE A,#data,rel CJNE A,direct,rel CJNE Rn,#data,rel CJNE Ri,#da

48、ta,rel,功能:比较两个操作数是否相等,不相等则转移;相等则顺序执行。第一操作数第二操作数,则(Cy)=0;第一操作数第二操作数则(Cy)=1。,例:将外部RAM的一个数据块(首地址为DATA1)传送到内部数据RAM(首地址为DATA2),遇到传送的数据为零时停止传送,试编程。,解:MOV R0,#DATA2 MOV DPTR,#DATA1 LOOP1:MOVX A,DPTR JZ LOOP2 MOV R0,A INC R0 INC DPTR SJMP LOOP1LOOP2:SJMP LOOP2,【例】编程判断内部RAM 30H单元中的数据是奇数还是偶数,如果是偶数,程序转向PROG0处,

49、如果是奇数程序转向PROG1处(0按照偶数对待)。解:程序如下:MOV A,30H;数据送累加器 ANL A,#01H;高7位清0,保留最低位 JZ PROG0;如果全为0说明是偶数,转向PROG0 SJMP PROG1;数据为奇数,转向PROG1,3、减1不为0转移指令 DJNZ Rn,rel;DJNZ direct,rel;本指令也为双功能指令,即减1操作和判断转移操作。第一操作数内容减1后,若差值不为零,则转移;否则顺序执行。,例3-21:编写程序,将内部RAM从20H开始的20B数据传送到外部RAM从2000H开始的对应单元中。,解:MOV R1,#20H MOV DPTR,#2000

50、H MOV R2,#20 LOOP:MOV A,R1 MOVX DPTR,A INC R1 INC DPTR DJNZ R2,LOOP SJMP$,【例】统计片内RAM中30H单元开始的20个数据中0的个数,放于R7中。程序:MOV R0,#30H MOV R2,#20 MOV R7,#0 LOOP:MOV A,R0 CJNE A,#0,NEXT INC R7 NEXT:INC R0 DJNZ R2,LOOP,3.5.3 子程序调用与返回指令,1、绝对调用指令 ACALL addr11;绝对调用 2、长调用指令 LCALL addr16 3、一般子程序返回指令 RET;调用子程序返回;4、中断

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号