单片机原理与接口技术复习重点_第1页
单片机原理与接口技术复习重点_第2页
单片机原理与接口技术复习重点_第3页
单片机原理与接口技术复习重点_第4页
单片机原理与接口技术复习重点_第5页
已阅读5页,还剩164页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

51子系列的主要特点为:◆8位CPU。◆片内带振荡器,频率范围1.2~12MHZ。◆片内带256字节的数据存储器。◆片内带4K的程序存储器。◆程序存储器的寻址空间为64K字节。◆片外数据存储器的寻址空间内64K字节。◆128个用户位寻址空间。

2.1.1单片机内部结构CPURAMROM中断系统串行口并行口定时计数器振荡电路X1X2P0P1P2P3TXDRXDINT0INT1T0T1图2-1MCS-51系列单片机的基本结构图1.微处理器即CPU,包括运算器和控制器。(1)运算器ALU:进行算术或逻辑运算部件;(2)控制器:产生各种控制信号,控制计算机工作的部件。2.内部数据存储器共有256B(00H~FFH),其中低128B(00H~7FH)用户使用;高128B(80H~FFH)为专用寄存器。3.内部程序存储器

8051有4KB(0000H~0FFFH)ROM,用于存放程序、原始数据或表格常数。4.定时器/计数器

2个16位定时/计数器。5.并行I/O口共有4个8位I/O口(P1、P2、P3、P4)。6.串行口

1个全双工的异步串行口,实现串行数据传送。7.中断控制系统

2个外中断、2个定时/计数中断和1个串行口中断。8.时钟电路为单片机产生时钟脉冲序列,1.2MHz~12MHz。2.1.2MCS-51的引脚功能MCS-51单片机的40引脚双列直插式(DIP)封装结构如下图。XTAL1:时钟电路引脚XTAL2:时钟电路引脚RST/VPD:复位/备用电源EA:外部程序存储器使能端

0——外部程序存储器

1——片内→片外ALE:低8位地址锁存使能端PSEN:外部程序存储器选通信号表2-1P3各口线的第二功能表P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P3.0P3.1P3.2P3.3P3.4P3.5P3.6P3.7PSENEAALERST用户I/O控制总线(CB)锁存器A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0D7D6D5D4D3D2D1D0地址总线数据总线(AB)(DB)VccVssVccVss片外总线结构1.数据总线数据总线宽度为8位,由P0口直接提供。2.地址总线地址总线宽度为16位,寻址范围都为64KB。由P0口经地址锁存器提供低8位(A7~A0),P2口提供高8位(A15~A8)而形成。可对片外程序存储器和片外数据存储器寻址。3.控制总线控制总线由第二功能状态下的P3口和4根独立的控制线RST、EA、ALE和PSEN组成。2.3存储器组织(a)外部ROM内部ROM(EA=1)外部ROM(EA=0)0000H0000H0FFFH0FFFH1000HFFFFH7FH80HFFH00H外部RAM(64KB)0000HFFFFH内部128BRAM特殊功能寄存器(21个SFR)(c)(b)2.3.1MCS-51储存器特点物理上分为:4个空间,即片内ROM、片外ROM

片内RAM、片外RAM逻辑上分为:3个空间,即程序内存(片内、外)统一编址MOVC

数据存储器(片内)MOV

数据存储器(片外)MOVX2.3.2片内数据存储器1、片内数据存储器低128B

(字节地址为00H~7FH)(1)通用寄存器区00H~1FHR0~R7;单片机复位后自动选择工作寄存器0区。8051的片内8位地址寻址,寻址范围为256个单元(00H~FFH)RS1RS0工作寄存器组000组(00H~07H)011组(08H~0FH)102组(10H~17H)113组(18H~1FH)(2)位寻址区20H~2FH:可进行128位的位寻址(3)用户RAM区30H~7FH:用户RAM区,字节寻址,用作数据缓冲区以及堆栈区。表2-38051RAM区位地址分配表(1)位寻址区的访问

SETB7FH;7FH←1

等价于SETB2FH.7两点说明:(2)堆栈堆栈是在内存RAM中开辟的一个特定的存储区,专门用来暂存数据或断点地址,并按照“先进后出,后进先出”的原则进行操作。

栈底是固定的,栈顶会自动地向地址递增的方向变化。

系统复位后,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,后写入数据;数据出栈时,先读出数据,后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——寄存器区选择控制位。

00:0区R0~R701:1区R0~R710:2区R0~R711:3区R0~R7(5)数据指针DPTRDPTR为16位寄存器,也可按两个8位寄存器使用:

