(单片机应用实例开发)实例二单片机的基本结构及指令系统

上传人:xiao****017 文档编号:16364492 上传时间:2020-09-29 格式:PPT 页数:249 大小:5.93MB
收藏 版权申诉 举报 下载
(单片机应用实例开发)实例二单片机的基本结构及指令系统_第1页
第1页 / 共249页
(单片机应用实例开发)实例二单片机的基本结构及指令系统_第2页
第2页 / 共249页
(单片机应用实例开发)实例二单片机的基本结构及指令系统_第3页
第3页 / 共249页
资源描述:

《(单片机应用实例开发)实例二单片机的基本结构及指令系统》由会员分享,可在线阅读,更多相关《(单片机应用实例开发)实例二单片机的基本结构及指令系统(249页珍藏版)》请在装配图网上搜索。

1、2.1 单个发光二极管的点亮 2.2 单个发光二极管的闪烁 2.3 单片机端口输出方波 2.4 习题,实例二 单片机的基本结构及指令系统,学习目标 理解单个发光二极管控制电路的构成、工作原理和电路中各元器件的作用,并对电路进行分析和计算。 理解51单片机最小系统和I/O口的内部结构,并正确使用51单片机I/O口资源。 正确使用MedWin软件的新建文件、保存、编辑程序、编译、单步调试、生成代码等功能。 正确理解程序设计框架、三种基本结构,掌握ORG、END、BIT等伪指令的使用方法。, 正确使用MOV传送指令、JB/JNB等位操作指令和LJMP/SJMP/AJMP等跳转指令。 正确使用Prot

2、eus仿真软件调试单个发光二极管的控制电路。 设计和制作单个发光二极管控制系统,对电路中的故障现象进行分析判断并加以解决,通过调试得到正确结果。,工作任务 测试单个发光二极管控制电路并对结果进行描述。 设计、制作与调试单个发光二极管控制系统。 撰写设计文档与测试报告。通过实例一的学习,我们了解了单片机是什么以及使用它的基本方法,但是单片机的资源非常多,用途很广,利用它可以完成的工作也非常多,为了能够更好地学会怎样使用单片机,我们先从它的外围开始学习。,2.1 单个发光二极管的点亮 学习目标 理解单个发光二极管控制电路的构成、工作原理和电路中各元器件的作用,并能对电路进行分析和计算。 理解51单

3、片机最小系统和I/O口的内部结构,并正确使用51单片机I/O口资源。 理解ORG、END、BIT等伪指令的含义并掌握其使用方法。 掌握位寻址方式,正确使用MOV传送指令。 工作任务 测试单个发光二极管控制电路并对结果进行描述。,2.1.1 数制与编码单片机内部采用的数据系统和计算机的一样,都是二进制,因此,经由单片机计算与处理的数值、字母、符号等都必须采用二进制代码表示,而我们日常所熟悉的是十进制数,要想和单片机沟通,就必须用它能够理解的“话”,所以我们首先要弄清楚它们之间的联系,才能更好地应用。注意:如果你已经掌握了计算机基础知识,那么你可以跳过这一节,直接学习下一节的内容。,1数制数制即进

4、位计数制,常用的数制有二进制、十进制和十六进制。在书写中为了以示区分,通常后缀用不同的字母来代表不同的进制,D(Decimal)代表十进制(可省略),B(Binary)代表二进制,H(Hexadecimal)代表十六进制。1) 十进制十进制数的两个基本特点如下:(1) 基数为10,每一位数是09这十个数码中的一个。(2) 逢十进一,借一当十。,任意一个十进制数的按权展开式为例如,十进制数326.75按权展开为,2) 二进制二进制数的两个基本特点如下:(1) 基数为2,每一位数只能是0和1这两个数码中的一个。(2) 逢二进一,借一当二。,任意一个二进制数的按权展开式为例如,二进制数1101.01

5、B按权展开为,3) 十六进制十六进制数的两个基本特点如下:(1) 基数为16,每一位数是09、AF这十六个数码中的一个。(2) 逢十六进一,借一当十六。十六进制数中,A代表10,B代表11,C代表12,D代表13,E代表14,F代表15。,任意一个十六进制数的按权展开式为例如,十六进制数4B3.2EH按权展开为注意:编写程序代码需使用十六进制数时,如果数的第一个字符是字母,则字母前必须加上“0”,例如0AFH。,2数制间的转换1) 二进制数、十六进制数转换为十进制数二进制数、十六进制数转换为十进制数的方法很简单,只需将待转换的数按权展开,求出各加权系数的和,即可得到相对应的十进制数。例2-1

6、将二进制数1100.01B转换成十进制数。解: 例2-2 将十六进制数E2.4CH转换成十进制数。解:,2) 十进制数转换为二进制数、十六进制数十进制数转换为二进制数或十六进制数时,需要将整数部分和小数部分分开进行转换,再将结果组合在一起。其中,整数部分的转换方法是“除基数取余逆序排列”,小数部分的转换方法是“乘基数取整顺序排列”。下面通过具体数据举例进行说明。,例2-3 将十进制数14.375转换成二进制数。解:(1) 将整数部分“14”用“除2取余逆序排列”,即将“14”逐次除以2,依次记下余数,直至商为0。其中,第一次除得的余数为二进制数整数部分的最低位,最后一次除得的余数为二进制数整数

7、部分的最高位。得到,14=1110B。,(2) 将小数部分“0.375”用“乘2取整顺序排列”,即将“0.375”逐次乘以2(每次都是小数部分进行乘2),依次记下积的整数部分,直至积的小数部分为0。其中,第一次记下的数为二进制数小数部分的最高位,最后一次记下的数为二进制数小数部分的最低位。得到,0.375=0.011B。因此,14.375=1110.011B。,例2-4 将十进制数205.296 875转换成十六进制数。解:(1) 整数部分转换:得到,205=CDH。,(2) 小数部分转换:得到,0.296 875=0.4CH。因此,205.296 875=CD.4CH。,3) 二进制数与十六

