单片机原理及应用PPT全套教学课件_第1页
单片机原理及应用PPT全套教学课件_第2页
单片机原理及应用PPT全套教学课件_第3页
单片机原理及应用PPT全套教学课件_第4页
单片机原理及应用PPT全套教学课件_第5页
已阅读5页,还剩495页未读 继续免费阅读

下载本文档

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

文档简介

单片机原理及应用课程内容硬件结构指令系统外部功能扩展编程技术应用基础教材:单片机中级教程——原理与应用(第2版),张俊谟编著,北京航空航天大学出版社Onlinebook:Title:

ArchitectureandProgrammingof8051MicrocontrollersAuthor:

MilanVerle48学时,其中实验12学时字母分制实验30%,期末考试70%第一章绪论计算机的新分类■

长期以来人们按照计算机的体系结构、运算速度、结构规模、适用领域,将其分为

大型计算机、中型机、小型机和微型计算机。■随着计算机技术的迅速发展,计算机技术和产品对其它行业的广泛渗透,人们以应用为中心、按计算机的嵌入式应用和非嵌入式应用进行新的分类,将其分为

嵌入式计算机

和通用计算机。

通用计算机具有计算机的标准形态,通过装配不同的应用软件,以类同面目出现,并应用在社会的各个方面,其典型产品为PC机;

嵌入式计算机则是以嵌入式系统的形式隐藏在各种装置、产品和系统中。什么是嵌入式系统

嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、针对具体应用系统、对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。嵌入式计算机在应用数量上远远超过了各种通用计算机,一台通用计算机的外部设备中就包含了5-10个嵌入式微处理器,键盘、鼠标、软驱、硬盘、显示卡、显示器、网卡、Modem、声卡、打印机、扫描仪、数字相机、USB集线器等均是由嵌入式处理器控制的。在制造工业、过程控制、通讯、仪器、仪表、汽车、船舶、航空、航天、军事装备、家电产品等方面无不是嵌入式计算机的应用领域。嵌入式系统的种类嵌入式系统的核心部件有以下三类:

(1)嵌入式微处理器(EmbeddedMicroprocessorUnit,EMPU):功能同标准的CPU,但在工作温度、电磁干扰、可靠性等方面做了各种增强。如:ARM

(2)嵌入式微控制器(MicrocontrollerUnit,MCU又称单片机)。80C51,MSP430

(3)嵌入式DSP处理器(EmbeddedDigitalSignalProcessor,EDSP):DSP处理器对系统结构和指令进行了特殊设计,使其适合于执行DSP算法,编译效率较高,指令执行速度也较高。什么是单片机?

微型计算机微型计算机系统的硬件部分通常由五部分组成:输入设备运算器输出设备控制器存储器

主板显卡声卡存储器接口网卡输入输出接口内存条CPU微型计算机

单硅晶片CPU存储器控制电路定时器时钟电路I/O口单片机单片机的特点体积小、重量轻、功耗低、功能强、性价比高。数据大都在单片机内部传送,运行速度快,抗干扰能力强,可靠性高。结构灵活,易扩展,易于开发,易于组成各种微机应用系统。受集成度限制,片内存储器容量较小,一般内ROM在8KB以下,内RAM在256B以内。应用广泛,既可用于工业自动控制等场合,又可用于测量仪器、医疗仪器、安防产品及家用电器等领域。工业控制中智能家用电器、智能仪器设备、数控机床、自动生产线、智能玩具、相关的数据采集处理显示等等。日常生活中常见的霓虹灯显示、比赛抢答器、报警器、电子时钟、点阵和液晶显示屏等等。消防等安防控制系统应用实例单片机的类型单片机通常按其微处理器字长的位数来分类,如4、8、16、32、64位单片机。4位机1971年Intel首先推出了4位微处理器芯片4004。此后各厂家相继推出4位机产品。因4位机每次只能处理一位BCD码数据,故只适于简单控制场合。但因其价廉,在家电等消费类产品中仍有广泛应用。单片机的类型8位机用途十分广泛。如显示、终端键盘、打印、字处理、工业控制等。市场占有率70%以上。功能丰富,品种齐全,通用性强。主要产品Intel

MCS51系列

80C51,AT89C51,AT89S51Motorola

MC6801系列Zilog

Z8系列AVR,PIC等单片机的类型16位机Intel

MCS-96系列Intel80C196MSP430系列32位机INTELi960系列ARM系列广泛应用于消费电子领域,可搭载嵌入式操作系统单片机的开发工具

硬件:

PC机、JTAG调试器、并口线(USB)、用户板PC机JTAG调试器

用户板JTAG接口单片机编程器及芯片插座单片机开发实验板MCS-51和80C51系列单片微机生产厂家:Intel主要产品:8051、80C51、8751、8031、8052、8032等,AT89C51特点:八位单片微机,引脚及指令系统兼容支持C语言编程,Keil

C51支持厂商:ATmel,Philip,东芝,三星,STC宏晶等单片机原理及应用第二章

单片机的基本结构与工作原理2.1

单片机的基本组成主要功能部件8位CPU片内4KB程序存储器片内128B数据存储器二十多个SFR四个可编程并行I/O口全双工串行I/O口2个16位定时/计数器5个中断源,2个优先级2.2

80C51单片机的引脚功能1、主电源引脚VCC

—(40脚):电源,+5VVSS

—(20脚):电路地电平2、外接晶振或外部振荡器引脚XTAL2

