单片机原理及应用PPT(曹克澄)_第1页
单片机原理及应用PPT(曹克澄)_第2页
单片机原理及应用PPT(曹克澄)_第3页
单片机原理及应用PPT(曹克澄)_第4页
单片机原理及应用PPT(曹克澄)_第5页
已阅读5页,还剩442页未读, 继续免费阅读

下载本文档

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

文档简介

前言本课件配套机械工业出版社出版的《单片机原理及应用(第2版)》(曹克澄主编)教材而制作的,参与本课件制作的人员由上海电机学院曹克澄(第3章、第4章、第6章、第8章)、四川信息职业技术学院熊建云(第1章、第2章)、安徽机电职业技术学院余丙荣(第5章)、辽宁机电职业技术学院周兵(第7章、第9章)组成,曹克澄对本课件进行统稿,由于时间仓促,本课件有不足之处,恳请读者提出宝贵意见,并恳请读者提出修改建议。E-mail:caokc@http://第1章基础知识第2章MCS-51系列单片机的结构和时序第3章MCS-51系列单片机指令系统第4章MCS-51系列单片机中断系统与定时/计数器第5章存储器扩展技术第6章并行I/O扩展技术第7章串行通信技术第8章I/O设备接口技术第9章单片机应用系统设计http://第1章基础知识本章重点:了解微型计算机的基本结构和工作原理;掌握单片机的概念及应用场合;掌握计算机中的数制与编码。1.1微型计算机简介1.2单片机简介1.3计算机中的数制与编码

本章小结http://1.1微型计算机简介1.1.1微型计算机的发展

1.微型计算机的发展第一代微处理器例:Intel4004→4位第二代微处理器例:Intel8080→8位第三代微处理器例:Intel8086→16位第四代微处理器例:Intel80486→32位第五代微处理器例:Intel公司的Pentiumg→64位http://2.微型计算机的应用数值计算控制信息处理与管理人工智能http://1.1.2微型计算机的组成及工作原理

1.微型计算机的常用术语位(bit):

位是计算机所能表示的最基本、最小的数据单位。位有两种状态:0和1。字节(Byte):一个连续的8位二进制数称为一个字节,即:

1Byte=8bit,通常以字节为单位来存放数据。字(Word):是计算机内部进行数据处理的基本单位。字通常与计算机内部的寄存器、算术逻辑单元、数据总线的宽度相一致。http://存储器容量更大单位:

KB(1KB=1024B=210B)

MB(1MB=1024KB=220B)

GB(1=1024MB=230B)

指令(instruction):是规定计算机进行某种操作的命令。

指令系统(instructionset):指一台计算机所能执行的全部指令。程序(program):是指令的有序集合,是一组为完成某种任务而编制的指令序列。http://2.微型计算机的组成http://(1)中央处理单元(CPU)

CPU主要由运算器、控制器组成。(2)存储器存储器的主要功能是存放程序和数据。存储器中存放二进制数的单元称为存储单元。http://(3)输入/输出接口(I/O接口)完成外设与CPU的连接;转换数据传送速度;转换电平;将I/O设备的状态信息反馈给CPU等。

(4)总线(Bus)总线是将CPU、存储器和I/O接口等相对独立的功能部件连接起来,并传送信息的公共通道。数据总线DB(DataBus):双向通信总线。地址总线AB(AddressBus):单向通信总线。控制总线CB(ControlBus):单向通信总线。http://3.微型计算机的工作原理(1)取指令CPU选中存储单元;CPU向存储器发出读取数据的控制信号;CPU通过DB读入指令代码。(2)分析、执行指令过程CPU读取指令代码后进行译码;CPU根据译码结果发出为完成此指令所需要的控制信号;执行指令所规定的操作。http://1.2单片机简介常见计算机:http://一般计算机的结构:http://显示器主机鼠标键盘微型计算机系统http://运算器控制器CPU存储器输入接口电路输入设备输出设备输出接口电路硬件系统软件系统+什么是单片机?

单片机就是将组成微型计算机的CXPU、存储器(RAM和ROM)、输入/输出接口等几个部分,全部集成在一块芯片内所组成的微型计算机,就称为单片机。http://1.2.1单片机的发展概况单片机的发展方向低电源、低功耗外围接口电路内装化工艺的进步及抗干扰能力的提高存储能力和Internet连接http://1.2.2单片机的特点体积小、结构简单、可靠性高;控制功能强;低电压、低功耗优异的性能/价格http://1.2.3单片机的应用http://汽车电子家用电器航空航天医疗设备工业控制仪器仪表通信产品1.2.4MCS-51系列单片机简介MCS-51系列基本产品型号:8051、8031、8751称为51子系列。不同型号MCS-51单片机CPU处理能力和指令系统完全兼容,只是存储器和I/O接口的配置有所不同。http://

硬件配置基本配置:1.

8位CPU2.片内ROM/EPROM、RAM3.片内并行I/O接口4.片内16位定时器/计数器5.片内中断处理系统6.片内全双工串行I/O口http://1.3计算机中的数制与编码1.3.1数制数制:是按进位原则进行计数的一种方法,即进位计数制。十进制数(1)记数符号:0、1、2、3、4、5、6、7、8、9;书写时用“D”作后缀(一般省略)。(2)进位原则:“逢十进一”。(3)按权展开式:http://二进制数(1)记数符号:0、1;书写时用“B”作后缀。(2)进位原则:“逢二进一”;(3)按权展开式:http://十六进制数(1)记数符号:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F;书写时用“H”作后缀。(2)进位原则:“逢十六进一”;(3)按权展开式:http://http://记住:十六进制与十进制、十六进制与二进制对应关系。1.3.2数制之间的相互转换1.二进制及其他进制转换为十进制数二进制、八进制和十六进制转换十进制的方法是:将二进制、八进制或十六进制写成按权展开式,然后各项相加,则得相应的十进制数。【例】把二进制数10101.1011B转换成相应的十进制数。解:10101.1011B