DPH:DPTR高位字节

DPL:DPTR低位字节(6)程序计数器PCPC用于存放下一条执行的指令地址,是一个16位专用寄存器,可寻址64KB。

PC有自动加1的功能,PC没有地址,不可寻址。复位后,PC=0000H。67H=01100111B58H=01011000B01100111B+01011000B10111111=0BFH

则执行后累加器A中的值为0BFH,由相加过程得Cy=0、AC=0、OV=1、P=1。

例:试分析下面指令执行后,累加器A,标志位Cy、AC、OV、P的值?

MOVA,#67HADDA,#58H分析:第一条指令执行时把立即数67H送入累加器A,第二条指令执行时把累加器A中的立即数67H与立即数58H相加,结果回送到累加器A中。加法运算过程如下:2.3.3片内程序存储器寻址范围:0000H~FFFFH容量64KB,即地址长度:16位

,寻址内部ROM;

,寻址外部ROM。

当PC值超过片内ROM容量时会自动转向外部存储器空间。8031单片机接低电平。作用:

存放程序及程序运行时所需的常数。0000H——系统复位,PC指向此处;0003H——外部中断0入口000BH——T0溢出中断入口0013H——外中断1入口001BH——T1溢出中断入口0023H——串口中断入口

1.P0口(P0.0~P0.7,39~32脚)为三态双向口(1)P0口作地址/数据复用总线使用(低8位)(2)P0口作通用I/O端口使用(3)P0口线上的“读—修改—写”功能2.P1口(P1.0~P1.7、1~8脚)准双向口3.P2口(P2.0~P2.7,21~28脚)准双口(1)P2口作通用I/O端口使用(2)P2口作地址总线口使用(高8位)4.P3口(P3.0~P3.7、10~17脚)双功口(1)P3口作第一功能口(通用I/O端口)使用(2)P3口作第二功能口使用2.4并行I/O端口多路开关1)功能:用于控制选通I/O方式还是地址/数据输出方式控制信号为0,I/O状态;控制信号为1,地址/数据总线2)方式控制:由内部控制信号产生1个输出锁存器锁存,就是把信号暂存以维持某种电平状态

2个输入缓冲器(BUF1和BUF2)将外设送来的数据暂时存放

I/O驱动器2.4并行I/O端口共有4个8位双向I/O口,共32口。每位均有自己的锁存器,输出驱动器和输入缓冲器。BUF2BUF1QQDCVcc控制AD0P0R1

P0R2D0P0W图1P0口内部结构读锁存器读引脚锁存器内部总线写锁存器地址/数据P00多路开关102.4.1P0口位图内部结构(1)通用输出此时必须外接上拉电阻。(2)通用输入①读引脚:CPU在执行“MOV”类输入指令时(如:MOVA,P0),内部产生的操作信号是“读引脚”。P0.X引脚上的数据经过缓冲器2读入到内部总线。1、P0口作通用I/O口使用2、P0口作地址/数据总线不必外接上拉电阻。②读锁存器:CPU在执行“读-改-写”类输入指令时(如:ANLP0,A),锁存器中的数据经过缓冲器1送到内部总线,然后与A的内容进行逻辑“与”,结果送回P0锁存器并出现在引脚。注意:在读引脚时,必须先向电路中的锁存器写入1。

MOVP0,#0FFHMOVA,P0P1口内部结构如下图所示输出部分有内部上拉电阻R*约为20K。其他部分与P0端口使用相类似(读引脚时先写入1)。写数据读端口MOVP1,#0FFHJNBP1.1,$CLRP1.02.4.2P1口内部结构2.4.3P2口内部结构说明:1、P2可以作为通用的I/O,也可以作为高8位地址输出。2、当控制信号为1时P2口输出地址信息,此时单片机完成外部的取指操作或对外部数据存储器16位地址的读写操作。3、当P2口作为普通I/O口使用时用法和P1口类似。2.4.4P3口内部结构说明:1、做普通端口使用时,第二功能应为“1”。2、使用第二功能时,输出端口锁存器应为“1”。3、第二功能()