8、进制数间的相互转换将十六进制数中的每一位数码分别用4位二进制数码表示,即可将该十六进制数转换成二进制数,转换结果中最左侧和最右侧的0可以舍去;相反,将二进制数转换成十六进制数的方法是以小数点为界,分别向左、向右每4位二进制数码用一位十六进制数码表示,不足4位的以0补足,其中小数点左侧部分左补0,小数点右侧部分右补0。,例2-5 将十六进制数4A2.3CH转换成二进制数。解:因此,4A2.3CH9 9= 010010100010.001111B。,例2-6 将二进制数11001001011.010111B转换成十六进制数。解:因此,11001001011.010111B=64B.5CH。为了方便

9、读者记忆,特将0F这十六个数码与二进制数、十进制数的对应关系制成表2-1。,3编码我们将字和词语按照一定的规律组合起来就构成了能够随意表达心意的句子。二进制代码就是单片机的“字”和“词语”,将它们按一定规律编排,使每组代码具有特定含义,这就是单片机中的编码。下面介绍两种计算机中常用的编码。,1) 二十进制编码二-十进制编码又称BCD(Binary Coded Decimal)编码,是指每一位十进制数码均用一组二进制数码来表示的编码。每一位十进制数码(09)可用4位二进制数码表示,也可用8位二进制数码表示(高4位全为0),前者称为压缩BCD码,后者称为非压缩BCD码。对于压缩BCD码,根据编码的

10、选取方法不同,又可分为8421码、5421码、余3码等。其中,最常用的是8421BCD码。表2-2列出了十进制数码与8421BCD码之间的对应关系。,注意:8421BCD码必须在右下角进行标注,否则易与二进制数混淆。例如,1000 0011作为8421BCD码的值是83,而作为二进制数时,其值为131。在以后介绍的实例中,我们经常会利用BCD码格式的数据,所以现在一定要弄明白。例2-7 将十进制数47.85转换成8421BCD码,将8421BCD码1001 0111.0010转换成十进制数。解:,2) 字符编码计算机只能对二进制代码进行处理,因此,在计算机内各类字符(包括字母、数字和符号)也必

11、须用二进制代码来表示。目前采用得最普遍的是美国国家信息交换标准字符码,即ASCII码(American Standard Code for Information Interchange),如表2-3所示。,ASCII码采用7位二进制代码对字符进行编码,共有128种不同的组合状态,可以对应表示128个字符,其中包括52个大、小写英文字母,10个阿拉伯数字,32个通用控制符号和34个专用符号。例如,阿拉伯数字8用ASCII码表示为0111000B(38H),大写英文字母Z用ASCII码表示为1011010B(5AH)。虽然标准ASCII码是7位编码,但由于计算机基本处理单位为字节(1字节=8位)

12、,因此一般仍以一个字节来存放一个ASCII码。每一个字节中多余出来的一位(最高位)在计算机内部通常保持为0(在数据传输时可用作奇偶校验位)。注意:单片机中最小的数据单位是位,8位二进制的数据为一个字节,16位二进制的数据为一个字(两个字节)。,4带符号数的表示计算机中的所有信息都是用二进制代码表示的,有符号数也不例外,通常把数(1个字节)的最高位作为符号位,如图2-1所示。在计算机中,带符号数有三种表示方法:原码、反码和补码。,图2-1 符号位指示图,1) 原码正数的符号位用“0”表示,负数的符号位用“1”表示,这种表示法称为原码。例如:X1=+18=+0010010,则X1原=0001001

13、0X2=18=0010010,在X2原=100100100的原码是不唯一的:+0原=00000000,0原=10000000。8位二进制原码所能表示的数值范围是:1111111101111111,即127+127。,2) 反码如果是正数,则其反码与原码相同;如果是负数,则其反码除符号位为1外,其他各数位均将1转换为0,0转换为1。例如:+18原=00010010,则+18反=0001001018原=10010010,则18反=11101101+0原=00000000,则+0反=000000000原=10000000,则0反=111111118位二进制反码所能表示的数值范围是:100000000

14、1111111,即-127+127。,3) 补码如果是正数,则其补码与原码、反码相同;如果是负数,则其补码为反码加1。例如:8位二进制补码所能表示的数值范围是:1000000001111111,即-128+127。,【练习】项目:数的各进制形式的转换。项目编号:EX2_1。任务要求:将十进制数83分别转换为二进制、十六进制和8421BCD码。转换结果:(83)D=(1010011)B=(53)H=(10000011)BCD,2.1.2 单个发光二极管控制电路的设计8051虽然仅是一块芯片,但它包括了构成计算机的基本部件,因此可以说它是一台简单的计算机。图2-2所示为MCS-51单片机的内部结构

15、框图。图中,单片机内部各个部分(CPU、RAM、ROM、I/O接口等)由总线(共分为地址总线AB、数据总线DB、控制总线CB三大类)紧密地联系在一起。这就像我们人体的各个部位都通过神经受大脑的控制,心脏通过周身的血管将新鲜的血液送到身体的各个部位一样。,图2-2 MCS-51单片机的内部结构框图,1中央处理器CPUCPU相当于是单片机的大脑和心脏,负责控制、指挥和调度整个单元系统协调地工作,完成运算和控制输入/输出功能等操作。1) MCS-51单片机CPU的功能部件MCS-51单片机的CPU主要由运算器和控制器等部件组成,如图2-3所示。,图2-3 CPU的组成部件,(1) 运算器。单片机进行

16、的一切算术/逻辑运算均在运算器内部完成。运算器主要包括ALU(算术逻辑部件)、累加器ACC、寄存器B、程序状态字寄存器PSW、暂存器TMP1和TMP2、处理位操作的布尔处理器等,如图2-3所示。以下对其中三个专用寄存器作简单介绍。 累加器ACC(Accumulator)。累加器ACC(助记符为A)是一个8位特殊功能寄存器,它在CPU中的工作最为频繁。MCS-51指令系统中多数指令的执行都需要用到它。, 寄存器B。寄存器B也是一个8位特殊功能寄存器,主要用于乘法和除法操作。在乘法指令中,两个操作数分别取自A和B,运算结果的低8位存放在A中,高8位存放在B中。在除法指令中,被除数取自A,除数取自B