—(18脚):接内部反向放大器输出端,输入到内部时钟发生器。采用外部振荡器时,

CHMOS

—悬空80C51

HMOS

外部振荡信号输入XTAL1—(19脚):接内部反向放大器输入端。采用外部振荡器时,

CHMOS

外部振荡信号输入80C51

HMOS

接地。3、控制、选通引脚RST(9脚):RST为Reset(复位)信号输入端。ALE/PROG(30脚):ALE,允许地址锁存信号,输出。PROG,编程脉冲输入端。2个机器周期以上高电平负跳变锁存P0口低8位地址1/6振荡频率

PSEN(29脚):访问外部程序存储器选通信号,低电平有效。EA/VPP(31脚):EA,访问内部或外部程序存储器选择信号。

高电平,访问内部程序存储器。

低电平,访问外部程序存储器。VPP,片内EPROM(8751)编程电压输入端。4、多功能I/O口引脚P0口(32~39脚):8位双向并行I/O端口。低8位地址总线和数据总线复用。可带8个LSTTL负载P1口(1~8脚):8位准双向并行I/O端口可带4个LSTTL负载P2口(21~28脚):8位准双向并行I/O端口高8位地址总线可带4个LSTTL负载P3口(10~17脚):8位准双向并行I/O端口特殊第二功能P3.0----RXD:串行数据接收端P3.1----TXD:串行数据发送端P3.2----INT0:外部中断0请求端P3.3----INT1:外部中断1请求端P3.4----T0:定时/计数器0外部事件计数输入端P3.5----T1:定时/计数器1外部事件计数输入端P3.6----WR:外部数据存储器写选通P3.7----RD:外部数据存储器读选通2.3中央处理器CPU包括控制器、运算器和工作寄存器及时序电路。作用是读入及分析指令,控制各个部件进行指定的操作主要部件:算术/逻辑运算部件ALU布尔处理器定时/控制部件寄存器一、算术/逻辑运算部件ALU功能:实现数据的算术/逻辑运算、位变量处理和数据传送等操作二、专用寄存器累加器A:运算时的暂存寄存器寄存器B:一般用于乘、除指令,与A配合使用,存放第二操作数程序状态字寄存器PSW:8位寄存器,相当于8086的FLAGS。用于寄存当前指令执行后的状态。格式:76543210CyACF0RS1RS0OV—PPSW各位的定义Cy:高位进位标志位有进位或借位时,Cy=1;否则,Cy=0用作位累加器,用“C”表示AC:辅助进位标志低4位向高4位有进位或借位时,AC=1;否则,AC=0常用于BCD码调整F0:用户标志位RS1、RS0:选择工作寄存器组位用于选择内部数据存储器区内4组工作寄存器中的某一组OV:溢出标志位P:奇偶校验标志位根据累加器A中1的个数由硬件置位或清除奇数个1,P=1;否则,P=0PSW•1:保留位,无定义三、时钟电路及时序脉冲时钟电路作用:产生时序电位和时序脉冲产生方式:内部方式,利用片内的振荡器电路外部方式1)内部时钟方式片内振荡器等效电路外部谐振电路晶体或陶瓷谐振器1.2M~12MHZ补偿电容30PF或47PF2)外部时钟方式XTAL2悬空3)CPU的时序振荡周期即时钟周期,由晶振主频率决定,为其倒数机器周期单片机完成一个基本操作的时间一个机器周期包括12个振荡周期,分为6个状态,S1~S6;每个状态包含两个振荡周期,P1和P2。因此,80C51的时序可表示为S1P1,S1P2,……,S6P1,S6P2指令周期一条指令的执行时间一般为1~2个机器周期,乘除指令为4个机器周期设晶振主频率为12MHZ振荡周期为1/12μs,机器周期为1μs,指令周期为1μs、2μs、4μs2.4复位电路一、复位操作

引脚9RST/VPD:复位引脚复位电路RST斯密特触发器片内复位电阻两个机器周期以上高电平二、复位电路

1、上电复位电路复位引脚电压曲线2、开关自动复位电路2.5

80C51存储器

一、概述80C51存储器为哈佛结构,即程序存储器与数据存储器分开编址4个物理空间:内、外程序存储器,内、外数据存储器3个逻辑空间:64KB程序存储器,编址为0000H~FFFFH64KB外部数据存储器,编址为0000~FFFFH256B内部数据存储器,编址为00H~FFH二、存储器结构1、程序存储器保留单元,用于特定程序段0000H~0002H:程序的起始,一般存放一条绝对跳转指令例:LJMP0050H0003H~002AH:5个中断服务程序0003H外部中断0000BH定时器0溢出中断0013H外部中断1001BH定时器1溢出中断0023H串行口中断2、内部数据存储器256字节,编址为00H~FFH分为两部分00H~7FH:内部数据RAM80H~FFH:特殊功能寄存器区80C52内部RAM为256字节80H

FFH:RAM区和SFR区重合片内数据存储器地址空间80C52片内数据RAM位寻址区R7~R0

3组R7~R0

2组R7~R0

1组R7~R0

0组20H18H10H08H00H寄存器30H7FH80HFFH特殊功能寄存器(SFR)字节寻址07120127片内数据RAM地址空间片内数据RAM位寻址区R7~R0

3组R7~R0

2组R7~R0

1组R7~R0