P3.0TXDP3.4T0P3.1RXDP3.5T1P3.2INT0P3.6WRP3.3INT1P3.7RD1输出I/O口1读I/O口112.5.2时序定时单位1、振荡周期:也称为节拍(用P表示),Tosc=1/fosc2、状态周期:用S表示,是振荡周期的2倍,分为P1和P2两个节拍。3、机器周期:CPU完成一个基本操作所需要的时间。执行一条指令分为几个机器周期。每个机器周期完成一个基本操作。MCS-51单片机每12个振荡周期为一个机器周期。4、执令周期:即从取指到执行完一条指令所需时间。CPU执行一条指令的各个微操作所对应时间顺序称为CPU时序。S1S2S3S4S5S6S1S2P1P2P1P2P1P2P1P2P1P2P1P2P1P2P1P2fosc一个状态周期一个机器周期T=12*(1/fosc)X28031对片外RAM和ROM的连接(1)对片外ROM的读操作

MOVCA,@A+DPTR(2)对片外RAM的写操作

MOVX@DPTR,A第一阶段是根据程序计数器PC到片外ROM中取指令码;第二阶段是对累加器A和DPTR中16位地址进行运算,并把运算得到的和的地址去片外ROM取出所需要常数送到累加器A。读片外ROM的指令时序:MOVCA,@A+DPTR读片外RAM的指令时序:MOVXA,@DPTR第一阶段是根据PC中地址读片外ROM中指令码E0H;第二阶段是根据DPTR中地址读片外RAM,并把读出的数X送往累加器A。在读片外RAM时,PSEN被封锁为高电平,RD有效,用作片外RAM的选通信号。2.6MCS-51单片机工作方式2.6.1复位电路与复位方式1、复位方式在RST/VPD端持续给出2个机器周期的高电平就可以完成复位操作(一般复位正脉冲宽度大于10ms)。使单片机内各寄存器的值变为初始状态的操作称为复位。00HTCON0000HPC

00HTMOD0×××0000BPCON0×000000BIE不定SBUF