=1×24+0×23+1×22+0×21+1×20

+1×2-1+1×2-3+1×2-4

=21.6875Dhttp://2.十进制数转换成二进制数十进制数据转换成二进制数是将整数部分按“除2倒读余数法”的原则进行转换;小数部分按“乘2顺读整数法”的原则进行转换。【例】把十进制数15.625转换成为对应二进制数。解:所以十进制数15.625=1111.101Bhttp://3.二进制数与十六进制数相互转换二进制数转换成十六进制数时,从小数点开始,分别向左、向右每4位二进制数划为一组,整数部分不足4位前面添0,小数部分不足4位后面添0,然后每一组(4位二进制数)用1位十六进制数代替(4位二进制数与1位十六进制数对应关系见表),小数点位置保持不变。

【例】二进制数1111000111.100101B转换成为十六进制数。解:

1111000111.100101B=001111000111.10010100B

=3C7.94Hhttp://3.二进制数与十六进制数相互转换十六进制数转换成二进制数时,1位十六进制数用4位二进制数来替换,小数点位置保持不变。【例】将十六进制数2F5.CH转换成为二进制数解:

2F5.CH=001011110101.1100B

=1011110101.11B4.十进制数转换十六进制数先将十进制数转换成二进制数,再将二进制数转换成十六进制数。http://1.3.3二进制数的算术运算1.加法运算加法规则:

0+0=0;0+1=1;1+0=1;1+1=10进位原则:逢二进位。【例】求0111B与0110B之和。解:0111……(7)

+)0110……(6)

1101……(13)∴0111B+0110B=1101Bhttp://2.减法运算减法规则:

0-0=0;1-0=1;1-1=0;0-1=1(借位)【例】求1110B-0101B=?解:1110……(14)

-)0101……(5)

1001……(9)∴1110B-0101B=1001Bhttp://3.乘法运算在计算机系统中,都是将乘法作为连续的加法来执行。其中,自身相加的数为被乘数,相加的次数为乘数。【例】求1101B×11B=?解:1101B×11B=1101B+1101B+1101B

=100111B 4.除法运算除法可以归结为连续的减法,即从被除数中不断地减去除数,所减的次数是相除的商,而剩下的值则是相除的余数。注意:因为减法可以转换为加法(见二进制数补码的加减运算),所以除法也能转换成加法。这样,二进制数的加、减、乘、除都可以转换加法运算。http://1.3.4二进制数的逻辑运算1.逻辑与运算

运算规则

0∧0=0;0∧1=0;1∧0=0;1∧1=1

记忆口诀:有0为0,全1为1。2.逻辑或运算

运算规则

0∨0=0;0∨1=1;1∨0=1;1∨1=1

记忆口诀:有1为1,全0为0。http://3.逻辑异或运算

运算规则

0⊕0=0;0⊕1=1;1⊕0=1;1⊕1=0

记忆口诀:相同为0,不同为1(仅指两位异或运算)。4.逻辑非运算

运算规则

记忆口诀:取反。http://1.3.5计算机中数的表示与编码1.计算机中数的表示在计算机中,为了运算的方便,数的最高位用来表示正、负数。最高位为“0”表示正数,最高位为“1”表示负数。真值:带“+、-”号的数。机器数:数码化了的带符号数。http://【例】正数59H真值和机器数表示法。解:真值的表示法:+1011001B或+59H

机器数表示法:01011001B或59H【例】-59H真值和机器数表示法。解:真值的表示法:-1011001B或-59H

机器数表示法:11011001B或D9Hhttp://微型计算机中一个符号数的机器数的表示方法有原码、反码、补码等三种表示法。原码:用最高位表示符号位,后面各位表示该数的绝对值。(注意:符号位:0代表+,1代表-)【例】

(+56)原码=00111000B=38H

(-56)原码=10111000B=B8H从例题中可以看出:一个负数的原码只要在其对应的正数原码基础上加80H就可以方便地求出其原码。(-56)原码=(+56)原码+80H=38H+80H=B8Hhttp://反码:正数的反码与原码相同;负数的反码是在其原码的基础上,保留符号位不变,数值位各位取反。【例】

(+56)反码=00111000B=38H

(-56)反码=11000111B=C7H从例题中可以看出:一个负数的反码只要在其对应的正数反码(即原码)基础上各位取反就可以方便地求出其反码。而取反的方法也很简单,只要用FFH去减该数即可。(-56)反码=FFH-(+56)原码=FFH-38H=C7Hhttp://Why?补码:正数的补码与原码、反码相同;负数的补码是在其反码的基础上加1即可。【例】

(+56)补码=00111000B=38H

(-56)补码=(-56)反码+1=C7H+1=C8H从求反码的方法中可以推导:(-56)补码=(-56)反码+1=FFH-(+56)原码+1

=100H-(+56)原码=100H-38H=C8Hhttp://负数原码、反码、补码求法归纳:(负数)原码=(对应正数)原码+80H(负数)反码=FFH-(对应正数)原码(负数)补码=100H-(对应正数)原码http://http://注意:在原码和反码,0有两种表示法,即+0和-0的表示法不同;而在补码中0的表示法只有一种。2.二进制编码BCD码:用二进制数表示的十进制数称为二进制编码的十进制数。非压缩BCD码:8位码表示1位十进制数(高4位填0)的编码。压缩的BCD码:8位码表示2位十进制数(高4位、低4位各代表一位十进制数)。非法码:4位代码在1010B~1111B范围时。(2个BCD码的运算可能出现非法码,这时要对所得结果进行调整。)http://ASCII码:美国标准信息交换码(即ASCII码)。字符0~9的ASCII码:30H~39H大写英文字母A~Z的ASCII码:41H~5AH小写英文字母a~z的ASCII码:61H~7AHhttp://本章小结微型计算机的基本结构和常用术语单片机的概念单片机的特点及应用场合计算机不同中数制及相互转换二进制数的自述运算和逻辑运算符号数的表示形式:原码、反码、补码BCD码和ASCII码http://第2章MCS-51系列单片机的结构和时序本章重点:了解51系列单片机基本结构;了解51系列单片机的引脚名称及功能;掌握存储器(内RAM)结构;掌握PSW寄存器各位名称及功能;掌握复位后PC、PSW的状态。2.1MCS-51系列单片机的结构与引脚2.2MCS-51系列单片机的存储器结构2.3MCS-51系列单片机的时钟电路和时序2.4MCS-51系列单片机的复位与掉电处理