0组20H18H10H08H00H寄存器30H7FH2FH00H7FH70H0FH字节寻址

构成布尔处理器的存储器空间

位地址为00H~7FH(0~127)例:MOVA,40H;将字节地址为40H的

8位数据送入累加器A

MOVC,40H;位地址为40H(字节地址为28H的第0位)的一位数据送入位累加器C2)20H~2FH可位寻址RAM区通过寻址方式与字节存储单元的访问区分3)30H~7FH内部RAM区只可字节寻址80C5280H~FFH数据RAM仅可间接寻址3、特殊功能寄存器区(SFR)地址范围80H~FFH21个特殊功能寄存器占用26个字节,其余单元无定义80C52:内部RAM与特殊功能寄存器地址重叠空间,依靠不同寻址方式实现区别访问RAM:间接寻址SFR:直接寻址1)程序计数器PC用于存放下一条要执行指令的地址可寻址范围为0~65535(64K)2)累加器A(E0H)

可位寻址3)寄存器B(F0H)

可位寻址4)程序状态字寄存器PSW(D0H)可位寻址5)I/O端口P0~P3

P0:80H P1:90HP2:A0H P3:B0H均可位寻址6)、堆栈指针SP(81H)8位专用寄存器,指示堆栈顶部在内部RAM中的位置,不可位寻址MCS-51堆栈为向上生长型如执行PUSHA操作复位后,SP=07H7)、数据指针DPTRDPH:83HDPL:82H不可位寻址特点:既可做16位,也可做两个8位寄存器使用例:MOVDPTR,#2000HMOVDPH,#20HMOVDPL,#00H8)、其它SFR略,见课本35页地址能被8整除的SFR,可位寻址可位寻址的地址单元X最高有效位用X·7表示最低有效位用X·0表示例:P3·7、P3·0片内数据存储器地址空间80C52片内数据RAM位寻址区R7~R0

3组R7~R0

2组R7~R0

1组R7~R0

0组20H18H10H08H00H寄存器30H7FH80HFFH特殊功能寄存器(SFR)字节寻址071201274、外部数据存储器最大扩展范围:64KB编址为:0000H~FFFFH访问指令:MOVX访问地址:由DPTR或R0、R1提供16位数据指针,寻址范围64K8位寄存器,提供低8位地址,高8位由P2口提供2.6布尔(位)处理器组成:位累加器Cy(PSW·7)位寻址寄存器(SFR可寻址位)位寻址I/O口位寻址内部RAM位寻址指令系统程序存储器(与8位CPU共用)寻址空间20H~2FH16个字节单元128位字节地址能被8整除SFR中可寻址位82位位操作指令置位清零求反传送判跳逻辑运算本章内容小结MCS-51硬件结构引脚功能中央处理器CPU时钟及复位电路MCS-51存储器布尔(位)处理器80C51最小系统80C51最小系统67

单片机原理及应用第三章80C51指令系统本章重点寻址方式指令格式操作结果及对标志位影响3.1概述分类数据传送类指令29数学运算类指令24逻辑运算类指令24控制转移类指令17位操作指令17111条指令按指令长度分类单字节指令双字节指令三字节指令指令执行时间12个振荡周期6424个振荡周期4548个振荡周期2指令格式标号:操作码[(目的操作数),(源操作数)];注释指令的符号地址由字母打头的字母数字串组成,长度一般不超过6个符号指令操作的性质用规定的汇编语言助记符表示指令操作的对象3.2寻址方式和寻址空间概念:说明操作数所在的位置(地址),把操作数提取出来的方法基本寻址方式:1、寄存器寻址 2、直接寻址3、寄存器间接寻址 4、立即寻址5、相对寻址 6、变址寻址7、位寻址一、寄存器寻址操作数—通用寄存器的内容表示符号—寄存器名称寻址范围工作寄存器Rn(R0~R7)寄存器ACC(累加器A)寄存器B,DPTR,位寄存器Cy7480C52片内数据RAM位寻址区R7~R0

3组R7~R0

2组R7~R0

1组R7~R0

0组20H18H10H08H00H寄存器30H7FH80HFFH特殊功能寄存器(SFR)RAM64KBFFFFH0000H片内数据存储器片外数据存储器ACCDPTRB二、直接寻址操作数—指令中直接地址的内容寻址范围:1、内部数据RAM的低128个字节单元2、特殊功能寄存器3、位地址空间通用符号:direct7680C52片内数据RAM

位寻址区R7~R0

3组R7~R0

2组R7~R0

1组R7~R0

0组20H18H10H08H00H寄存器30H7FH80HFFH特殊功能寄存器(SFR)RAM64KBFFFFH0000H片内数据存储器片外数据存储器三、寄存器间接寻址方式指令指定的寄存器内容为操作数地址间址寄存器—R0,R1,DPTR,SP寻址范围1、内部RAM的低128字节(00H~7FH)

@R0,@R1(@Ri,i=0,1)2、外部RAM的64KB(0000H~FFFFH)

@DPTR,@R0,@R1符号

@寄存器名3、堆栈区SP为间址寄存器7880C52片内数据RAM位寻址区R7~R0

3组R7~R0

2组R7~R0

1组R7~R0