17、,运算结果商数存放在A中,余数存放在B中。 程序状态字寄存器PSW(Program Status Word)。程序状态字寄存器PSW共8位,主要用于存放程序运行过程中的有关状态信息。寄存器各位的定义如图2-4所示,其中PSW.1是保留位,未使用。,图2-4 程序状态字寄存器各位的定义,CY(PSW.7)进位标志(助记符为C)。此位有两个功能:一是当累加器A的最高位有进位或借位时,硬件自动将该位置位(即CY=1),否则该位自动清零;二是在位操作中作“位累加器”使用。AC(PSW.6)辅助进位标志。进行加、减运算时,当累加器A的低4位数向高4位数有进位或借位时,AC自动置位,否则自动清零。F0(P

18、SW.5)用户自定义标志。供用户自行定义,用作标记,可用软件使其置位或清零。,RS1、RS0(PSW.4、PSW.3)寄存器组选择控制位。MCS-51单片机片内RAM的00H1FH共32个字节被均匀地分为四组,每组相当于八个8位寄存器,均以R0R7来命名。CPU只要根据用户定义的RS1和RS0即可选中其中一组寄存器。对应的编码关系如表2-4所示。,OV(PS的W.2)溢出标志。带符号数进行加减运算时,若结果超出了累加器A所能表示的符号数的有效范围(128+127),则产生溢出,OV自动置1,表明运算结果错误;如果OV自动清零,则表明没有产生溢出,运算结果正确。进行乘法运算时,若乘积超过255,

19、则OV自动置1,表明乘积存放在A和B两个寄存器中;若OV为0,则说明乘积没有超过255,乘积只存放在累加器A中。,进行除法运算时,若除数为0,则OV自动置1,运算不被执行,否则OV清零。P(PSW.0)奇偶校验位。每个指令周期都由硬件来置位或清零,以表示累加器A中“1”的位数的奇偶性。若“1”的位数为奇数,则P自动置位,否则清零。该标志位常用于检验数据传输的正确性。,(2) 控制器。控制器是CPU的神经中枢,它包括定时控制逻辑电路、指令寄存器、指令译码器、程序计数器PC(Program Counter)、数据指针DPTR、堆栈指针SP(Stack Pointer)等。 程序计数器PC。程序计数

20、器在物理上是独立的,共16位,用于存放即将执行的指令地址,可对64KB程序存储器直接寻址。PC有自动加1功能,即完成了一条指令的执行后,其内容自动加1,并指向下一条指令。PC本身并没有地址,因而不可寻址,用户无法对它进行读/写,但是可以通过转移、调用、返回等指令改变其内容,以控制程序按我们的要求去执行。微型计算机的基本工作过程如下所述。,计算机如何按照我们的要求去执行任务呢?叫人做事,只要对他发布命令就可以,要计算机做事情,也得向它发布命令。当然,计算机能听得懂的命令和我们平时理解的命令不同,我们把它们称为指令。一条条指令组合在一起就构成了程序。计算机工作的过程实质上是执行程序的过程。在计算机

21、工作时,CPU根据指令顺序,一条一条地执行,直到遇到结束运行的指令为止,从而完成一项特定的任务。计算机执行指令的过程又分为取指令、分析指令和执行指令三步,如图2-5所示,即从存储器中取出要执行的指令并送到CPU中,分析指令要完成的动作,然后执行操作。,图2-5 程序执行过程,下面以“MOV A,#60H”为例,简要说明指令在CPU中的执行过程,其指令执行示意图如图2-6所示。,图2-6 “MOV A,#60H”指令执行示意图,“MOV A,#60H”对应的机器代码为0111010001100000B,假设高8位(74H)和低8位(60H)分别存放于程序存储器的30H和31H两个单元中。a. 取

22、指令过程。(a) 程序计数器PC中装入地址30H,并通过AB(地址总线)送到存储器的地址译码器,选中程序存储单元30H。然后PC自动加1,为取下一个字节做好准备。(b) CPU通过CB(控制总线)向存储器发出读取数据的控制信号。(c) 程序存储器中被选中的30H单元的内容(74H)送到DB(数据总线)上,CPU读入指令代码。,b. 分析指令、执行指令过程。(a) CPU读取指令代码后进行译码。(b) CPU根据译码结果知道74H表示把它下面一个单元的操作数送至累加器A,因此产生相应的控制信号。(c) 执行指令所规定的操作,实现将31H单元内的操作数60H通过DB送至累加器A中。其他指令的执行过

23、程与此类似。, 数据指针DPTR。数据指针DPTR是一个16位的专用寄存器,也可以按两个8位寄存器来使用,即高位字节寄存器DPH和低位字节寄存器DPL。DPTR主要是用来保存16位地址,在访问64KB外部数据存储器时,可作为间接寻址的地址寄存器使用;在访问程序存储器时,可用作基址寄存器。, 堆栈指针SP。堆栈是内部RAM的一个区域,用来存储数据。它的特殊之处在于存取数据必须遵循“先进后出,后进先出”的原则,即只能从栈顶一端存取数据。堆栈指针SP就是指向栈顶的指针。每当执行一次PUSH(入栈)指令时,SP就在原来值的基础上自动加1,每当执行一次POP(出栈)指令,SP就在原来值的基础上自动减1。

24、数据入栈和出栈的过程如图2-7所示。,图2-7 数据入栈和出栈的过程,堆栈用于中断操作和子程序调用时保存数据,也称为断点保护和现场保护。子程序或中断服务程序执行完后,CPU还是要回到主程序中,因此,在转入子程序或中断服务程序前,必须先将现场的数据压入堆栈中保存起来,否则返回时,CPU并不知道原来的程序执行到哪一步,原来的中间结果如何。返回时,再从堆栈中恢复当时的数据。,堆栈指针SP的初始值称为栈底,它确定了堆栈的起始位置。例如,单片机复位后SP的值为07H,如果不加更改,则入栈数据将从08H单元开始存储。但是08H1FH这个区域正是MCS-51单片机的工作寄存器区,经常要被使用,这会造成数据的

25、混乱。所以,通常在程序的开始阶段就用指令把栈底设在片内RAM中地址值较高的地方,即把SP的初始值设得较高,如5FH等。,2) MCS-51单片机CPU的时序前面我们提到,单片机执行指令的过程就是顺序地从程序存储器中取出指令,一条一条地执行,然后进行一系列的微操作控制来完成各种指定的动作。那么,如何来对这些复杂的步骤进行统一协调的管理呢?在此我们引出时序的概念。单片机的时序就是CPU在执行指令时所需控制信号的时间顺序,为了保证各部件间的同步工作,单片机内部电路应在唯一的时钟信号下严格地按时序进行工作。为了便于对CPU时序进行分析,一般按指令的执行过程规定了几种周期,即时钟周期、机器周期和指令周期