本章小结http://2.1MCS-51系列单片机的结构与引脚2.1.1MCS-51系列单片机的内部结构8031无http://http://2.1.2MCS-51系列单片机内部主要组成部分介绍1.中央处理器(CPU)(1)运算器运算器由ALU(算术及逻辑运算单元)、A(累加器)、B寄存器、PSW(程序状态字寄存器)和暂存器等组成,主要功能用于实现算术运算和逻辑运算。(2)控制器控制器由程序计数器PC、指令寄存器、指令译码器、堆栈指针SP、数据指针DPTR、定时与控制逻辑电路等组成。单片机的执行指令是在控制下进行的。

http://程序计数器PC:是一个16位的专用寄存器,用来存放即将要执行的指令地址,可对64KB的程序存储器直接寻址。

注:PC没有地址,是不可寻址的,因此用户无法对它进行直接读写。但可以通过转移、调用、返回等指令改变其内容,实现程序的转移。指令寄存器:指令寄存器是一个8位的寄存器,用于暂存待执行的指令代码,等待译码。(2)控制器http://8051单片机中共有256个RAM单元,包括低128个单元(地址为00H~7FH)的内部RAM区和高128B(地址为80H~FFH)的特殊功能寄存器区。8051单片机共有4KB的内部ROM,用于存放程序或表格,称为程序存储器。2.内部数据存储器3.内部程序存储器http://四个双向的8位并行I/O口,每个端口可以按字节输入或输出,每一条I/O线也可以单独用作输入或输出。

8051片内有一个全双工的串行口,以实现单片机和其他设备之间的串行数据传送。4.I/O端口5.串行口http://

8051带有2个16位的计数器,既可以作为定时器用于对被控系统进行定时控制,也可以作为计数器用于产生各种不同频率的矩形波及用于测量脉冲宽度等。

8051单片机有5个中断源,2个中断优先级。

6.定时/计数器7.中断控制系统http://2.1.3MCS-51系列单片机的引脚1.电源线:VCC(+5V)、VSS(地)2.振荡电路:XTAL1、XTAL23.复位引脚:RST4.并行口:P0、P1、P2、P35.EA:访问程序存储控制信号6.PSEN:外部ROM读选通信号7.ALE:地址锁存控制信号注:P0、P2、P3口还具有第二功能http://P0、P2、P3口的第二功能http://2.2MCS-51系列单片机的存储器结构MCS-51单片机内部有程序存储器和数据存储器两大类。程序存储器:用于存放程序和常数。——ROM类存储器(4KB,但8031片内无ROM)数据存储器:MCS-51系列单片机的数据存储器由片内数据存储器(采用8位二进制数寻址),用于存放中间结果或暂存数据,部分单元作为特殊功能寄存器。——RAM类存储器http://在物理结构上分为四个存储空间:片内程序存储器、片外程序存储器、片内数据存储器、片外数据存储器。从逻辑上分为三个存储器地址空间:⑴片内、片外统一编址的64KB程序存储器地址空间0000H~FFFFH;⑵64KB的外部数据存储器或扩展I/O口地址空间0000H~FFFFH;⑶256B的片内数据存储器地址空间00H~FFH(包括低128B的内部RAM地址00H~7FH和高128B的特殊功能寄存器地址空间)。http://2.2.1程序存储器外部ROM60KB内部ROM4KBEA=1外部ROM4KBEA=0FFFFH1000H0FFFH0000H0FFFH0000H注:程序存储器用MOVC指令访问http://http://2.2.2数据存储器特殊功能寄存器128B内部RAM128B外部RAM64KBFFH80H7FH00HFFFFH0000H注1:用MOV指令读写注2:用MOVX指令读写http://内部数据存储器FFH80H7FH30H2FH20H1FH00H特殊功能寄存器SFR用户RAM区位寻址区通用寄存器区http://1.通用寄存器区通用寄存器区共分4个区,每个区有8个单元,每个区的8个单元从低地址到高地址分别命名为R0-R7。复位后当前工作寄存器区为0区,可以通用对PSW中的RS1、RS0的设置改变当前工作寄存器区。

RS1RS0被选寄存器组

000区

011区

102区

113区R7…R0R7…R0R7…R0R7R6R5R4R3R2R1R01FH|18H17H|10H0FH|08H07H06H05H04H03H02H01H00H3区2区1区0区http://2.位寻址区字节地址为20H~2FH,既可作RAM,也可位操作共有16个RAM单元,共128位,位地址为00H~7FH。注意:虽然位地址和字节地址的表现形式可以一样,但因为位操作与字节操作的指令不同,所以不会混淆。http://2.位寻址区字节地址位地址D7D6D5D4D3D2D1D02FH7FH7EH7DH7CH7BH7AH79H78H2EH77H76H75H74H73H72H71H70H……22H17H16H15H14H13H12H11H10H21H0FH0EH0DH0CH0BH0AH09H08H20H07H06H05H04H03H02H01H00Hhttp://3.