0组20H18H10H08H00H寄存器30H7FH80HFFH特殊功能寄存器(SFR)RAM64KBFFFFH0000H片内数据存储器片外数据存储器四、立即寻址方式指令直接给出操作数,操作数为8位或16位二进制数,称立即数寻址范围程序存储器中的立即数通用符号:#data(8位),#data16(16位)五、相对寻址方式以PC当前值为基址,加上指令中给出的偏移量(rel)形成有效的程序转移地址。控制转移类指令转移范围:以PC当前值为起始地址,相对偏移在+127~-128个字节单元之间。偏移量rel

八位二进制补码1005H:JC80H执行过程:读指令,完成后(PC)=(PC)+2如C=1,则(PC)=(PC)+rel

转移至1007H-80H=0F87H单元如C=0则执行1007H单元中的指令后向128个单元前向127个单元1005H40H1006H80H1007H0F87H1086H六、变址间接寻址基址寄存器内容加上间址寄存器内容(地址偏移量)为有效地址基址寄存器:PC,DPTR变址寄存器:A寻址范围:程序存储器例:MOVCA,@A+DPTR

设A=11HDPTR=02F1H操作数地址为02F1H+11H=0302H操作:(0302H)A七、位寻址MCS-51设有独立的位处理器,位地址一般用直接位地址方式给出,可归入直接寻址方式寻址范围:位寻址内部RAM128位可位寻址的SFR82位位地址的表示方式:1、直接地址(位地址)2、位名称3、第几单元第几位,寄存器名+位4、用伪指令指定的符号地址通用符号bit例:PSW中F0(用户标志)可表示如下:D5HF0PSW.5AF(AFEQUF0)853.3指令系统3.3.1数据传送类指令按操作方式,分为三种:数据传送数据交换栈操作一、普通传送类指令格式:MOV(目的操作数),(源操作数)操作码助记符操作:将源操作数单元内容,传送到目的操作数单元中,源操作数内容不变。不影响标志位Cy,AC和OV。操作数的组合关系1、立即数的传送MOVA,#data(A)#dataMOVRn,#data(Rn)#dataMOV@Ri,#data((Ri))#dataMOVdirect,#data(direct)#dataMOVDPTR,#data16(DPTR)#data说明:a、MOVA,#data将8位立即数送入累加器A中例:MOVA,#80H操作结果:(A)=80Hb、MOVRn,#datan=0~7将8位立即数送入工作寄存器Rn中例:MOVR4,#80H操作结果:(R4)=80Hc、MOV@Ri,#data将8位立即数送入由Ri指定的地址单元中,i=0,1。Ri中的地址为00H~7FH(8051)00H~FFH(8052)注:仅寻址内部RAM,不能寻址SFR例:MOV@R0,#32H

设(R0)=70H,(70H)=11H执行结果:(70H)=32Hd:MOVdirect,#data将8位立即数送入由direct直接寻址的地址单元中。direct:00H~FFH,8位二进制地址码寻址内部RAM(00H~7FH)及SFR例:MOV70H,#70H

MOVP0,#70H

MOV80H,#70He:MOVDPTR,#data唯一的16位数据传送指令,把16位立即数送入DPTR中例:MOVDPTR,#2034H执行结果:(DPH)=20H

(DPL)=34H2、内部数据存储器与累加器A传送数据MOVA,direct(A)(direct)MOVdirect,A(A)(direct)MOVA,Rn(A)(Rn)MOVRn,A(A)(Rn)MOVA,@Ri(A)((Ri))MOV@Ri,A((Ri))(A)寻址方式的组合例:MOVR1,#82HMOVA,@R180C51指令错误因为82H是DPL的地址值,对于SFR,不能使用间接寻址方式正确指令:MOVA,DPL

或MOVA,82H80C52正确,寻址内部RAM3、内部数据存储器中Rn、SFR和片内数据RAM之间的数据传送MOVdirect,direct(direct目的)(direct源)MOVdirect,Rn(direct)(Rn)MOVRn,direct(direct)(Rn)MOVdirect,@Ri(direct)((Ri))MOV@Ri,direct((Ri))(direct)例1:设PSW中标志位RS1,RS0为“11”,则选中第三组工作寄存器MOV40H,R0MOV40H,18H结果相同用立即寻址指令为片内RAM中20H,25H和P1口上置数例2:MOV20H,#25HMOV25H,#10HMOVP1,#0CAH执行结果

(20H)=25H,(25H)=10H

(P1)=CAH将以上状态作为初值,执行以下程序,结果如何MOVR0,#20HMOVA,@R0MOVR1,AMOVB,@R1MOV@R1,P1MOVP3,P1(R0)=20H(A)=((R0))=(20H)=25H(R1)=(A)=25H(B)=((R1))=(25H)=10H((R1))=P1(25H)=CAHP3=P1=CAH(A)=?(R1)=?(B)=?(25H)=?(P3)=?(P1)=?(20H)=?25H25H10HCAHCAHCAH25H二、外部数据存储器的数据传送指令只能间接寻址,且只能与累加器A进行数据传送格式:MOVX(目的操作数),(源操作数)MOVXA,@DPTR(A)((DPTR))MOVX@DPTR,A((DPTR))(A)MOVXA,@Ri(A)((Ri))MOVX@Ri,A((Ri))(A)例:若片外数据存储单元中,(3007H)=60HMOVDPTR,#3007HMOVXA,@DPTR结果:(A)=60H使用Ri作间址寄存器,此时需用P2口输出高八位地址,应事先预置P2,Ri的值以下程序功能与上例相同:MOVP2,#30HMOVR0,#07HMOVXA,@R0三、程序存储器向累加器A传送指令—MOVCMOVCA,@A+PC(PC)(PC)+1(A)((A)+(PC)MOVCA,@A+DPTR(A)((A)+(DPTR))功能:把A中内容与基址寄存器(PC,DPTR)内容相加,求得程序存储器某单元地址,再将该地址单元内容送累加器A8位无符号整数说明:1、以PC作为基址寄存器,因为PC值不能任意更改,所以查表范围为PC当前值开始后的256字节。偏移量计算式:DIS=表首地址-(该指令所在地址+1)2、以DPTR作为基址寄存器,因为DPTR的内容可以通过赋值改变,使表格可以设置在64KB程序存储器的任意地址空间。例1:编制根据累加器A中的数(0~9)查其平方表的子程序。COUNT:PUSHDPH;保护DPTR内容