26、。,(1) 时钟周期。时钟周期也称为振荡周期,就是单片机外接晶振的倒数(例如12 MHz的晶振,它的时钟周期就是1/12 s),是计算机中最基本、最小的时间单位。(2) 机器周期。CPU完成一种基本操作所需要的时间称为机器周期。一个机器周期包含12个时钟周期,分为6个状态,分别用S1S6表示。每个状态又分为两拍,分别用P1和P2表示。因此,一个机器周期中的12个时钟周期表示为S1P1、S1P2、S2P1、S6P2,如图2-8所示。如果系统时钟的晶振频率为12 MHz,则它的机器周期为1 s。,图2-8 机器周期时序,(3) 指令周期。指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成

27、。指令不同,所需的机器周期数也不同。MCS-51单片机的指令可以分为单周期指令、双周期指令和四周期指令三种,它们的执行时间依次为1个、2个和4个机器周期。一般地,单字节指令和双字节指令都可能是单周期和双周期,而三字节指令都是双周期,只有乘除法指令是单字节四周期。,(4) CPU取指令/执行时序。指令的执行分取指令和执行两个阶段,取指令的时间与地址锁存信号(ALE)有关。ALE信号在每一个机器周期出现两次,第一次在S1P2、S2P1期间,第二次在S4P2、S5P1期间,其频率为系统晶振频率的1/6。每当ALE信号出现时,CPU取指令一次。图2-9所示为几种指令的时序。,图2-9 MCS-51单片

28、机的取指令时序,对于一字节单周期指令,第一次ALE信号时取指令,第二次ALE信号时仍然取指令,但此次所取数据无效,到一个机器周期结束时执行完毕。对于两字节单周期指令,在两次ALE信号时分别读入指令的两个字节,一个机器周期结束时执行完毕。对于一字节双周期指令,除第一次ALE信号时读入的数据有效外,其余三次读入的数据均无效,到两个机器周期结束时执行完毕。依次类推,对于两字节双周期指令,前两次ALE信号时读入有效数据,后两次读入的数据均无效。注意:ALE信号在大部分时间都是周期性的,只有在访问外部RAM时例外,其第二个机器周期的第一个ALE信号并不出现。,2存储器存储器是单片机内用于存储数据的地方。

29、为了便于大家理解,可以把一个存储器看做是一个大柜子,这个大柜子里有许多小抽屉,每一个小抽屉都可以用来存放一个数据。51系列单片机处理的数据都是以字节(byte)为单位的,每一字节包含8位二进制数字(0或1),所以,每一个小抽屉里又分成了8格。如果要在单片机内存储一个数据“6”,也就是“00000110”,则只要在“抽屉”格子里对应地存入“1”或“0”就可以了(“1”或“0”依靠电平的高或低来实现)。,存储器结构有两种类型:一种是程序存储器和数据存储器统一编址,称为普林斯顿结构;另一种是程序存储器和数据存储器分开编址,称为哈佛结构。MCS-51单片机采用的是哈佛结构。MCS-51单片机的存储器结

30、构如图2-10所示,可分成三个部分,即程序存储器、内部数据存储器和外部数据存储器。,图2-10 MCS-51单片机的存储器结构,1) 程序存储器单片机应用系统中的程序存储器一般用半导体只读存储器,即ROM(Read Only Memory)。这种存储器在计算机运行时只能对其执行读操作(即只能把里面的数据读出来,而不能把外部的数据写进去),即使整机掉电后存于其中的信息也不会丢失,因此,程序存储器主要用于存放不需要经常改动的程序和常数表格。,参照图2-10可知,MCS-51单片机的程序存储器可以分为片内和片外两部分。片内有4KB程序存储空间,相当于有4 K个不同的字节可用来存放数据。那么,如何对这

31、4 K个字节进行区分呢?类似于宾馆里每一间房都有一个不同的房门号,我们对这4 K个字节也进行了地址分配,从0000H到0FFFH,刚好4 K个不同的地址代码,一一对应,可以通过地址总线来进行寻址。同理,片外有64 KB的程序存储空间,每一个字节也对应一个地址代码,从0000H开始编址,到FFFFH为止。在地址0000H0FFFH内,片内、片外地址有重叠,由引脚信号来控制内、外程序存储器的选择。,(1) 当引脚接高电平时,CPU可访问内部和外部ROM,并且程序自片内程序存储器开始执行,PC值超出片内ROM容量时,会自动转向片外程序存储器中的程序。(2) 当引脚接低电平时,直接寻址外部ROM,且从

32、0000H开始,系统全部执行片外程序存储器中的程序。,MCS-51系列单片机程序存储器分为系统使用区和用户使用区,其中0000H002AH为系统使用区,其余为用户使用区。系统使用区中有6个单元地址被固定地用于特定程序的入口地址,其中0000H称为复位单元,单片机复位后(PC)0000H,从而CPU总是从0000H单元开始重新执行程序。其余5个单元用作5个中断源的中断服务程序入口地址,具体定义见表2-5。,在编程时,通常在这些入口地址开始的两三个地址单元中放入一条转移类指令,以使相应的程序在转移后的目标地址开始存放。例如,从000BH地址单元开始,放入一条转移到0100H地址单元的转移类指令,则

33、定时器/计数器0的中断服务程序就从0100H地址单元开始存放。,2) 内部数据存储器数据存储器也称为随机存取存储器(RAM),用户既可以从里面读数据,也可以往里面写数据,因此通常用于存放运算的中间结果、数据缓冲以及设置特征标志等。MCS-51单片机的数据存储器在物理上和逻辑上都分为两个地址空间:一个是内部数据存储器,另一个是外部数据存储器。,内部数据存储器共有256B存储空间,但只有低128B(地址为00H7FH)是真正的数据存储空间,可供用户进行读或写操作,高128B(地址为80HFFH)是单片机的特殊功能寄存器区。(1) 内部数据存储区。内部RAM的128B地址空间分成不同的区域:工作寄存