通用RAM区:也称用户RAM区。在该区域内,只能进行字节寻址。A、堆栈(Stack)是按照“先进后出,后进先出”的原则来存取数据的一个内部RAM区域,这个存储器区域的一端是固定的,另一端是活动的,每个存储单元是不能按字节任意访问的。B、在使用堆栈之前,应规定堆栈的起始位置(固定端),称为栈底。堆栈最后压入或即将弹出数据的单元(活动端),称栈顶。http://67HA3H46H栈底PUSH指令POP指令SP堆栈指针http://4.特殊功能寄存器21个SFR的地址离散地分部在内部数据存储器的80H-FFH地址空间。SFR占用21个单元,其余的大部分是空余单元,它们没有定义不能作内部RAM使用。有11个SFR具有位地址,可以进行位寻址,对应的位也有位名称,它们的字节地址正好能被8整除。http://4.特殊功能寄存器1)累加器ACC:最常用的8位特殊功能寄存器,大部分指令的操作数取自于ACC,许多运算结果也存放在ACC中。A是累加器ACC的助记符。2)B寄存器:一个8位寄存器,主要用于乘法和除法操作。在其他指令中,作为一般的内部RAM使用。3)程序状态字寄存器PSW:一个8位的寄存器,用于存放程序运行中的各种状态信息。CyACF0RS1RS0OVPPSWhttp://Cy:进位标志位。在进行加(或减)法运算时,若操作结果的最高位(D7位)有进位(或借位)时,Cy=1;否则Cy=0。AC:辅助进位标志位。在进行加(或减)运算时,若操作结果的低半字节(D3位)向高半字节产生进位(或借位)时,AC=1;否则AC=0。F0:用户标志位。RS1、RS0:当前工作寄存器区选择位。http://OV:溢出标志位。当进行补码运算时,运算结果超出-128~+127范围时,即溢出,则OV=1;没有溢出,则OV=0。

出现下列情况即为溢出(运算后OV=1):正数加正数为负数;负数加负数为正数;正数减负数为负数;负数减正数为正数;乘法时结果B≠0;除法运算时除数为0。P:奇偶校验标志位。每条指令执行完后,该位始终跟踪累加器A中1的数目的奇偶性。如果A中有奇数个1,则P=1;否则P=0。http://【例】若A=96H,执行ADDA,#84H后,判断Cy、AC、OV、P的状态。解:执行该指令

A96H+84HA1AH=00011010BCy=1,AC=0,OV=1,P=1【例】若A=36H,执行ADDA,#3BH后,则:

A=71H,Cy=0,AC=1,OV=0,P=0负数负数正数Why?http://4)堆栈指针SP:用于存放当前堆栈操作的单元地址,并根据入栈指令(PUSH)或出栈指令(POP)修改其内容,SP始终指向栈顶。系统复位后,SP初始化为07H。5)数据指针DPTR:DPTR可以作为一个16位SFR使用,也可以作为两个独立的8位寄存器DPH和DPL来使用,其中DPH为8位,DPL为低8位。如:DPH=34H,DPL=A6H,则DPTR=34A6H。6)I/O端口锁存器P0~P3:P0~P3为四个8位的特殊功能寄存器,它们有字节地址和位地址。当I/O端口某一位用于输入时,必须在相应口锁存器的对应位先写入1。7)其它的SFR有:TMOD、TCON、T0(TH0和TL0组成)、T1(由TH1和TL1组成)、IE、IP、SCON、SBUF、PCON等。http://2.3MCS-51单片机的时钟电路和时序2.3.1振荡器和时钟电路时钟频率范围要求在1.2MHz~12MHz之间。内部振荡器方式外部引入方式XTAL1单片机XTAL2

内部振荡器方式外部引入方式1。.。XTAL2单片机XTAL1

外部时钟源+5Vhttp://2.3.2时序单位时钟周期(又称为振荡周期):是指振荡器产生一个振荡脉冲信号所用的时间,是振荡频率的倒数,称为拍节。状态周期:振荡脉冲信号经过内部时钟电路二分频之后产生的单片机时钟信号的周期(用S表示)称为状态周期。机器周期:是指CPU完成某一个规定操作所需的时间。MCS-51单片机的一个机器周期包含6个状态,并依次表示为S1~S6,每个状态分为2个节拍。依次表示为:S1P1、S1P2、S2P1、…、S6P1、S6P2。指令周期:CPU执行一条指令所需要的时间称为指令周期。MCS-51单片机指令周期根据指令的不同,可包含有1或2或4个机器周期。http://不同晶振频率下的各周期情况http://2.4MCS-51单片机的复位与掉电处理2.4.1复位与复位电路复位1.复位条件:RST引脚是复位信号的输入端,复位信号是高电平有效,其有效时间应持续24个振荡脉冲周期(即二个机器周期)以上。

【例】若使用频率为6MHz的晶振,则复位信号持续时间至少为多少μs?解:∵fosc=6MHz

∴MC=12/fosc=12/6MHz=2μs

∴t=4μs所以复位信号至少持续4μs。http://复位后寄存器的状态寄存器复位状态寄存器复位状态PC0000HTCON00HACC00HTH000HPSW00HTL000HSP07HTH100HDPTR0000HTL100HP0~P3FFHSCON00HIP××000000BSBUF不定IE0××00000BPCON0×××××××B(NMOS)TMOD00H0×××0000B(CHMOS)http://复位电路上电复位手动电平复位手动脉冲复位http://2.4.2掉电处理掉电保护方式当遇到单片机掉电时,可以把HMOS型的8051单片机的RST/VPD引脚作为备用电源端,只要Vcc上的电压低于VPD上的电压时,备用电源通过VPD端给内部RAM供电,以低功耗保持内部RAM中的数据。掉电保护电路http://2.4.2掉电处理节电工作方式由片内SFR中的电源控制寄存器PCON的低4位来控制待机和掉电两种方式,其格式如下:位D7D6D5D4D3D2D1D0位名称SMOD———GF1GF0PDIDL●IDL:待机方式位。若IDL=1,进入待机方式;●PD:掉电方式位。若PD=1,进入掉电方式;●GF1、GF0:通用标志位。由用户置位或复位;●SMOD:串行口波特率加倍位。当PD和IDL同时为1,则先进入掉电工作方式。复位后,PCON中有定义的位均为0。