PUSHDPL;

MOVDPTR,#TABLE

;赋表首地址给DPTRMOVCA,@A+DPTR;根据A中内容查表

POPDPL;恢复DPTR内容

POPDPHRET;返回主程序ORG1000HTABLE:DB00DB01DB04DB09DB16DB25DB36DB49DB64DB81DB:伪指令,作用是把其后的值存入由标号开始的连续单元中例2:编子程序根据A中二进制数查其ASCII码BITOASC:ADDA,#02HMOVCA,@A+PCSJMPBARETDB30H,31H,32H,33HDB34H,35H,36H,37HDB38H,39H,41H,42HDB43H,44H,45H,46HRETTABLE:BARET:;加偏移量调整;查表;返回主程序四、数据交换指令1、字节交换指令XCHA,RnXCHA,directXCHA,@Ri(A)(Rn)

(A)

(direct)(A)((Ri))例:设(R0)=20H,(A)=3FH,(20H)=75H执行指令:XCHA,@R0执行结果:(A)=75H,(20H)=3FH2、半字节交换指令XCHDA,@Ri(A3~0)((Ri)3~0)常用于BCD码处理例:设(R1)=30H,(A)=67H,(30H)=84H执行指令:XCHDA,@R1执行结果:(A)=64H(30H)=87H3、累加器A高4位与低4位内容互换指令SWAPA;(A4~7)(A0~3)例:设(A)=0CAH执行指令:SWAPA执行结果:(A)=0ACH5、堆栈操作类指令PUSHdirect(SP)(SP)+1((SP))(direct)POPdirect(direct)((SP))(SP)(SP)-1要点:入栈操作,先执行SP+1,再入栈出栈操作,先出栈,再执行SP-1例:在中断响应时,(SP)=09H,数据指针DPTR的内容为0123H执行以下指令:PUSHDPLPUSHDPH(SP)+1,使(SP)=0AH(DPL)压入0AH单元(SP)+1,(SP)=0BH(DPH)压入0BH单元执行结果:(0AH)=23H(0BH)=01H(SP)=0BH堆栈操作需遵循先入后出,后入先出原则,才能保持原单元内容不变例:设(DPTR)=0123HPUSHDPHPUSHDPL…….…….POPDPLPOPDPH执行结果:(DPTR)=0123H如执行:PUSHDPHPUSHDPL·······POPDPHPOPDPL执行结果:(DPTR)=2301H3.3.2算术运算类指令类型:加,减,乘,除,增量、减量以及二—十进制调整指令ADD、ADDC、SUBB指令的执行将影响标志位(PSW中的OV,Cy,AC及P)要求掌握指令的操作结果对标志位的影响一、加法指令ADD目的操作数—累加器A源操作数—

4种寻址方式ADDA,Rn(A)(A)+(Rn)ADDA,direct(A)(A)+(direct)ADDA,@Ri(A)(A)+((Ri))ADDA,#data(A)(A)+#data运算均针对无符号二进制数进行,但结合OV标志可实现有符号数运算。结果将影响OV,Cy,AC,P标志A源+A当最高位有进位,Cy=1位3向位4有进位,AC=1OV取决于6、7两位的进位情况,同时有进位或无进位,则OV=0;只有一位有进位,OV=1A中有偶数个1,P=0;否则,P=1例:设(A)=0C3H,(R0)=0AAH

执行指令:ADDA,R0

写出执行结果及对标志位影响(A)11000011+(R0)10101010

01101101C=1AC=0OV=1P=1(A)=6DH只对有符号数运算有意义。两负数相加,结果为正数,溢出例:设(A)=0C3H,(R0)=0AAH

执行指令:ADDA,R0

写出执行结果及对标志位影响(A)11000011+(R0)10101010

01101101C=1AC=0OV=1P=1(A)=6DH无符号数195+170=365有符号数-61+(-86)=-147109溢出

二、带进位加法指令ADDCADDCA,Rn;(A)(A)+(C)+(Rn)ADDCA,direct;(A)(A)+(C)+(direct)ADDCA,@Ri;(A)(A)+(C)+((Ri))ADDCA,#data;(A)(A)+(C)+(#data)常用于多字节加法例:设(A)=0C3H,(R0)=0AAH,C=1

执行指令:ADDCA,R0(A)11000011+(C)0000000111000100+(R0)10101010