34、器区(00H1FH)、位寻址区(20H2FH)、堆栈和数据缓冲区(30H7FH),如图2-11所示。,图2-11 内部数据存储区, 工作寄存器区(00H1FH)。此区共32字节,又可分为4组,每组8个字节,而每一个字节就是一个工作寄存器,可存放一个8位的数据。每组包含的8个工作寄存器分别命名为R0R7。工作寄存器的使用相当频繁,且每一个工作寄存器组都可被选为CPU的当前工作寄存器组,用户可以通过改变程序状态字PSW中的RS1、RS0两位来指定,具体对应关系如表2-6所示。, 位寻址区(20H2FH)。此区共16字节,每一字节除了具有字节寻址功能外,其每一位都可以单独寻址。位地址为00H7FH,

35、共128位,分别对应于字节地址20H的D0位至2FH的D7位,如表2-7所示。MCS-51单片机有丰富的位操作指令,可以进行置1、清0、取反等操作。, 堆栈和数据缓冲区(30H7FH)。此区共80字节,通常作为堆栈或数据缓冲区使用。用户可根据需要将堆栈设置在这个范围内(30H7FH),比如将SP的初始值定义为2FH,则堆栈数据从30H地址单元开始存放。思考:看到上面对字节地址和位地址的编号,大家可能会有这样的疑问,即它们的编号都是重复的,那怎么区分呢?这个问题我们将在2.1.3节中给出答案。,(2) 特殊功能寄存器区。MCS-51单片机共有21个特殊功能寄存器,简称为SFR(Special F

36、unction Registers)。它们离散地分布在80HFFH的地址空间内。这些特殊功能寄存器包括累加器A、寄存器B、程序状态字寄存器PSW、定时器/计数器、I/O接口锁存器以及各种控制寄存器等,其地址分配见表2-8。,从表2-8可知,有些特殊功能寄存器不仅可以按字节寻址,还可按位寻址(它们的字节地址均可以被8整除),位地址范围是80HF7H。这些位可用多种形式表示。例如,程序状态字寄存器中的进位标志位可以用下列几种不同的形式表示:CY(位助记符)D7H (直接位地址)PSW.7 (寄存器.位)D0H.7 (单元地址.位)一般采用位助记符和“寄存器.位”这两种形式表示。,3) 外部数据存储

37、器MCS-51单片机具有扩展64KB外部数据存储器的能力。外部数据存储器编址为0000HFFFFH,有一部分地址与内部数据存储器重叠(0000H0FFFH),由不同的指令形式来区分。,4) 数据传送指令从程序存储器中读取数据,或者对内部、外部数据存储器进行数据读/写操作时,采用的指令形式各不相同。下面我们通过几个例题来说明。(1) 读程序存储器。例2-8 将程序存储器1002H地址单元的内容传送到累加器A。,指令:MOV DPTR, #1000H ;将数据1000H传送到DPTR MOV A, #02H ;将数据02H传送到A MOV C A, A+DPTR ;将ROM中1002H地址单元的内

38、容传送到A说明:MOVC是程序存储器数据传送指令的助记符;累加器A是传送的唯一目的地址(不可将程序存储器中的内容直接传送到其他地址单元或寄存器);A+DPTR指出以DPTR中的内容(1000H)和累加器A中的内容(02H)相加的和(1002H)为地址的存储器单元中的内容,是传送的源操作数;#表示后面跟的是数据而不是地址。思考:可以将DPTR和A中的数据换成其他吗?,(2) 读/写内部数据存储器。例2-9 将内部数据存储器30H单元的内容传送到31H单元。指令:MOV 31H, 30H ;将内部RAM中30H单元的内容传送到31H单元或者: MOV A, 30H ;将内部RAM中30H地址单元的

39、内容传送到A(读) MOV 31H,A ;将A的内容传送到内部RAM中31H地址单元(写),说明:MOV是内部数据存储器数据传送指令的助记符。内部数据存储器中两个地址单元的内容可直接进行传送(目的地址放前面,源地址放后面),也可通过中间寄存器进行间接传送(比如累加器A、寄存器Rn等)。注意,30H前不加“#”表示30H是一个地址而不是数据,真正进行传送的是30H这个地址单元内的数据。思考:利用寄存器R2来实现本例的要求。,(3) 读/写外部数据存储器。例2-10 将外部数据存储器40H单元的内容传送到2000H单元。指令:MOV R0, #40H ;将数据40H传送到R0 MOVX A, R0

40、 ;将外部RAM中40H地址单元的内容传送到A(读) MOV DPTR, #2000H ;将数据2000H传送到DPTR MOVX DPTR, A ;将A的内容传送到外部RAM中2000H地址单元(写),说明:MOVX是外部数据存储器数据传送指令的助记符,外部RAM中两个地址单元的内容不可直接进行传送,必须通过累加器A,而且,无论是将外部RAM中的数据读到累加器A,还是将累加器A中的数据写到外部RAM,都必须采取间接寻址的方式。其中,寄存器R0或R1专用于8位地址的外部RAM存储单元(00HFFH);DPTR专用于16位地址的外部RAM存储单元(0100HFFFFH)。思考:读者可用MedWi

41、n软件进行试验,观察仿真结果。,3并行输入/输出接口并行输入/输出接口电路是单片机中不可缺少的组成部分,它就像我们的手和脚一样,我们可以通过手和脚触摸到外界的信息,也可以通过手和脚来控制外界的一些东西。那么单片机的I/O怎样实现它的功能呢?下面我们举例说明。假如要利用单片机来点亮一只发光二极管,显然,这只发光二极管必须与单片机的某个引脚相连,这就必须用到并行输入/输出接口。MCS-51系列单片机内部有4个并行双向I/O接口电路:P0、P1、P2、P3。每一个接口电路各有8位,分别用P.0、P.1、P.7表示,都有独立的引脚。如果我们将其中的一位接口P1.3(4号引脚)与发光二极管相连,如图2-

42、12所示(R11是限流电阻),则当4脚是高电平时,发光二极管不亮,当4脚为低电平时,发光二极管点亮。,如何让P1.3变高或变低呢?我们可以通过指令来向单片机发布命令。让一个引脚输出高电平的指令是SETB,让另一个引脚输出低电平的指令是CLR。因此,我们要P1.3输出高电平,只要写SETB P1.3,要P1.3输出低电平,只要写CLR P1.3就可以了。此外,指令CPL可以改变引脚原来的输出状态,假如P1.3原来输出高电平,则经过CPL P1.3之后,P1.3输出低电平,反之亦然。,图2-12 单个发光二极管点亮控制原理图,通过这些I/O接口,单片机可外接按键、发光二极管、显示器等外围设备,还可