只有CHMOS型单片机(如80C51)才有节电工作方式,有两种节电方式即待机和掉电保护方式。http://本章小结内部数据存储器结构当前工作寄存器组如何选择堆栈的定义ACC、B、DPTR、SP等SFR的名称及功能程序状态字PSW各位名称及功能时钟电路复位状态及复位电路http://第3章MCS-51系列单片机指令系统本章重点:掌握汇编指令的基本格式;掌握51系列单片机的寻址方式;掌握51系列单片机的各指令;能阅读程序并能编写简单程序。3.1指令系统简介3.2寻址方式3.3MCS-51系列单片机指令系统3.4汇编语言程序设计本章小结http://3.1指令系统简介3.1.1指令的基本格式汇编语言指令格式

[标号:]操作码[第一操作数][,第二操作数][,第三操作数][;注释]说明:带有方括号[……]的部分代表可选项。【例】

LOOP:MOVA,#31H;将立即数31H送累加器A中http://操作码第一操作数第二操作数标号注释机器语言指令格式(1)单字节指令格式:操作码【例】汇编语言指令

ADDA,R0对应的机器语言是:

28(2)双字节指令格式:操作码操作数【例】汇编语言指令

ADDA,#31H

对应的机器语言是:

2431(3)三字节指令格式:操作码第一操作数第二操作数【例】汇编语言指令

MOV30H,#7AH

对应的机器语言是:

75307Ahttp://3.1.2单片机指令分类数据传送指令:是将数据从一个(块)存储地方传送到另一个(块)地方的传送,原存储地方数据不变。算术运算指令:是对数据进行加法、减法、乘法、除法、加1、减1以及十进制调整指令。逻辑运算指令:是对数据进行与、或、异或、非及移位操作。控制转移指令:是实现程序的转移或子程序的调用。位操作指令

:是对数据的某一位进行操作,包括置1、清零、位传送及位的逻辑运算。http://3.1.3指令系统中的常用符号Rn:n=0-7,代表工作寄存器R0―R7。@Ri:代表工作寄存器Ri间接寻址8位存储单元,存储单元地址00H-FFH。其中i=0、1,Ri代表工作寄存器R0、R1。direct:代表8位地址,该8位地址可以是内RAM的任何一个地址(00H-7FH),也可以为SFR(特殊功能寄存器)中的任何一个(80H-FFH)。#data:为8位的立即数,该数为真正参与运算或传送的数据。#data16:为16位的立即数,该数为参与传送的数据。http://addr16:为16位目的地址,用于LCALL、LJMP二个指令中,可以实现在64K程序存储器范围内调用子程序或转移。addr11:为11位目的地址,用于ACALL、AJMP二个指令中,可以实现在下条指令地址所在的2K范围内调用子程序或转移。rel:为带符号的8位偏移地址,用于SJMP和所有的条件转移指令,可以在下条指令地址所在的-128-+127的程序存储器范围内转移。DPTR:数据指针,可用作16位地址寄存器。A:累加器ACC。http://B:通用寄存器,主要用于乘法MUL和除法DIV指令中。Cy:代表进位标志位或在布尔处理器中的累加器。bit:位地址。片内RAM中的位寻址单元及SFR中的可寻址位。/bit:在位操作指令中,表示对该位(bit)先取反,再进行传送或运算,不改变该位(bit)的原值。

http://3.2寻址方式寻址就是寻找操作数的地址,寻找操作数地址的方式,称为操作数地址的寻址方式,简称寻址方式。

3.2.1立即寻址方式

立即寻址方式就是指令中直接给出操作数的寻址方式。其特征是操作数前带有“#”,指令中的操作数也称为立即数。【例】MOV

A,#7AH

上述指令将数7AH送到A中执行后A=7AH,过程如右图。http://6DHA7AH立即数3.2.2直接寻址方式直接寻址方式就是指令中给出操作数地址的寻址方式,即指令中给出的数据作为地址,该地址对应存储单元中的数据才是真正的操作数。【例】设内RAM7AH单元中的内容为6DH,则执行指令

MOVA,7AH后,A中的内容为6DH,即A=6DHhttp://43H14H…7BH7AH…A6DH6DH注意:7AH单元中的数据没有变化3.2.3寄存器寻址方式寄存器寻址方式就是对指令中指出的某一寄存器中的数作为操作数的寻址方式。【例】如果R1=56H,则执行指令MOVA,R1后,累加器A=56H。http://93H14H6BHA3HR3R2R1R0A56H56HR1中的内容没有变3.2.4寄存器间接寻址方式寄存器间接寻址方式就是将指令指定的寄存器中的内容作为地址,将该地址所对应的存储单元中的数据作为真正参与运算或传送的操作数的寻址方式。寄存器间接寻址也简称寄存器间址。注意:与寄存器寻址方式的格式不同在于寄存器前加@。http://93H【例】如果R0=30H,(30H)=B3H,则执行指令

MOVA,@R0后,

A=B3H。指令

MOVA,@R0的工作过程示意点击页面。14HB3H…30H31H30H…R0AB3Hhttp://3.2.5变址寻址方式

变址寻址方式就是将指令指定的变址寄存器和基址寄存器的内容相加形成操作数地址的寻址方式。【例】如果A=30H,DPTR=2000H,(2030H)=45H,执行指令

MOVCA,@A+DPTR是将累加器A中的内容与DPTR中的内容相加,其和作为程序存储器的地址,找到程序存储器中该地址所对应的单元,将该单元中的内容送累加器A中。http://30H00H00H20上例指令