01101110C=1AC=0OV=1P=1(A)=6EH三、带借位减法指令SUBBSUBBA,Rn;(A)(A)-(C)-(Rn)SUBBA,direct;(A)(A)-(C)-(direct)SUBBA,@Ri;(A)(A)-(C)-((Ri))SUBBA,#data;(A)(A)-(C)-#data影响标志位:最高位有借位,Cy=1位3向位4有借位,AC=1最高两位同时有借位或无借位,OV=0;只有一位有借位,OV=1例:设(A)=0C9H,(30H)=54H,C=1

执行:SUBBA,30H(A)11001001-(C)0000000111001000-(30H)01010100

01110100C=0AC=0OV=1P=0(A)=74H只有在符号数相减时,OV才意味着溢出与否,如出现以下两种情况,OV置1:负-正=正正-负=负四、增量指令INCINCA;(A)(A)+1INCRn;(Rn)(Rn)+1INCdirect;(direct)(direct)+1INC@Ri;((Ri))((Ri))+1INCDPTR;(DPTR)(DPTR)+1操作:指定变量加1,结果仍存于原地址单元中。除P外,不影响任何标志位。例:设(R0)=7EH,(7EH)=0FFH

(7FH)=40H执行下列指令:INC@R0;INCR0;INC@R0;((R0))=((R0))+1,(7EH)=00H((R0))=((R0))+1,(7FH)=41H(R0)=(R0)+1,(R0)=7FH运行结果:(R0)=7FH,(7EH)=00H(7FH)=41H例:执行指令序列MOVDPTR,#1FFEH;INCDPTR;INCDPTR;INCDPTR;(DPTR)=1FFEH(DPTR)=1FFFH(DPTR)=2000H(DPTR)=2001H五、减量指令DECDECA;(A)(A)-1DECRn;(Rn)(Rn)-1DECdirect;(direct)(direct)-1DEC@Ri;((Ri))((Ri))-1操作:指定变量减1,结果送回原地址单元,不影响标志位(除P)。设(40H)=00H

执行DEC40H结果:(40H)=FFH不影响标志位六、乘法指令MULAB;(A)0~7(B)8~15(A)*(B)影响标志位:如乘积>255(0FFH)(即B>0),OV=1C总是被清0,即C=0AC不变,影响P例:设(A)=80H(128),(B)=32H(50)执行指令:MULAB结果:乘积为1900H(6400)(A)=(B)=00H19HOV=Cy=P=100七、除法指令DIVAB;(A)(B)商余数(A)/(B)对标志位影响:当B中除数为00H,除法运算结果为不定值,则A、B中内容均为不定值,OV置1C=0例:(A)=87H(135),(B)=0CH(12)

DIVAB(A)=(B)=0BH(11)03HOV=C=00八、二—十进制调整指令DAA;调整A中内容为BCD码调整方法:根据C和AC的状态,并结合A的内容IF[(A0~3)>9]OR[(AC)=1],THEN(A0~3)=(A0~3)+06H;IF[(A4~7)>9]OR[(C)=1],THEN(A4~7)=(A4~7)+60H因为指令要利用C和AC,所以必须跟在加法指令(ADD,ADDC)后面根据A中的数值及PSW相应标志位的状态,可能的操作为A加06H,60H,66H例:(A)=01010110B(56)(R3)=01100111B(67)以上均为BCD码(C)=0执行指令:ADDCA,R3DAA(A)01010110+(R3)0110011110111101A3~0>9,AC=0A7~4>9,C=0+66H调整+0110011000100011结果:(A)=23H

(C)=1对于无符号BCD码运算,56+67=123使用此指令条件:1、两个操作数均为压缩BCD码2、不适合减法和增1运算例:对于十进制减法运算,可采用补码相加的方法即用9AH减去减数得到以十为模的补码设被减数存30H单元,减数存40H单元,结果存50H单元。程序如下:CLRC;MOVA,#9AH;SUBBA,40H;ADDA,30H;DAA;MOV50H,A清进位位求减数的十补码补码相加调整至BCD码3.3.3逻辑运算类指令按操作数分为两类:单操作数指令双操作数指令针对累加器A进行A与第二操作数之间进行操作:清零、求反、移位,与、或、异或一、单操作数逻辑运算类指令1、累加器A清零指令

CLRA;(A)02、累加器求反指令

CPLA;(A)(A)例:设(A)=0AAH(10101010B)执行:CPLA结果:(A)=01010101B(55H)3、累加器A循环左移指令

RLA;例:(A)=0C5H(11000101B)RLA(A)=10001011B=8BH1394、累加器A连同进位位C循环左移指令RLCA;例:(A)=45H(01000101B),(C)=1RLCA;(A)=10001011B=8BH(C)=05、累加器A循环右移指令RRA

;6、累加器A连同进位位C循环右移指令RRCA

;例:(A)=0C5H(11000101B),(C)=1执行指令:RRCA结果:(A)=11100010B=0E2H(C)=1二、双操作数逻辑运算类指令1、逻辑“与”指令ANLA,Rn

ANLA,directANLA,@RiANLA,#data