××000000BIP00HSCON0FFHP0~P300HTH10000HDPTR00HTL107HSP00HTH000HPSW00HTL000HACC复位状态寄存器复位状态寄存器1、8051的引脚RST是____(IN脚还是OUT脚),当其端出现____电平时,8051进入复位状态;复位后PC=_____。8051一直维持这个值,直到RST脚收到___电平,8051脱离复位状态,进入程序运行状态。2、MCS-51单片机的CPU每取一个指令字节,立即使()A.堆栈指针SP自动加1B.数据指针DPTR自动加1C.程序计数器PC自动加1D.累加器A自动加13.MCS-51单片机的主程序应该从哪个单元开始存放?为什么?4、单片机上电后或复位后,工作寄存器R2是在(

A、0区01H单元

B、0区02H单元

C、0区0BH单元

D、SFR

5.8051复位后,PC与SP的值为(

A、0000H,00H

B、0000H,07H

C、0003H,07H

D、0800H,00H

知识总结1、掌握寻址方式2、掌握指令的含义和使用方法,做到程序注释清晰准确。

第三章MCS-51单片机指令系统3.1.3寻址方式及寻址空间寻址方式即寻找操作数存放单元的地址的方式,共7种方式。1、立即寻址方式所谓立即寻址,就是指令中直接给出参与操作的数据本身,即操作数出现在指令中,用“#”作前缀。

MOVA,#40HFFHROM74H40HSFRFFHAFAHRAMFFH06HSFRFFHA06H32H2、直接寻址方式所谓直接寻址,就是在指令中直接给出参与操作的数据所在内部RAM单元的地址。

MOVA,32H直接寻址方式中可以访问:(1)内部数据存储器的低128个字节单元(00H~7FH)。(2)特殊功能寄存器,特殊功能寄存器只能用直接寻址方式进行访问。3、寄存器寻址方式所谓寄存器寻址,就是操作数存放在指定的寄存器中。

MOVA,R7FAHRAMFFH22HSFRFFHA40HR740H规定:按字节访问特殊功能寄存器只能用直接寻址方式。

MOVA,P0等同于MOVA,80H寄存器寻址方式的寻址范围包括:通用工作寄存器——有4组共32个通用工作寄存器,R0~R7。部分专用寄存器——累加器A、B寄存器、DPTR寄存器。4、寄存器间接寻址方式指令中寄存器的内容作为操作数存放的地址,在工作上间接寻址寄存器前用“@”表示前缀。

MOVA,@R0FAHRAMFFH22HSFRFFHA40H40H22HR0寻址范围:(1)访问内部RAM低128个单元,其通用形式为@Ri(2)对片外数据存储器的64K字节的间接寻址,例如:MOVXA,@DPTR(3)片外数据存储器的低256字节例如:MOVXA,@Ri5、基址+变址寄存器间接寻址方式基地址寄存器DPTR或PC

变址寄存器A

该寻址方式常用于访问程序存储器,查表。如MOVCA,@A+DPTR56H

ROM

DPTR

+=2042H

2030H

12H

A

地址

56H56H说明:(1)本寻址方式是专门针对程序存储器的寻址方式,寻址范围可达到64KB。(2)本寻址方式的指令只有3条:

MOVCA,@A+DPTRMOVCA,@A+PCJMP@A+DPTR6、相对寻址把指令中给定的相对偏移量与本指令所在单元地址(PC内容)相加得到真正有效的操作数所存放的地址。例如(rel=75H)

2000H:SJMPrelPC=2000H

2

+75

PC=2077H

2077H

2002H

2001H

2000H

80H

75H

ROM

7.位寻址方式MCS-51有位处理功能,可以对数据位进行操作,例如: MOVC,40H是把位40H的值送到进位标志位C。目标地址=PC当前值+指令字节数+相对偏移量relrel是8位带符号数,正数则程序向下,负数向上转移,在程序中一般用标号代替。-128B~127BRn——工作寄存器R0~R7@Ri——间接寻址寄存器R0、R1direct——直接地址,包括内部128BRAM单元地址、

21个SFR地址。#data——8位常数;#data16——16位常数addr11——11位目的地址;addr16——16位目的地址rel——8位带符号的偏移地址DPTR——16位外部数据指针寄存器bit——可直接位寻址的位;/bit——指定位求反(x)——x中的内容((x))——x中的地址中的内容$——当前指令存放的地址

3.1.5指令系统标识符下列各条指令其源操作数的寻址方式是什么?(1)MOV A,#48H (2)ADD A,60H(3)ANL A,@R0(4)XCHDA,@R0(5)MOVXA,@DPTR(6)MOV A,R0(7)MOVCA,@A+DPTR(8)PUSHDPH3.2数据传送类指令使用最频繁的一类指令,通用格式:

MOV<目的操作数>,<源操作数>属“复制”性质,而不是“剪切”此类指令不影响标志位,Cy、Ac和OV,只影响奇偶标志位P。

1.以累加器为目的操作数的指令

MOVA,Rn;A←(Rn),n=0~7

MOVA,@Ri;A←((Ri)),i=0,1MOVA,direct;A←(direct)MOVA,#data;A←

#data3.2.1内部RAM单元之间的数据传送27H38H33HROME6HFFHFFHFFHASFRFFHR038H27HRAMMOVA,@R0

(E6H)27H40H33HROME5H40HFFHSFRFFHARAMFFHR540H27HMOVA

,40H;(E5H40H)例3-1:假设(R0)=30H,内RAM中(30H)=0F7H,(68H)=66H,给出执行每条指令后A的内容。

MOVA,R0MOVA,@R0MOVA,68HMOVA,#18;(A)=30H;(A)=0F7H;(A)=66H;(A)=182.以Rn为目的操作数的指令

MOVRn,A;Rn←(A),n=0~7MOVRn,direct;Rn←(direct),n=0~7MOVRn,#data;Rn←#data,n=0~7功能:是把源操作数的内容送入当前一组工作寄存器区的R0~R7中的某一个寄存器。例3-2:假设(A)=2FH,内RAM(36H)=0E6H,给出执行每条指令后的Rn的内容。

MOVR1,AMOVR7,36HMOVR4,#96H3.以寄存器间接地址为目的操作数的指令

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,AMOV@R1,36HMOV@R0,#564.以直接地址direct为目的操作数的指令

MOVdirect,A;direct←(A)

MOVdirect,Rn;direct

←(Rn),n=0~7MOVdirect1,direct2;MOVdirect,@Ri;direct

←((Ri))MOVdirect,#data;direct

←#data功能:把源操作数送入直接地址指出的存储单元。direct指的是内部RAM或SFR的地址。;(32H)=2FH;(32H)=0E6H;(30H)=38H例3-4:用3种方法将内RAM中30H单元的内容传送到40H单元。①MOV40H,30H②MOVR0,#30HMOV40H,@R0③MOVR0,#40HMOV@R0,30H5.以DPTR为目的操作数的传送指令

MOVDPTR,#data16;DPTR←#data16

唯一的16位数据的传送指令,立即数的高8位送入DPH,立即数的低8位送入DPL。40H33HROM87H45HFFH33HROMC0H40HFFHSFRFFHSPRAMFFH40H50H51H3.2.2堆栈操作指令

1)PUSHdirect2)POPdirect1、在MCS-51单片机的内部RAM中,可以设定一个先进后出的区域,称其为堆栈。2、在特殊功能寄存器中有一个堆栈指针SP,它指出栈顶的位置。3、执行操作:SP←(SP)+1((SP))←direct例PUSH40H(C0H)51H50H33HFFH40HROM87H45HFFHFFHROMD0H40HFFHSFRFFHSPRAM40H50H51H出栈指令的功能是:将SP所指出的内部RAM单元的内容送入由直接地址所指出的字节单元,接着将堆栈指针SP的内容减1。执行操作:direct←((SP))SP←(SP)-1例POP40H(D0H)51H50H3.2.2堆栈操作指令