MOVCA,@A+DPTR的工作过程点击页面。http://20H…30HDPHDPL…A2030H3DH…B5H…2031H…202FH…20H00H+93H93H3.2.6相对寻址方式

相对寻址方式就是将程序计数器PC当前的值(执行本指令后的PC值)加上指令中给出的相对偏移量rel形成程序转移的目的地址赋值给PC,这种寻址方式就称为相对寻址方式。相对偏移量rel用补码表示,其范围为-128~+127。【例】如果当前PC=2030H,则执行指令

SJMP0A3H后,

PC=2030H+2+0A3H(补码,其值是负的)

=1FD5H即程序转到1FD5H处取指、执行。http://

注意:在相对寻址方式时,在rel为正数和负数两种不同情况下,目的地址PC的求法可以用下列不同的公式求:当rel为正数时,

PC目的=PC当前+当前指令字节数+rel当rel为负数时,

PC目的=PC当前+当前指令字节数+rel-100H在人工汇编时,往往知道PC目的和PC当前,需要求rel,如果PC目的>PC当前,采用第一个公式;如果PC目的≤PC当前,采用第二个公式。http://3.2.7位寻址方式位寻址就是对内部RAM和特殊功能寄存器的可寻址位的内容进行操作的寻址方式。这种寻址方式只是对指令指定的1位进行操作,其寻址方式与直接寻址方式相同。【例】如果A=74H,则执行指令

SETBACC.3后,A=7CH,见下图。http://执行前A01110100执行后A011111003.3MCS-51系列单片机指令系统3.3.1数据传送指令1.内部RAM中一般数据传送指令这类数据传送指令的格式为:

MOV目的操作数,源操作数该指令的功能将源操作数传送到目的操作数中,而源操作数中的数据保持不变。即:(目的地址)←(源地址)或立即数数据传送指令对PSW一般没有影响,但如果目的单元为A,则影响PSW中的P标志位。http://(1)以累加器A为目的的数据传送指令

1)MOV

A,Rn

;A←Rn,n=0-72)MOV

A,@Ri

;A←(Ri),i=0,13)MOV

A,direct;A←(direct)4)MOV

A,#data;A←datahttp://93H1)指令:MOV

A,Rn

;A←Rn,n=0-7功能:该指令是将寄存器Rn中的内容送到累加器A中,Rn中的内容保持不变。【例】如果当前R0=56H,A=93H,则执行指令:

MOVA,R0

结果:A=56H14H6BHA3H56HR3R2R1R0A56Hhttp://93H2)指令:MOV

A,@Ri

;A←(Ri),i=0,1功能:该指令是将寄存器Ri中的内容作为数据存储器的地址,将该地址对应单元中的内容送到累加器A中,该单元及Ri中的内容保持不变。【例】如果当前R0=30H,(30H)=0B3H,A=93H,执行指令:

MOVA,@R0

结果:A=B3H14HB3H…30H31H30H…R0AB3Hhttp://43H3)指令:MOV

A,direct;A←(direct)功能:该指令是将数据存储器地址为direct单元中的内容送到累加器A中,该单元中的内容保持不变。【例】如果当前(40H)=6DH,A=43H,则执行指令:

MOV

A,40H

结果:A=6DH14H6DH…41H40H…A6DHhttp://43H4)指令:MOV

A,#data;A←data功能:该指令是将立即数data送到累加器A中。注意:与MOV

A,direct的形式与功能的区别

【例】如果当前A=43H,则执行指令:

MOV

A,#40H

结果:A=40H14H6DH…41H40H…A40H立即数http://(2)以寄存器Rn为目的的数据传送指令

1)

MOV

Rn,A;Rn←A,n=0-72)MOV

Rn,direct;Rn←(direct)3)MOV

Rn,#data;Rn←datahttp://A3H93H1)指令:MOV

Rn,A;Rn←A

,n=0-7功能:该指令是将累加器A中的内容送到寄存器Rn中,A中的内容保持不变。【例】如果当前R1=A3H,A=93H,则执行指令:

MOV

R1,A结果:R1=93H14H6BH56HR3R2R1R0A93Hhttp://6DHB3H2)指令:MOV

Rn,direct;Rn←(direct)功能:该指令是将数据存储器地址为direct单元中的内容送到Rn中,该单元中的内容保持不变。【例】如果当前(41H)=73H,R1=6DH,则执行指令:

MOV

R1,41H

结果:R1=73H14H6DH78HR2R1R042H73H41HA3H40H73Hhttp://6DHB3H3)指令:MOV

Rn,#data

;Rn←data功能:该指令是将立即数data送到寄存器Rn中。【例】如果当前(41H)=73H,R1=6DH,则执行指令:

MOV

R1,#40H

结果:R1=40H14H6DH78HR2R1R042H40H41HA3H40H73Hhttp://立即数(3)以直接地址为目的的数据传送指令

1)MOV

direct,A;(direct)←A2)MOV

direct,Rn

;(direct)←Rn3)MOV

direct,@Ri;(direct)←(Ri)4)MOV

direct,#data;(direct)←data5)MOV

direct1,direct2;(direct1)←(direct2)http://B3H93H1)指令:MOV

direct,A;(direct)←A

功能:该指令是将累加器A的内容送到地址为direct的数据存储器单元中,累加器A中的内容保持不变。【例】如果当前内存情况如图所示,执行指令:

MOV

30H,A

结果:(30H)=93H14H…30H31H30H…R0A93Hhttp://B3H2)指令:MOV

direct,Rn

;(direct)←Rn,n=0-7功能:该指令是将寄存器Rn的内容送到地址为direct的数据存储器单元中,寄存器Rn中的内容保持不变。【例】如果当前内存情况如图所示,执行指令:

MOV

30H,R0结果:(30H)=30H14H…30H31H30H…R030Hhttp://3)指令:MOV

direct,@Ri

;(direct)←(Ri),i=0,1功能:该指令是将寄存器Ri的内容作为地址,该地址所对应内存单元中的数据送到地址为direct的内存单元中。【例】如果当前内存情况如图所示,执行指令:

MOV

31H,R0结果:(31H)=0B3H14H…B3H31H30H…R030Hhttp://B3H73HB3H4)指令:

MOV

direct,#data;(direct)←data功能:该指令是将立即数data送到地址为direct的内存单元中。【例】如果当前(41H)=73H,则执行指令:

MOV

41H,#40H

结果:(41H)=40H42H40H41HA3H40H立即数http://5)指令:MOVdirect1,direct2;(direct1)←(direct2)功能:该指令是将内存单元地址为direct2的单元中的数据送到地址为direct1的内存单元中。【例】如果当前内存情况如图所示,执行指令:

MOV

31H,30H结果:(31H)=0B3H14H…B3H31H30H…R030Hhttp://B3H(4)以寄存器间址@Ri为目的的数据传送指令

1)MOV

@Ri,A;(Ri)←A,i=0,12)MOV

@Ri,direct;(Ri)←(direct)3)MOV

@Ri,#data;(Ri)←datahttp://B3H93H1)指令:

MOV

@Ri,A;(Ri)←A,i=0,1

功能:该指令是将累加器A的内容送到以寄存器Ri中的数据作为地址对应的数据存储器单元中,累加器A中的内容保持不变。【例】如果当前R0=30H,(30H)=0B3H,A=93H,则执行指令:

MOV

@R0,A

结果:(R0)=93H

即(30H)=93H

而R0=30H14H…30H31H30H…R0A93Hhttp://B3H2)指令:MOV

@Ri,direct;(Ri)←(direct)功能:该指令是将数据存储器地址为direct单元中的内容送到以寄存器Ri中的数据作为地址对应的数据存储器单元中,原单元中的内容保持不变。【例】如果当前R0=30H,(30H)=0B3H,(31H)=14H,则执行指令:

MOV

@R0,31H

结果:(R0)=14H

即:(30H)=14H

而R0=30H14H…30H31H30H…R014Hhttp://73HB3H3)指令:

MOV

@Ri,#data;(Ri)←data功能:该指令是将立即数data送到以寄存器Ri中的数据作为地址对应的数据存储器单元中。【例】如果当前R1=41H,(41H)=73H,则执行指令:

MOV

@R1,#40H

结果:(R1)=40H即:(41H)=40H

而:R1=41H…41H78H…R1R042H40H41HA3H40H立即数http://2.16位数据传送指令

MOV

DPTR,#data16;DPTR←data16功能说明:该指令是将16位数据送到数据指针DPTR中,其中数据的高8位送到DPH中,而数据的低8位送到DPL中。【例】如果当前DPTR=2000H,执行指令:

MOV

DPTR,#236BH结果:DPTR=236BH

即:DPH=23H,DPL=6BHhttp://3.累加器与外部数据存储器的数据传送指令(1)以Ri为间址寄存器

1)MOVX

A,@Ri

;A←(Ri)外RAM2)MOVX

@Ri,A

;(Ri)外RAM←A说明:第一条指令是将Ri中的8位数据作为低8位地址所对应的外RAM单元中的内容送到累加器A中;第二条指令是将累加器A中的内容送到Ri中的8位数据作为低8位地址所对应的外RAM单元中。由于外RAM一般由16位地址构成,因此应用上述两条指令时,需要先将高8位地址通过P2口送出,然后执行上述两条指令。Ri中的数据作为低8位地址,通过P0口送出。http://(2)以DPTR为间址寄存器

1)MOVX

A,@DPTR;A←(DPTR)外RAM2)MOVX

@DPTR,A;(DPTR)外RAM←A说明:第一条指令是将DPTR中的16位数据作为地址,其所对应的外RAM单元中的内容送到累加器A中;第二条指令是将累加器A中的内容送到DPTR中的16位数据作为地址所对应的外RAM单元中。

DPTR提供的是16位数据,其中高8位通过P2口送出,低8位通过P0口送出。http://【例】如果要将内存30H单元中的数据送到外RAM3000单元中,请编写指令。

MOVP2,#30HMOVA,30HMOVR0,#00HMOVX@R0,A或者

MOVA,30HMOVDPTR,#3000HMOVX@DPTR,Ahttp://【例】如果要将外RAM2340H单元中数据读到内存50H单元中,请编写指令。

MOVP2,#23HMOVR0,#40HMOVXA,@R0MOV50H,A或者

MOVDPTR,#2340HMOVXA,@DPTRMOV50H,Ahttp://4.访问程序存储器指令(1)以DPTR作为基址寄存器

MOVC

A,@A+DPTR;A←(A+DPTR)ROM(2)以PC作为基址寄存器

MOVX

A,@A+PC;PC←PC+1,A←(A+PC)ROM说明:上述两条指令是将A中的8位无符号数与DPTR或PC中的16位无符号数相加形成16位地址,将该地址单元中的数据读到累加器A中。如果访问外部程序存储器(具体视EA及地址大小而定),则高8位地址通过P2口送出,低8位地址通过P0口送出。http://【例】执行下面程序,则A为多少?

ORG2000H;伪指令,定义下列程序从2000H开始存放

MOVA,#02H

MOVDPTR,#DATA

MOVCA,@A+DPTR

RETDATA:11H,12H,13H由于在程序第一条赋给A的值是02H,第二条指令赋给DPTR的值是2007H,所以形成的地址是2009H,因此结果A=13H。http://地址ROM2000H742001H022002H902003H202004H072005H932006H222007H112008H122009H13【例】执行下面程序,则A为多少?