43、以进行系统扩展。下面详细介绍它们各自的内部结构及工作原理。,1) P0口P0口除了作通用I/O口之外,还可在外部扩展存储器时分时复用为地址/数据总线。P0口的位结构图如图2-13所示。P0口的位电路结构由以下几个部分组成:1个数据输出锁存器,用于进行输出数据的锁存;2个三态输入缓冲器,分别用于锁存器和引脚数据的输入缓冲;1个多路开关MUX,它的一个输入来自锁存器,另一个输入是地址/数据信号的反相输出,在控制信号的控制下能实现对锁存器输出端和地址/数据线之间的切换;由两只场效应管组成了输出驱动电路。,图2-13 P0口的位结构图,当控制信号线为低电平,P0口用作通用I/O口时,需外加上拉电阻。输

44、出(写)时,内部总线上的数据在写信号的控制下,先写入锁存器,经端和V2两次反相后立即以原来的逻辑状态反映到外部引脚;输入(读)时,为保证引脚上的信号能正常读入,应先向锁存器写1,令V1、V2截止,外部引脚信号经输入缓冲器送到内部数据总线。当控制信号线为高电平时,P0口用作外部扩展存储器的数据总线和低8位地址总线。在内部总线信号的作用下,V1、V2交替导通与截止,将数据/地址信息反映到外部引脚。外部数据输入时,经输入缓冲器送到内部数据总线。此时,P0口就不能再作I/O口使用了。,2) P1口P1口往往只作为通用I/O口使用,其位结构图如图2-14所示。P1口的位电路结构由以下几个部分组成:一个数

45、据输出锁存器,用于输出数据的锁存;两个三态输入缓冲器,一个用于读锁存器,另一个用于读引脚;数据输出驱动电路,由场效应管和内部上拉电阻组成。P1口作为输出口时,无需外加上拉电阻;作为输入口时,也必须先向锁存器写入1,原理与P0口相同。,图2-14 P1口的位结构图,3) P2口P2口既可用作通用I/O口,又常用作高8位地址总线。P2口的位结构图如图2-15所示。P2口的位电路结构由以下几个部分组成:一个数据输出锁存器,用于输出数据的锁存;两个三态输入缓冲器,一个用于读锁存器,另一个用于读引脚;一个多路开关MUX,它的一个输入来自锁存器的Q端,另一个输入来自内部地址的高8位;数据输出驱动电路,由非

46、门、场效应管和内部上拉电阻组成。作为通用I/O口使用时,P2口的功能与P1口一样;用作高8位地址输出线应用时,P2口与P0口输出的低8位地址一起构成16位的地址总线,可以寻址64 KB地址空间。当P2口作高8位地址输出口时,其输出锁存器原锁存的内容保持不变。,图2-15 P2口的位结构图,4) P3口P3口是双功能8位输入/输出口,内部结构中增加了第二输入/输出功能,见表2-9。如图2-16所示,P3口的位电路结构由以下几个部分组成:一个数据输出锁存器,用于输出数据的锁存;3个三态输入缓冲器,一个用于读锁存器,另外两个用于读引脚和第二功能数据的缓冲输入;数据输出驱动电路,由与非门、场效应管和内

47、部上拉电阻组成。,当第二输出功能信号为高电平时,P3口作为I/O口使用,输入/输出过程与其他口相同;用作第二输出功能时,应先向锁存器写入1,第二输出功能信号经与非门、场效应管输出到引脚;用作第二输入功能时,也应先向锁存器写入1,而且第二输出功能信号自动为1,与非门输出0信号,场效应管截止,引脚信号由三态门输入。这样,不管是作为通用I/O口使用还是第二功能信号输入,电路中的锁存器输出和第二输出功能信号线均应置1。P3口的某位不作为第二功能使用时,则自动处于通用输出/输入口功能。,图2-16 P3口的位结构图,其他功能部件在后续内容中介绍。4单片机复位复位是单片机的初始化操作,复位后,片内各寄存器

48、的状态如表2-10所示。复位不影响内部RAM中储存的数据。复位后,PC=0000H,即指向程序存储器0000H地址单元,使CPU从0000H地址单元开始重新执行程序,因此,当单片机系统运行出错或操作错误使系统处于死锁状态时,可按复位键重新启动。,根据前述的单片机复位条件(RST端必须至少保持两个机器周期的高电平),通常采用上电自动复位和按键手动复位两种方式。1) 上电自动复位上电自动复位电路利用RC充电来实现复位条件,如图2-17(a)所示。应根据石英晶体振荡频率来合理选取参数。2) 按键手动复位图2-17(b)所示电路为兼具了上电自动复位和按键手动复位的复合电路。程序运行时,通过复位按键可强

49、制CPU进入复位状态。,图2-17 单片机复位电路 (a) 上电自动复位电路;(b) 复合电路,【练习】项目:单灯点亮控制电路的绘制。项目编号:EX2_2。任务要求:在Proteus平台中绘制单灯点亮控制电路,并撰写练习报告(格式要求见附录A)。设计设备与软件:计算机1台,Proteus软件1套。,设计步骤:(1) 打开Proteus软件。(2) 取用所需元器件,并摆放好位置。(3) 连接好电路。(4) 计算电路中的主要参数值,并设置好相关器件。仿真图如图2-18所示。,图2-18 单个发光二极管点亮控制电路的原理图,1参数计算发光二极管的反向击穿电压约5 V。它的正向伏安特性曲线很陡,使用时

50、必须串联限流电阻以控制通过管子的电流。限流电阻R可用下式计算:式中,E为电源电压,UF为LED的正向压降,IF为LED的一般工作电流。普通发光二极管的正向压降一般为1.01.6 V,一般工作电流为520 mA。,2调试结果为了确定限流电阻的阻值,假定所选发光二极管的正向压降为1.0V,限流电阻(R11)的阻值为 。,2.1.3 基本程序设计如果没有程序,那么单片机什么也不会做。程序是单片机的一组指令,经过编译和执行才能最终完成程序设计的动作。程序设计的最终结果是软件。1指令及指令系统概述指令是指挥MCS-51单片机工作的命令,是MCS-51单片机软件设计的基本单元。指令有以下两种表达式:(1)