1)PUSHdirect2)POPdirect3.2.3数据交换指令1.字节交换指令

XCHA,Rn (A)(Rn)

XCHA,direct (A)(direct)

XCHA,@Ri (A)

((Ri))2.半字节交换指令

XCHDA,@Ri(A)0~3

((Ri))0~33.累加器半字节交换指令

SWAPA (A)0~3

(A)4~7例3-6:假设(A)=12H,(R0)=34H,内RAM(34H)=56H,分析每条指令执行结果。

XCHA,@R0XCHDA,@R0SWAPA;(A)=56H;(A)=16H;(A)=21H51H33HFFH40HROM87H45HFFHFFHROMCFHFFHFFHSFRFFHARAMR750H51H51H33HXCHA,R7(CFH)F2HCDHFFH40HROM87H45HFFHFFHROMC5H32HFFHSFRFFHARAM32H50H51HCDHF2HXCHA,32H(C5H32H)B6HCDH44H40HROM87H45HFFHROMC7HFFHFFHSFRFFHARAMR144H45HCDHB6HXCHA,@R1(C7H)3.2.4累加器A与外部数据存储器传送指令ROM93HFFH01HSFRDPH20HDPL33HA89HFFH2001H89H外RAM1、读外部RAM或外部I/O口的指令

MOVXA,@DPTR

;A←((DPTR)),读外部RAM/IOMOVXA,@Ri

;A←((Ri)),读外部RAM/IO2、写外部RAM或外部I/O口的指令

MOVX@DPTR,A

;((DPTR))←(A),写外部RAM/IOMOVX@Ri,A

;((Ri))←(A),写外部RAM/IO注意:RD或WR信号有效。(1)采用DPTR间接寻址,高8位地址(DPH)由P2口输出,低8位地址(DPL)由P0口输出。(2)采用Ri(i=0,1)间接寻址,可寻址片外256个单元的数据存储器。Ri内容由P0口输出。3.2.5累加器A与ROM的数据传送指令(查表指令)

汇编指令格式机器指令格式操作MOVCA,@A+DPTR 93HPC←(PC)+1,A←((A)+(DPTR))MOVCA,@A+PC 83HPC←(PC)+1,A←((A)+(PC))注意:前一条指令只能查找指令所在位置256B范围内的代码或常数,后一条指令查表范围可达整个程序存储器的64KB空间。例3.7在程序存储器中有一平方表,从2000H单元开始存放,如图所示,试通过查表指令查找出6的平方。812009H642008H492007H362006H252005H162004H92003H42002H12001H02000H解:采用DPTR作为基址寄存器的查表程序比较简单,查表范围大,也容易理解。只要预先使用一条16位数据传送指令,把表的首地址2000H送入DPTR,然后进行查表就可以了。相应的程序如下:MOVA,#6 ;设定备查的表项MOVDPTR,#2000H;设置DPTR为表始址MOVCA,@A+DPTR;将A的平方值查表后送A

如果需要查找其他数的平方,只需要将累加器A的内容(变址)改一下即可。上述指令不影响任何标志位,但PSW的P位除外。注意:MOVRn,RnMOV@Ri,@RiMOVRn,@RiMOV#data,A

等等指令是非法指令。

×哇!好容易出错啊!×××练习:写出完成下列功能的程序段(1)将R0的内容送R6中

MOVA,R0MOVR6,A(2)将片内RAM30H单元的内容送片外60H单元中

MOVA,30HMOVR0,#60HMOVX@R0,A(3)将片处RAM1000H单元的内容送片内20H单元中

MOVDPTR,#1000HMOVXA,@DPTRMOV20H,A(4)将ROM2000H单元的内容送片内RAM的30H单元中

MOVA,#0MOVDPTR,#2000HMOVCA,@A+DPTRMOV30H,A考试例题已知(A)=83H,(R0)=17H,(17H)=34H,试写出80C51执行下列程序段后,A的内容(要求写出分析过程)。