以A为第一操作数,逻辑“与”运算的结果存入AANLdirect,AANLdirect,#data目的操作数为direct,源操作数为A和立即数与指令常用于屏蔽某些不用位。方法:欲屏蔽位该位与“0”相“与”,保留位与“1”相“与”例ANLA,#11110000B;屏蔽低4位,高4位不变2、逻辑“或”指令ORLA,RnORLA,directORLA,@RiORLA,#dataORLdirect,AORLdirect,#dataORL指令常用于使字节中某些位置1方法:欲置1的位与“1”相或,欲保留不变的位与“0”相或如ORLA,#0FH;高4位不变,低4位置13、逻辑“异或”指令XRLA,RnXRLA,directXRLA,@RiXRLA,#dataXRLdirect,AXRLdirect,#dataXRL指令可用于对某些位取反方法:欲取反的位用“1”去异或,保留位用“0”去异或如XRLA,#0FH;高4位不变,低4位取反例:设(A)=0C3H(11000011B)(R0)=0AAH(10101010B)分别执行以下指令:ANLA,R0;ORLA,R0;XRLA,R0;(A)=10000010B=82H(A)=11101011B=0EBH(A)=01101001B=69H3.3.4控制转移类指令3类:无条件转移条件转移子程序调用及返回一、无条件转移指令1、绝对无条件转移AJMPaddr11;(PC)(PC)+2(PC0~10)addr0~10(PC11~15)不变addr11:11位地址,是转移目的地址的低11位。在汇编语言程序中,可写成4位16进制地址,也可写成代表16位地址的标号(符号地址)形式。注:不常用,MCS48兼容指令转移范围:2K字节例1:0345H:AJMPaddr11addr11取值可为00000000000B~11111111111B执行时(PC)=(PC)+2=0347H15141312111098765432100347H:0000001101000111B转移目标地址范围:PC11~15不变00000000000B11111111111B有效转移地址范围:

0000H~07FFH例2:07FFH:AJMPadr11(PC)+2=07FFH+2=0801H0000100000000001B00000000001B11111111111B0801H0801H0FFFH转移范围转移范围:包括当前指令的下一条指令在内的同一2K字节内addr11:在0801H~0FFFH范围内例3:0345H:AJMP0123H2567H:AJMP29ABH是否正确正确错误2567H:0010010101100111B11111111111B27FFH转移地址最大为27FFH,29ABH大于27FFH,超出有效转移地址范围2、长转移指令LIMP

addr16;(PC)addr16转移范围:64KB3、相对转移指令SJMPrel

;(PC)(PC)+2(PC)(PC)+relrel:8位二进制补码,可写成符号地址的形式转移范围:PC当前值为基准,-128~+127例:0345H:SJMPrelPC当前值:0347H向后128字节02C7H向前127字节03C6Hrel=80Hrel=7FH当rel取值为FEH(-2),则目的地址与源地址相同如设rel=FEH,执行指令

HERE:SJMPHERE程序在此指令处无限循环4、间接转移指令JMP@A+DPTR;(PC)(A)+(DPTR)多分支转移指令,DPTR内容为多分支转移程序的首地址,由累加器A的内容来选择其中的某一个分支转移指令例:MOVDPTR,#JMP_TBLJMP@A+DPTR…..AJMPLABEL0AJMPLABEL1AJMPLABEL2AJMPLABEL3JMP_TBL:A中内容为偶数分支转移表不超过256B二、条件转移指令均为相对寻址方式,指令提供偏移量rel,转移范围为PC当前值的-128~+1271、判零转移指令JZrel

;(PC)(PC)+2如(A)=0,则(PC)=(PC)+rel否则,程序顺序执行JNZrel

;(PC)(PC)+2如(A)=0,则(PC)=(PC)+rel否则,程序顺序执行例:将外部数据存储器的一个数据块传送到内部数据RAM,两者的首地址分别为DATA1和DATA2,遇到传送的数据为0时停止传送。分析:数据块传送,长度较短,均采用间接寻址方式,其中R0寻址外部数据存储器,R1寻址内部RAM。传送时,要以累加器A作为过渡,利用判零转移可以判别是否继续传送还是终止程序如下:MOVR0,#DATA1;MOVR1,#DATA2;MOVXA,@R0;JZSTOP;MOV@R1,A;INCR0;INCR1;SJMPLOOP;LOOP:HERE:外部数据块首址内部数据块首址外部数据传入A为零则终止不为零则传送至内部RAM单元修改地址指针继续循环STOP:2、比较转移指令格式:CJNE(目的操作数),(源操作数),rel根据目的和源操作数的寻址方式不同,共有4条CJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel三字节指令例:设(R7)=56H,执行指令CJNER7,#60H,K1…………K1:例2、设P1口P1·0~P1·3为准备就绪信号输入端,当该4位输入全“1”说明各项工作准备好,单片机可顺序执行主程序,否则循环等待。程序片段如下:L0:MOVA,P1;ANLA,#0FH;CJNEA,#0FH,L0;…………MAN1:读P1口内容高4位无意义,屏蔽低4位不全为1,返回L0,否则继续执行3、循环转移指令(减1条件转移指令)DJNZRn,rel

;(PC)(PC)+2(Rn)(Rn)-1If(Rn)=0,(PC)(PC)+relElse,程序向下执行DJNZdirect,rel;(PC)(PC)+3(direct)(direct)-1If(direct)=0,(PC)(PC)+relElse,程序向下执行若循环变量为00H,则循环次数为256次例1:(40H)=01H,(50H)=70H