51、 机器码指令:用二进制代码(或十六进制数)表示的指令称为机器码指令或目标代码指令。,(2) 汇编语言指令:为了方便记忆,便于程序的编写和阅读,用助记符来表示每一条指令的功能。用助记符表示的指令不能被计算机硬件直接识别和执行,必须通过汇编程序把它变成机器码指令才能被机器执行。例如,MCS-51单片机执行操作:把数3FH传送到累加器A中,实现这种操作的汇编语言指令形式为:“MOV A,#3FH ;A#3FH,数3FH送A中”。其中,“#”是数3FH的标识符。这条指令的机器码指令为“74H 3FH”。,指令系统是MCS-51单片机的所有指令的集合。MCS-51系列单片机使用42种助记符,有51种基本

52、操作。通过助记符及指令的源操作数和目的操作数的不同组合构成了111条指令,其中单字节指令49条、双字节指令45条、三字节指令17条。从指令的执行时间来看,这111条指令为单机器周期(12个时钟振荡周期)指令64条,双机器周期(24个时钟振荡周期)指令45条,四机器周期(48个时钟振荡周期)指令2条。,1) MCS-51汇编语言指令格式 指令格式是指令的书面表达形式。MCS-51汇编语言指令格式与其他汇编语言格式类似,通常由标号、操作码、操作数和注释等项组成,其一般表示格式如下: 标号:操作码助记符目的操作数,源操作数;注释 要点:操作码与操作数之间必须用空格分隔,操作数与操作数之间必须用逗号“

53、,”分开,带方括号的项可有可无,有时可以省略。指令中所用的符号必须在英文输入状态下输入,而不能在中文输入状态下输入。 例如: LOOP:MOVP1,#55H;(P1)#55H (2-1),指令中各项的意义如下:标号(指令(2-1)中的LOOP):指令的符号地址。MCS-51汇编语言中使用的标号由18个字符组成,标号中使用的字符可以是英文字符、阿拉伯数字和下划线,但第一个字符必须是字母。一条语句之前是否要冠以标号,要根据程序设计的需要而定。当某条指令可能被调用或作为转移的目的地址时,通常会给该条指令赋予标号。一旦给某条指令赋予了标号,在汇编过程中将给出该标号的实际地址,并且该标号可作为其他指令的