ANLA,#17HORL17H,AXOLA,@R0CPLA3.3算术运算类指令1、不带进位的加法指令

ADDA,Rn;A←

(A)+(Rn),n=0~7ADDA,@Ri;A←

(A)+((Ri)),i=0,1ADDA,direct;A←

(A)+(direct)ADDA,#data;A←

(A)+data加法运算影响PSW运算标志位(Cy、AC、P及OV)的状态。例3-9:设(A)=0B3H,(R1)=56H,分析指令“ADDA,R1”执行后的结果。3.3.1加法指令运算结果为(A)=?,(Cy)=?(AC)=?(OV)=?,(P)=?10110011B+

01010110B100001001B进位溢出标志位OV的判断:Cy⊕Cy-1=1表示溢出。2DHROM87HFFHROM24H30HFFHSFRFFHA2DH+F3H30HB6H44H40HRAMR130H31HB6H2DHROM87HFFHROM24H30HFFHSFRFFHA2DH+F3H30HB6H44H40HRAMR044H45HB6HADDA,@R0

ADDA,30H

说明:①Cy反映两个无符号数运算是有无进位的特征。②OV反映两个带符号数运算时有无溢出的特征。③将两数看作无符号还是带符号数,完全是事先约定的,编程者必须心中有数,并可随时查询标志,获得正确的结果。

2.带进位加法指令

ADDC A,Rn ;A←(A)+(Rn)+Cy,n=0~7ADDC A,direct ;A←(A)+(direct)+CyADDC A,@Ri ;A←(A)+(Ri)+Cy,i=0,1ADDC A,#data ;A←(A)+#data+CyCDHROM87HFFHROM34H30HFFHSFRFFHACDH+FDH30H0001100FFHPSW1+1FFHFEH0ADDCA,#30H例3-11:设内部RAM30H~32H有3个单字节的无符号数,求和并将和的低字节送入33H单元,高字节送入34H单元。

MOVA,30HADDA,31HMOV33H,AMOVA,#00HADDCA,#00HMOV34H,AMOVA,33HADDA,32HMOV33H,AMOVA,34HADDCA,#00HMOV34H,A3.加1指令

INCAINCRn;n=0~7INCdirectINC@Ri;i=0,1INCDPTR例3-12:设(R0)=7EH,(DPTR)=10FEH,内RAM(7EH)=0FFH,(7FH)=38H,分析下列指令顺序执行的情况。

INC@R0INCR0INC@R0INCDPTRB6H35H+1B7H0B6H30HRAM34H35H30HR0B6HINC34H

加法举例:

01100101(65)

+)10010111

(97)

11111100

+)01100110

(加66调整)

101100010(162)4.十进制调整指令指令格式:DAA调整的方法是把结果加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数。解:

MOVA,#56HADDA,#67HDAA注意:1)DA指令只能跟在加法指令后面使用;

2)调整前参与运算的两数是BCD码数;1.带借位的减法指令

SUBBA,Rn;A←(A)-(Rn)-Cy,n=0~7SUBBA,direct;A←(A)-(direct)-CySUBBA,@Ri;A←(A)-((Ri))-Cy,i=0,1SUBBA,#data;A←(A)-#data-Cy功能:从累加器A中的内容减去指定的变量和进位标志Cy的值,结果存在累加器A中。3.3.2减法指令CDHROM87HFFHROM34H30HFFHSFRFFHACDH-9DH30H0001100FFHPSW1-1FFH9CH0FFHB6H30HRAM34H35HB6H30HSUBBA,35H假设外部数据存储器1000H单元的内容为28H,PSW的内容为82H,执行指令序列后,A的内容为

,CY的内容为

,AC的内容为

,OV的内容为

MOVDPTR,#1000HMOVXA,@DPTRMOVR6,#0FAHSUBBA,R6

2DH1102、减1指令

DECA ;(A)-1→A DECRn ;(Rn)-1→Rn,n=0~7 DECdirect ;(direct)-1→direct DEC@Ri ;((Ri))-1→(Ri),i=0,1说明:减1指令不影响标志位。CDHROM87H35HROM04HSFRFFHACDH-1FFH0001100FFHPSW11FFHCCH0B6H30HRAM34H35HB6H30HR0DECA例:试编程计算5678H-1234H的值,结果保存在R6、R5中。解:减数和被减数都是16位二进制数,计算时要先进行低8位的减法,然后再进行高8位的减法,在进行低8位减法时,不需要考虑借位,所以要在减法指令之前将借位标志清0。程序如下:

MOVA,#78H ;被减数低8位送累加器

CLRC ;清进位标志位CySUBBA,#34H ;减去减数

MOVR5,A ;保存低8位

MOVA,#56H ;被减数高8位送累加器

SUBBA,#12H ;减去减数

MOVR6,A ;保存高8位3.3.3乘法指令(无符号数)MULAB;A←(A)×(B)低字节

;B←(A)×(B)高字节注意:若乘积大于0FFH,则OV置1,否则清0(此时B的内容为0)。Cy总是被清0。该操作也影响标志位P。02HROM87HFFHROM24H30HFFH×00H30H06HFFH02HSFRAB06H0CH0CH00H0001100PSW013.3.4除法指令DIVAB;A←(A)/(B)(商);B←(A)/(B)(余数)注意:若除数(B)=00H,则结果无法确定,则OV置1。Cy总是被清0。该操作也影响标志位P。3.4.1单操作数逻辑操作指令1、CLRA;(A)←

02、CPLA;A中8位按位求反3.4逻辑运算类指令SFRA11010100110101003、累加器A循环左移指令

RLA4、累加器A带进位循环左移指令

RLCA00SFRA110101011010100PSW101010010101005、累加器A循环右移指令

RRA6、累加器A带进位循环右移指令

RRCA00PSW1010100010100SFRA1101010110101003.4.2双操作数逻辑运算指令1、逻辑“与”指令ANLA,Rn;(A)(A)∧(Rn),以下类同。ANLA,directANLA,@RiANLA,#dataANLdirect,AANLdirect,#data

例、(P1)=35H,使其高4位输出0,低4位不变。解:ANLP1,#0FH

此做法称为“屏蔽”位。

2、逻辑“或”指令ORLA,Rn;(A)(A)∨(Rn),以下类同。ORLA,directORLA,@RiORLA,#dataORLdirect,AORLdirect,#data例、将A中的低3位送入P1中,并且保持P1中高5位不变。ANLA,#07HANLP1,#0F8HORLP1,A;(P1)=P17P16P15P14P13A2A1A0这称为“数位组合”。

3、逻辑“异或”指令XRLA,Rn;(A)(A)⊕(Rn),以下类同。XRLA,directXRLA,@RiXRLA,#dataXRLdirect,AXRLdirect,#data例、设(P1)=0B4H=10110100B,执行:

XRLP1,#00110001B

结果按#00110001取反,即:(P1)=10000101B=85H这称为“指定位取反”。

【问】写出完成下列功能的指令段。1.对累加器A中的1、3、5位清0,其余位不变

ANLA,#11010101B2.对累加器A中的2、4、6位置1,其余位不变

ORLA,#01010100B3.对累加器A中的0、1位取反,其余位不变

XRLA,#00000011B【例】拆字程序:在内部RAM40H单元保存有以压缩BCD码表示的2位十进制数,编程将它们拆开,分别保存在内部RAM的41H、42H单元。解:程序如下:

MOVA,40H ;压缩BCD码送累加器

ANLA,#0FH ;高4位清0,保留低4位

MOV41H,A ;保存低4位BCD码

MOVA,40H ;取数据

ANLA,#0F0H ;低4位清0,保留高4位

SWAPA ;高低位交换

MOV42H,A ;保存高4位BCD码例3-19:编写程序,将A的低5位传送到P1的低5位,但保持P1的高3位不变,A的内容也保持不变。参考程序:

PUSHACCANLA,#00011111BANLP1,#11100000BORLP1,APOPACC小结:

1、逻辑操作分为哪两类操作?

2、循环移位指令每执行一次,移几位?

3、ANL、ORL、XRL指令有哪些使用技巧?

作用:改变程序的执行顺序。分为四大类:无条件转移指令;条件转移指令;调用指令;返回指令。3.5控制转移类指令3.5.1无条件转移指令1、长转移指令

LJMPaddr16;转移范围64KB2、绝对转移指令

AJMPaddr11;转移在2KB范围内3、短转移指令

SJMPrel;-128B~127B实际使用时addr16、addr11、rel常用符号地址(标号)表示。LOOP:SJMPLOOP等价于SJMP$3.5.2条件转移指令所谓条件转移是指程序的转移是有条件的,当条件满足时,就按指令给定的相对偏移量进行转移;否则,程序顺序执行。1、累加器判零转移指令

JZrel;若(A)=0,则转移,否则顺序执行。

JNZrel;若(A)≠

0,则转移,否则顺序执行。

不影响任何标志位。

2、比较转移指令

CJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel功能:比较两个操作数是否相等,不相等则转移;相等则顺序执行。第一操作数≥第二操作数,则(Cy)=0;第一操作数<第二操作数则(Cy)=1。例:将外部RAM的一个数据块(首地址为DATA1)传送到内部数据RAM(首地址为DATA2),遇到传送的数据为零时停止传送,试编程。解:MOVR0,#DATA2MOVDPTR,#DATA1LOOP1:MOVXA,@DPTRJZLOOP2MOV@R0,AINCR0INCDPTRSJMPLOOP1LOOP2:

SJMPLOOP2【例】编程判断内部RAM30H单元中的数据是奇数还是偶数,如果是偶数,程序转向PROG0处,如果是奇数程序转向PROG1处(0按照偶数对待)。解:程序如下:

MOVA,30H ;数据送累加器

ANLA,#01H ;高7位清0,保留最低位

JZ PROG0 ;如果全为0说明是偶数,转向PROG0SJMPPROG1 ;数据为奇数,转向PROG13、减1不为0转移指令

DJNZRn,rel;

DJNZdirect,rel;本指令也为双功能指令,即减1操作和判断转移操作。第一操作数内容减1后,若差值不为零,则转移;否则顺序执行。例3-21:编写程序,将内部RAM从20H开始的20B数据传送到外部RAM从2000H开始的对应单元中。解:MOVR1,#20HMOVDPTR,#2000HMOVR2,#20LOOP:MOVA,@R1MOVX@DPTR,AINCR1INCDPTRDJNZR2,LOOPSJMP$【例】统计片内RAM中30H单元开始的20个数据中0的个数,放于R7中。程序:MOVR0,#30H MOVR2,#20 MOVR7,#0LOOP:MOVA,@R0 CJNEA,#0,NEXT INCR7NEXT:INCR0 DJNZR2,LOOP小结:1、无条件转移指令共有几条?2、CJNE指令与DJNZ指令有何区别?

3.5.3子程序调用与返回指令1、绝对调用指令

ACALLaddr11;绝对调用

2、长调用指令

LCALLaddr163、一般子程序返回指令

RET;调用子程序返回;4、中断子程序返回指令

RETI;中断子程序返回。通常把逻辑上相对独立或具有通用意义的某段程序编写成子程序。调用子程序需要解决的两个问题:①保护断点所谓断点是指取出调用指令后当前PC的内容,即调用指令下面第一条指令的首地址。②建立子程序入口子程序入口地址是指子程序中第一条指令的首地址。执行结果:(SP)=09H,(09H)=21H,(08H)=03H,(PC)=3456H例:设(SP)=07H,(PC)=2100H,子程序首地址为3456H,执行:

LCALL3456HMOVA,20H

……3.5.3空操作指令

NOP;不执行任何操作,仅仅使(PC)+1,继续执行下条指令,不影响标志位,在ROM中占一个字节。用于延时调整。例:设(SP)=0BH,(0AH)=23H,(0BH)=01H

执行:RET

(PC)=0123H(返回主程序)结果:(SP)=09H,【例】利用DJNZ指令和NOP指令编写一循环程序,实现延时1ms(晶振频率为12MHz)。解:程序如下:

DELAY:MOV R1,#0AH ;1µsLOOP:MOV R2,#30H ;1µs DJNZ R2,$ ;2×48µs DJNZ R1,LOOP ;1µs×(1+2×48+2)×10 NOP ;1µs NOP ;1µs NOP ;1µs NOP ;1µs NOP ;1µs RET ;2µs总的延时时间为:1+(1+2×48+2)×10+7=998µs,若再加上调用本子程序的调用指令所用的时间2µs共1000µs,即1ms。包括:位传送指令、条件转移指令、位运算指令。位操作由单片机内布尔处理器来完成。位地址的四种表示:1)使用直接位地址表示;如20H、30H、33H等;2)点操作符表示方式:如20.0、30.4、PSW.4、P0.5等;3)位名称形式:如C、OV等;4)标号表示(自定义地址)方式:如“L1BITPSW.5”。3.6位操作类指令3.6.1位传送指令

MOVC,bitMOVbit,C

功能:(C)←(bit);或(bit)←(C)

例:设(P1)=00111101B,(P3)=11000101B,执行下面两条指令

MOVC,P3.3MOVP1.2,C结果(P3)=11000101B,(Cy)=0,(P1)=00111001B3.6.2置位和复位指令

CLRbit;(bit)←

0SETBbit;(bit)←

1CPLb

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论