ORG2000H;伪指令,定义下列程序从2000H开始存放

MOVA,#02H

MOVCA,@A+PC

RETDATA:11H,12H,13H,14H,15H由于在程序第一条赋给A的值是02H,第二条指令PC值为2002H,加1后PC为2003H再加A中的值02H,所以形成的地址是2005H,因此结果A=12H。http://地址ROM2000H742001H022002H832003H222004H112005H122006H132007H142008H152009H5.堆栈操作指令(1)入栈指令

PUSHdirect;SP←SP+1,(SP)←(direct)(2)出栈指令

POPdirect;(direct)←(SP),SP←SP-1说明:堆栈指令主要用于现场保护,使用时必须遵循先进后出原则。http://8CH3AH60H58H【例】当前数据状态如图所示,点击页面,可以演示执行指令PUSH时数据变化过程。

MOVSP,#70HPUSHAPUSHR0http://33H…45H3AH58H…R0A71H73H…07HSP70H71H72H70H72H3AH8CH58H33H60H【例】当前数据状态如图所示,点击页面,可以演示执行指令POP时数据变化过程。

MOVSP,#73HPOPAPOPR0http://33H…45H8CH…R0A71H73H…07HSP73H72H71H70H72Hhttp://注意:堆栈指令用于现场保护时,要成对出现,并遵循先进后出的规则。【例】下列就是对A、R0进行现场保护的中断服务子程序。

PUSHAPUSHR0…POPR0POPARETI成对,呈嵌套6.数据交换指令(1)字节交换指令

1)XCHA,Rn

;ARn2)XCHA,direct;A

(direct)3)XCHA,@Ri

;A(Ri)http://【例】当前数据状态如图所示,点击页面,可以演示执行指令XCH时数据变化过程。

1)XCHA,R02)XCHA,40H3)XCHA,@R1http://R0A3AH58H40HA5BH3AH43H5BHXCHA,R0示意图XCHA,40H示意图R13DH30H30HA7CHXCHA,@R1示意图3DHBH6.数据交换指令(2)半字节交换指令

1)XCHDA,@Ri

;A3-0(Ri)3-02)SWAPA;A7-4

A3-0http://XCHDA,@R0示意图SWAPA示意图A7H40H64BHR040HAB110101017-43-03.3.2算术运算指令1.加法指令注意:加法指令将影响PSW中的Cy、AC、OV、P标志位。(1)不带进位位加法指令

1)ADDA,Rn;A←A+Rn2)ADDA,@Rn;A←A+(Ri)

3)

ADDA,direct;A←A+(direct)

4)

ADDA,#data;A←A+datahttp://http://【例】设当前A=7CH,R0=30H,R1=0D3H,(30H)=5BH,分别执行下列指令后,累加器A、标志位Cy、AC、OV、P分别为多少?

1)ADDA,R12)ADDA,@R03)ADDA,30H4)ADDA,#30H解:1)A=7CH+0D3H=4FH(进位),Cy=1,AC=0,OV=0,P=1。2)A=7CH+5BH=0D7H,Cy=0,AC=1,OV=1,P=0。3)A=7CH+5BH=0D7H,Cy=0,AC=1,OV=1,P=0。4)A=7CH+30H=0ACH,Cy=0,AC=0,OV=1,P=0。(2)带进位位加法指令

1)ADDCA,Rn;A←A+Rn+Cy2)ADDCA,@Rn;A←A+(Ri)+Cy

3)

ADDCA,direct;A←A+(direct)+Cy

4)

ADDCA,#data;A←A+data+Cy注意:带进位位加法指令必须加上Cy,因此必须考虑在程序执行过程中Cy状态的变化情况。http://http://【例】设当前A=7CH,R0=30H,R1=0D3H,(30H)=5BH,Cy=1,执行下列程序后,累加器A、标志位Cy、AC、OV、P为多少?

ADDCA,R1ADDCA,@R0ADDCA,30HADDCA,#30H解:第一条指令:A=7CH+0D3H+Cy=4FH+1=50H,Cy=1

第二条指令:A=50H+5BH+Cy=0ABH+1=0ACH,Cy=0

第三条指令:A=0ACH+5BH+Cy=07H+0=07H,Cy=1

第四条指令:A=07H+30H+Cy=37H+1=38H所以结果:A=38H,Cy=0,AC=0,OV=0,P=12.减法指令注意:减法指令影响标志位Cy、AC、OV、P;减法指令只有带进位标志位的减法指令。

1)SUBBA,Rn;A←A-Rn-Cy2)SUBBA,@Rn;A←A-(Ri)-Cy

3)

SUBBA,direct;A←A-(direct)-Cy

4)

SUBBA,#data;A←A-data-Cyhttp://http://【例】设当前A=7CH,R0=30H,R1=0D3H,(30H)=5BH,Cy=1,执行下列程序后,累加器A、标志位Cy、AC、OV、P为多少?

SUBBA,R1;A=7CH-0D3H-Cy=0A9H-1=0A8H,Cy=1SUBBA,@R0;A=0A8H-5BH-Cy=4DH-1=4CH,Cy=0SUBBA,30H;A=4CH-5BH-Cy=0F1H-0=0F1H,Cy=1SUBBA,#73H;A=0F1H-73H-Cy=7EH-1=7DH解:所以结果:A=7DH,Cy=0,AC=1,OV=1,P=0。注意:读结果采用倒读法。3.乘法指令注意:乘法指令影响标志位OV、P。当结果B中的数据不为0时,OV=1,否则OV=0。

MULAB;BA←A×B【例】设当前A=03H,B=05H,则执行指令MULAB后,A、B、OV、P分别为多少?解:所以:A=0FH,B=00H,OV=0,P=0http://00000011Bx00000101B00000011+000000110000001111B【

温馨提示

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

评论

0/150

提交评论