54、操作数使用。,要点:标号后面必须加上冒号“:”,标号与冒号之间不能有空格,冒号与操作码之间可以有空格;标号不能与汇编语言中已定义的符号名冲突,如指令助记符、寄存器名、伪指令;标号只在本程序中有效,并且在同一个程序中不能在不同的指令前使用同一个标号。这就好像我们每个人都有一个名字,如果和别人重名的话就很麻烦了,所以要记住,在同一程序设计中,不同指令前的标号是一定不能重名的。,操作码(指令(2-1)中的MOV):表示指令执行的功能,用指令助记符或伪指令形式给出,一般为英语单词的缩写。操作数(指令(2-1)中的P1和#55H):指令操作的对象,即参与操作的数据或地址。目的操作数和源操作数的书写顺序不

55、能颠倒。操作数可以是数字(地址、数据),也可以是标号或寄存器名等。,要点:指令中的数据可以是十进制、二进制、八进制、十六进制和字符串。十进制数以D结尾(可以省略),如160D或160;二进制数以B结尾,如10100000B;八进制数以O或Q结尾,如240O或240Q;十六进制数以H结尾,若数据以字母开头,则其前必须加数字“0”,如0A0H。字符用 表示,字符串用“ ”表示,如M表示字符M的ASCII码。注释(指令(2-1)中的;(P1)#55H):对指令功能的说明,便于程序的阅读和维护。它不参与计算机的操作。,2) MCS-51系列单片机指令系统常用符号在MCS-51汇编指令系统中,规定了一些

56、指令格式描述中的常用符号,这就像我们使用的规范字一样。Rn选定当前寄存器区的寄存器R0R7,它在片内数据存储器中的地址由PSW中的RS1和RS0确定,n=07。Ri通过寄存器R0或R1间接寻址的片内RAM单元,为间接寻址前缀符号,i=0或1。direct直接地址,一个片内RAM单元地址(8位二进制数)或一个特殊功能寄存器。#data8位或16位常数,亦称立即数。#为立即数前缀符号。,Addr1616位目的地址,供LCALL和LJMP指令使用。Addr1111位目的地址,供ACALL和AJMP指令使用。rel8位带符号补码数(以二进制补码表示),常用于相对转移指令中的偏移量。bit位地址,内部R

57、AM或特殊功能寄存器中的直接寻址位。/位操作前缀,表示该位内容求反。X片内RAM的直接地址或寄存器。(X)表示以X为地址的单元中的内容。(X)表示用以X为地址的单元中的内容作为地址的单元中的内容。数据传送的方向。,3) 寻址方式指令中所规定的寻找操作数的方式就是寻址方式(Addressing Models)。一条指令属于何种寻址方式,通常是依据源操作数的数据形式而定的。MCS-51单片机中存放数据的存储器空间有4种形式,即内部数据存储器(RAM)、特殊功能寄存器(SFR)、外部数据存储器(RAM)和程序存储器(ROM),逻辑上分为3个存储空间,即内部RAM和SFR统一编址的256 B片内数据存

58、储器、片内外统一编址的64 KB程序存储器和64 KB片外数据存储器地址空间。为了区分指令中的数据所存储的空间,对于不同存储器的数据存取,采用了不完全相同的寻址方式。,MCS-51指令系统的寻址方式有7种:立即寻址(#data)、直接寻址(direct)、寄存器寻址(Rn)、寄存器间接寻址(Ri、DPTR)、基址变址寻址(A+)、相对寻址(rel)和位寻址(A)。寻址方式与存储空间结构是紧密相关的,表2-11描述了MCS-51汇编语言指令系统各种寻址方式与存储空间及寄存器的关系。,位寻址是指对内部RAM(20H2FH)和某些特殊功能寄存器SFR中的位地址空间进行位操作。在进行位操作时,借助进位

59、位C作为操作累加器。操作数直接给出位地址,然后根据操作码的性质对其进行位操作。例如:MOVC,3DH ;机器码为A2H,3DH3DH这一位是片内RAM中27H单元的第5位。现假设27H中原内容为20H,进位位C为0,那么执行此指令后,它将把3DH这一位的内容传送给进位位C,结果C的内容变为1。该指令执行示意图如图2-19所示。,图2-19 位寻址方式指令执行示意图,要点:位寻址方式中的位地址与直接寻址方式中的字节地址在形式上是完全一样的,它们是通过操作码来区分的。可以通过在MedWin中仿真以下程序来帮助理解位寻址方式指令的执行情况,仿真过程前面已经说明得很清楚,这里不再重复,下载程序到实验板

60、LJ_2,观察效果。ORG0000H;程序头LJMPMAINORG0030HMAIN:SETBP1.0;将P1.0置1SJMP$;“$”的含义为包含该符号的指令的地址,动态暂停END;程序尾,4) 位操作类指令位操作类指令也叫布尔运算类指令,这类指令操作的对象主要是直接地址位和I/O端口位,涉及的指令助记符包括:位数据传送(MOV)、位清零(CLR)、位取反(CPL)、位置位(SETB)、位逻辑与(ANL)、位逻辑或(ORL)和位条件转移(JC、JNC、JB、JNB、JBC)。,在MCS-51单片机内有一个布尔处理器,它以进位标志CY(程序状态字PSW的最高位即PSW.7)作为累加器C,以RA

61、M和SFR内的位寻址区的单元作为操作数,进行位数据的传送、修改和逻辑运算等操作。位地址的写法有4种,以进位标志C为例: 位地址名称C; 位地址0D7H; 直接地址位0D0H.7; 特殊功能寄存器的位地址PSW.7。,(1) 位数据传送指令: MOV C,bit MOV bit,C这两条指令主要用于对位操作累加器C进行数据传送,前一条指令的功能是将某指定位的内容送入位累加器C中,后一条指令是将C的内容传送到指定位。要点:位传送指令中的一个操作数必须是位累加器C,另一个可以是任何直接地址位。也就是说,位数据的传送必须经过C进行。下面通过例子加以说明。把P1.3状态传送到P1.7,指令如下: MOV

62、 C,P1.3 MOV P1.7,C,(2) 位状态控制指令: CLR C;C=0 CLR bit;bit=0 CPL C;C取反 CPL bit;bit取反 SETB C;C=1 SETB bit;bit=1这组指令的功能分别是清除、取反、置位进位标志C或直接寻址位,不影响标志位。,(3) 位逻辑操作指令: ANL C,bit ANL C,/bit ORL C,bit ORL C,/bit这组指令的功能是把进位C的内容与直接位地址的内容逻辑“与”、“或”后的操作结果送回到C中。斜杠“/”表示对该位取反后再参加运算,但不改变原来的值。,(4) 布尔条件转移指令: JC rel JNC rel

63、JB bit,rel JNB bit,rel JBC bit,relJC判进位标志为1转移,JNC判进位标志为0转移,否则顺序执行下一条指令;JB判位为1转移,JNB判位为0转移,JBC判位为1转移,并将该位清0,否则顺序执行下一条指令。,下面通过具体的例子加以说明。试判断累加器中数的正负,若为正数,则存入20H单元;若为负数,则存入21H单元。注意:在单片机中单字节的数据为有符号数,通常以数据的最高位为符号位,若符号位为0,则表示该数据为正数;若符号位为1,则表示该数据为负数。因此这里的问题主要是判断累加器中数据的最高位是0还是1。,START:JB ACC.7,LOOP;累加器符号位为1,

64、转至LOOP MOV 20H,A;否则为正数,存入20H单元 RET;返回LOOP:MOV 21H,A;负数存入21H单元 RET;返回,2伪指令伪指令不属于指令系统,不产生相对应的操作码,但伪指令可以协助将汇编语言源程序汇编成目标程序。伪指令可用于规定程序地址、建立数据表格等操作。常用的伪指令有6种,下面先介绍其中的3种。1) 设置起始地址伪指令ORG(Origin)伪指令格式如下:ORG 起始地址ORG是该伪指令的操作码助记符,指的是为后续源程序经汇编后的目标程序安排存放位置。操作数必须是16位的地址,它给出了指令存放的起始地址值。ORG伪指令总是出现在每段源程序或数据块的起始位置,地址应

65、按从小到大的顺序排列,不允许重叠。,例如:ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#5FH,2) 源程序结束伪指令END伪指令格式如下:ENDEND伪指令用在程序的末尾,表示程序已结束。在END之后指令不再汇编,如果程序缺少这条,则汇编时通常会给出“警告”提示。,3) 位地址符号伪指令BIT伪指令格式如下:字符名称 BIT 位地址例如:CLKBITP1.3;汇编后,位地址P1.3赋给变量CLKSETBCLK;CLK置1NOP;空操作CLRCLK;CLK清零,实际在P1.3产生一个下降沿脉冲信号,3汇编语言程序设计的基本步骤想要你的朋友能完全按照你的意图行动,就

66、必须通过有效的方式和他沟通。同样的道理,想要单片机完成某一具体的任务,就必须有序地给其应执行的指令序列。根据工作任务要求编排指令序列的过程称为程序设计。使用汇编语言进行程序设计时大致可分为以下几个步骤:(1) 熟悉、分析工作任务,明确设计要求及技术指标等,确定完成任务的算法和思路。(2) 根据算法和思路确定出设计步骤和顺序,将设计过程画成流程图。,(3) 确定数据、工作单元的数量,分配寄存器和存储单元。(4) 根据流程图编写程序代码。(5) 程序调试,找出错误并更正,再调试,直至完成设计要求。(6) 编写相关说明。,对于程序设计中流程图所用的图形符号,高级语言程序设计中阐述得非常详细,此处不再赘述。由于流程图是二维的平面图形,因此在表达逻辑关系时比较直观,有利于查错和修改。画流程图应先粗后细,只考虑逻辑结构和算法,少考虑具体指令,这样才能集中精力考虑程序的结构,从根本上保证设计的程序合理、可靠,然后进行指令代换。这样就很容易编出源程序,而且很少有大的返工。要点:在进行程序设计时,需具体问题具体分析,根据实

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

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

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


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