(60H)=15H,以下程序片段的执行结果DJNZ40H,LABEL1;DJNZ50H,LABEL2;DJNZ60H,LABEL3;结束循环向下执行转向LABEL2执行,继续循环需等上条指令执行完,才执行本指令各单元内容变为:(40H)=00H,(50H)=6FH,(60H)=15H例2:MOVR2,#8;CPLP1·7;DJNZR2,TOGGLF;TOGGLF:循环次数送R2P1·7取反,1个机周R2控制循环,2个机器周期执行结果:三、子程序调用及返回指令1、长调用指令LCALLaddr16;(PC)=(PC)+3(SP)=(SP)+1((SP))=(PC0~7)(SP)=(SP)+1((SP))=(PC8~15)(PC)=addr0~1564KB范围内子程序调用例:设(SP)=53H,子程序首址在3000H单元,并以标号STR表示。即

2000H:LCALLSTR执行时:(PC)=(PC)+3=2003H(SP)+1,(54H)=

03H(SP)+1,(55H)=

20H执行结果:(SP)=(54H)=(55H)=(PC)=55H03H20H3000HSTR(PC)2、绝对调用指令ACALLaddr11

;(PC)=(PC)+2(SP)=(SP)+1((SP))=(PC0~7)(SP)=(SP)+1((SP))=(PC8~15)(PC0~10)addr11(PC11~15)不变提供2KB范围内的子程序调用,调用范围同AJMP指令3、返回指令RET;(PC8~15)((SP))(SP)(SP)-1(PC0~7)((SP))(SP)(SP)-1例:设(SP)=6BH,内部RAM(6AH)=23H

(6BH)=01H,执行RET(PC8~15)(6BH)(PC0~7)(6AH)执行结果:(PC)=0123H

(SP)=69H4、中断返回指令RETI

;功能:A)恢复断点,同RETB)恢复中断逻辑,使CPU能接收同级或低级中断请求5、空操作指令NOP

;(PC)(PC)+1功能:无任何操作,继续执行下一条指令,不影响任何标志,产生一个机器周期的延时例:利用NOP指令产生方波CLRP2.7;NOPNOPNOPSETBP2.7;P2.7清0输出置位P2.7高电平输出程序举例169在3000H为首地址的存储区域中,存放着14个由ASCII码表示的0~9之间的数。试编写程序,将它们转换成BCD码,并以压缩BCD码的形式,存放在2000H~2006H单元。分析:1、外部RAM数据块操作,14个数

DPTR做源间址寄存器,R0为目标间址寄存器

R3做计数器2、ASCII码转换为压缩BCD码ASCII分离BCD码压缩BCD码屏蔽高4位移位、异或程序170MOVDPTR,#3000HMOVR0,#00HMOVR3,#07HMOVXA,@DPTRANLA,#0FHMOVR4,AINCDPTRMOVXA,@DPTRANLA,#0FHSWAPAXRLA,R4MOVP2,#20HMOVX@R0,AMOV P2,#0FFHINCDPTRINCR0DJNZR3,LOOPLOOP:;源数据块首地址;目标数据块首地址;计数器;取低位字节ASCII码;屏蔽高4位,转换为BCD码;暂存;修改地址指针,指向高位字节;取高位字节ASCII码;转换为BCD码;移位到高4位;异或,转换为压缩BCD码;高8位目标地址;存放压缩BCD码到外部RAM;修改源地址指针;修改目标地址;循环3.3.5位操作指令位处理器:CPU程序存储器数据存储器累加器(C)I/O口数据RAM可位寻址空间128位SFR的可寻址位82位位地址表示:bit在汇编语言中有5种表示方法:(以用户标志F0为例)1、位地址D5H2、字节地址·位D0H·53、位寄存器名称F04、寄存器名·位PSW·55、事先用伪指令定义的符号地址格式:字符名称BIT位地址

AFBITF0一、位传送指令MOVC,bit;(C)(bit)MOVbit,C;(bit)(C)注:位传送必须通过累加器C进行例:将30H位的内容传送到20H位MOVC,30HMOV20H,C二、位状态控制指令1、位清零指令

CLRbit;(bit)0

CLRC;(C)02、位求反指令

CPLbit;(bit)(bit)

CPLC;(C)(C)3、位置位指令

SETBbit;(bit)1

SETBC;(C)1例:设(P1)=00110101B

执行以下指令:

CLRP1.0;CPLP1.0;SETBP1.6;P1=00110100BP1=00110101BP1=01110101B三、位逻辑操作指令1、位逻辑“与”

ANLC,bit;(C)(C)与(bit)

ANLC,/bit;(C)(C)与(bit)2、位逻辑“或”

ORLC,bit;(C)(C)或(bit)

ORLC,/bit;(C)(C)或(bit)例:设E,B,D都代表位地址,试编写程序完成E、B内容的异或操作。即D=EB+EB程序如下:MOVC,B1ANLC,/EMOVF0,CMOVC,EANLC,/B1ORLC,F0MOVD,C;C=EB;暂存EB;C=EB;C=EB+EB;将运算结果存入D位操作必须通过位累加器C进行四、位控制转移指令1、判 C转移

JCrel;C=1转移

JNCrel;C=0转移例:设(C)=0,以下程序段的执行路径是什么JCL1CPLCJCL2L1:……L2:……;C=0,不转移,顺序执行;C取反,C=1;C=1,转向L2执行2、判位变量转移指令JBbit,rel;(bit)=1转移JNBbit,rel;(bit)=0转移判位变量并清0转移指令JBCbit,rel;(PC)(PC)+3IF(bit)=1,Then(PC)(PC)+relAnd(bit)=0例1:MOVP1,#0CAHMOVA,#56HJBP1.2,L1

温馨提示

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

评论

0/150

提交评论