单片机及应用-第四章-80C51单片机语言程序设计_第1页
单片机及应用-第四章-80C51单片机语言程序设计_第2页
单片机及应用-第四章-80C51单片机语言程序设计_第3页
单片机及应用-第四章-80C51单片机语言程序设计_第4页
单片机及应用-第四章-80C51单片机语言程序设计_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

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

文档简介

第4章80C51单片机汇编语言程序设计主要内容:4.1单片机程序设计语言概述4.2汇编语言程序的基本结构形式4.380C51单片机汇编语言程序设计举例4.4单片机汇编语言源程序的编辑和汇编4.580C51单片机汇编语言伪指令4.1单片机程序设计语言概述4.1.1机器语言和汇编语言1、机器语言:直接用二进制代码指令表达的计算机语言。计算机可以直接识别,不需要进行任何翻译。每台机器的指令,其格式和代码所代表的含义都是硬性规定的。机器语言是其它各种程序设计语言的基础,但难记、难用、已出错。4.1.1机器语言和汇编语言2、汇编语言:用助记符和专门的语言规则表示指令的功能和特征的面向机器的程序设计语言。汇编语言是对机器语言的改进,比机器语言高级。汇编语言的最大优点是助记符与机器指令一一对应。用汇编语言编写的程序占用存储空间小,运行速度快,程序效率高。此外,汇编语言能直接管理和控制硬件资源。

缺点:比高级语言难记忆和使用,程序设计的技巧性较高,编程难度较大。要求使用者必须精通单片机的硬件系统和指令系统。缺乏通用性,程序不易移植。4.1.2单片机使用的高级语言对于8051单片机,现有4种语言支持,即汇编、PL/M、C和BASIC。C语言应用广泛 移植性好; 开发效率高。

keilc51高级语言的不足: 生成的目标代码较长;

程序运行速度较慢。

4.1.380C51单片机汇编语言的语句格式80C51汇编语言的语句格式如下:[<标号>:]<操作码>[<操作数>];[<注释>]1.标号 是语句地址的标志符号,标号的几点规定:1~8个ASCII字符组成,第一个字符必须是字母。不能使用本汇编语言已经定义的符号作为标号。标号后面必须跟以冒号“:”。同一标号在一个程序中只能定义一次。标号可有可无。4.1.380C51单片机汇编语言的语句格式2.操作码

用于规定语句执行的操作内容,用指令助记符表示。不能空缺。3.操作数操作数用于为指令操作提供数据。可能有0~3个操作数,各操作数之间以逗号分隔。4.注释不属于语句的功能部分,只是对语句的解释说明,以“;”开头。4.1.380C51单片机汇编语言的语句格式5.分界符(分隔符)用于把语句中的各部分隔开,以便于区分。分界符包括空格、冒号、分号或逗号等符号。4.2汇编语言程序的基本结构形式四种基本结构形式:顺序程序结构、分支程序结构、循环程序结构、子程序。4.2.1顺序程序结构 顺序结构程序是最简单的程序结构。程序既无分支、循环,也不调用子程序,程序执行时一条接一条地按顺序执行指令。例13字节无符号数的加法运算。其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、54H和55H单元中;要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的20H位中。4.2.1顺序程序结构我们一起来编写程序。MOVR0,#52H ;被加数的低字节地址MOVR1,#55H ;加数的低字节地址MOVA,@R0ADDA,@R1 ;低字节相加MOV@R0,A ;存低字节相加结果DECR0DECR1MOVA,@R0ADDCA,@R1 ;中间字节带进位相加MOV@R0,A ;存中间字节相加结果DECR0DECR1MOVA,@R0ADDCA,@R1 ;高字节带进位相加MOV@R0,A ;存高字节相加结果MOV20H,C ;存放进位的单元地址4.2.1顺序程序结构分支结构也称为选择结构。要分支,就要用条件或变址寻址转移指令,就要有地址标号。分支结构又可分为单分支结构和多分支结构。4.2.2分支程序结构1.单分支程序结构单分支程序结构即二中选一,通过条件判断实现,条件成立一支,条件不成立一支。

例2假定在外部RAM中有ST1、ST2和ST3三个连续单元,其中ST1和ST2单元中存放着两个无符号二进制数,试找出其中的大数并存入ST3单元中。

1.单分支程序结构4.2.2分支程序结构 MOVDPTR,#ST1 ;设置数据指针

MOVXA,@DPTR ;取第1个数

MOVR2,A ;第1个数存于R2

INCDPTR ;数据指针加1

MOVXA,@DPTR ;取第2个数

CLRC ;进位位清0

CJNEA,R2,NEXT ;两数比较

JNCBIGER ;若第2个数不小,则转向BIGER

XCHA,R2 ;若第1个数大,则整字节交换BIGER:INCDPTR MOVX@DPTR,A ;存大数1.单分支程序结构例3假定采集的温度值Ta放在累加器A中。此外,在内部RAM54H单元存放温度下限值T54,在55H单元存放温度上限值T55。若Ta>T55,程序转向JW(降温处理程序);若Ta<T54,则程序转向SW(升温处理程序);若T55≥Ta≥T54,则程序转向FH(返回主程序)。4.2.2分支程序结构1.单分支程序结构TC:CJNEA,55H,LOOP1 ;若Ta≠T55,则转向LOOP1 AJMPFH ;若Ta=T55,则返回LOOP1:JNCJW

;若(CY)=0,表明Ta>T55,转降温处理程序 CJNEA,54H,LOOP2 ;若Ta≠T54,则转向LOOP2 AJMPFH ;若Ta=T54,则返回LOOP2:JCSW

;若(CY)=1,表明Ta<T54,转升温处理程序FH:RET ;若T55≥Ta≥T54,则返回主程序4.2.2分支程序结构该例为多重单分支结构,通过一系列条件判断,进行逐级分支。多重单分支结构多使用数值比较转移指令CJNE实现。2.多分支程序结构

4.2.2分支程序结构2.多分支程序结构与多重单分支结构的不同:多重单分支结构在不同的区域做不同的事情;多分支结构在不同的点上做不同的事情。多分支结构多用变址寻址转移指令“JMP@A+DPTR”实现,且需要有数据表格配合;多重单分支结构多使用数据比较转移指令CJNE实现。

4.2.2分支程序结构(1)通过地址偏移表实现程序多分支设分支序号存放在片内RAMADDRi单元中,示例程序如下: MOVA,ADDRi ;分支序号i送A MOVDPTR,#BRTAB ;地址表首址送DPTR MOVCA,@A+DPTR ;取偏移量 JMP@A+DPTR ;转相应分支BRTAB:DBBR0-BRTAB ;地址偏移表 DBBR1-BRTAB DBBRn-BRTABBR0: … ;分支程序BR1: …BRn: …4.2.2分支程序结构

2.多分支程序结构(2)通过转移指令表实现程序多分支

MOVA,ADDRi RLA ;分支序号值乘以2 MOVDPTR,#BRTAB ;转移指令表首址 JMP@A+DPTRBRTAB: AJMPBR0 ;转分支程序0 AJMPBR1 ;转分支程序1 …… AJMPBR127 ;转分支程序1274.2.2分支程序结构

2.多分支程序结构(3)其他实现程序多分支的方法例4用RET指令实现多分支程序

MOVDPTR,#BRTAB ;分支入口地址表首址 MOVA,ADDRi RLA ;分支转移值乘以2 MOVR1,A ;暂存到R1 INCA MOVCA,@A+DPTR ;取低位地址 PUSHACC ;低位地址入栈 MOVA,R1 ;恢复A值 MOVCA,@A+DPTR ;取高位地址 PUSHACC ;高位地址入栈 RET ;分支入口地址装入PCBRTAB: DWBR0 ;分支程序入口地址表 DWBR1 …… DWBR1274.2.2分支程序结构

2.多分支程序结构4.2.3循环程序结构循环就是重复执行某个程序段。汇编语言通常使用减1条件转移指令来实现和控制循环。4.2汇编语言程序的基本结构形式前章例18将内部RAM从DATA单元开始的10个无符号数相加,相加结果送SUM单元保存。

MOVR0,#0AH;设置循环次数

MOVR1,#DATA;R1作地址指针,指向数据块首地址

CLRA ;A清零LOOP:ADDA,@R1;加一个数

INCR1 ;修改指针,指向下一个数

DJNZR0,LOOP;R0减1,不为0循环

MOVSUM,A;存10个数相加的和4.2.3循环程序结构循环程序由初始化和循环体两部分组成。初始化:指针、计数器和累加器等循环体是循环程序的主体,是反复执行的动作。例5通过查找结束标志(回车符)来统计字符串长度的循环程序。分析:假定字符串存放在内部RAM从40H单元开始的连续存储单元中。为找到结束标志,应采用逐个字符依次与回车符(ASCII码0DH)比较的方法。同时在程序中还应设置一个字符串指针以顺序定位字符,设置一个字符长度计数器以累计字符个数。 MOVR2,#0FFH ;设置长度计数器初值 MOVR0,#3FH ;设置字符串指针初值LOOP:INCR2 INCR0 CJNE@R0,#0DH,LOOP

4.2.3循环程序结构例6多字节无符号数相加。4.2.3循环程序结构分析:设被加数与加数分别在以ADR1与ADR2为初址的片内数据存储器区域中,自低字节起,由低到高依次存放;它们的字节数为L,要求加得的和放回被加数的单元。流程框图如右。

MOVR0,#ADR1

MOVR1,#ADR2

MOVR2,#L

CLRCLOOP:MOVA,@R0 ;通过R0间址,取得被加数的一个字节

ADDCA,@R1 ;通过R1间址,取得加数的一个字 ;节,与被加数的相应字节相加

MOV@R0,A ;加得的和通过R0间址放回原被加数单元

INCR0 ;修改指针,指向下一个相加的数

INCR1 DJNZR2,LOOP ;循环实现多字节数相加4.2.3循环程序结构4.2.4子程序结构4.2汇编语言程序的基本结构形式前章例3“用查表法把累加器中的十六进指数转换为ASCII码的程序”也是按子程序设计的。

HBA:INCA MOVCA,@A+PC RET ;十六进制数ASCII码表

DB30H,31H,…,39H,41H, 42H,…,46H4.2.4子程序结构子程序的组成:程序名:就是标号,位于第一条可执行指令前。主程序以该名调用它。程序体:规定要做的事情。返回语句RET。参数:在结构上看不出来,也可以没有。通过参数传送信息。参数可通过寄存器、存储单元或堆栈传送。4.380C51单片机汇编语言程序设计举例4.3.1算术运算程序1.加减法运算(1)多个不带符号的单字节数相加例7假设有多个单字节数,依次存放在外部RAM21H开始的连续单元中,要求把计算结果存放在R1和R2中(假定相加的和不超过2字节数)。其中R1为高位字节。 MOVDPTR,#21H ;设置数据指针 MOVR3,#N ;字节个数 MOVR1,#00H ;和的高位字节清0 MOVR2,#00H ;和的低位字节清0LOOP: MOVXA,@DPTR ;取一个加数 ADDA,R2 ;单字节数相加 MOVR2,A ;和的低8位送R2 JNCLOOP1 INCR1 ;有进位,则和的高8位加1LOOP1: INCR0 ;指向下一个单元 DJNZR3,LOOP

4.3.1算术运算程序

1.加减法运算(2)两个不带符号的多字节数相减例8设有两个N字节数分别存放在内部RAM单元中,低字节在前,高字节在后,分别由R0指定被减数单元地址,由R1指定减数单元地址,其差存放在原被减数单元中。

4.3.1算术运算程序

1.加减法运算MSUB:CLRC ;清进位位 MOVR2,#N ;设定字节数LOOP:MOVA,@R0;从低字节开始逐个取被减数字节 SUBBA,@R1 ;两数相减 MOV@R0,A ;存字节相减的差 INCR0 INCR1 DJNZR2,LOOP;减法是否完成 RET2.乘法运算

4.3.1算术运算程序例9假定要进行两个双字节无符号数的乘法运算,被乘数和乘数分别存放于寄存器R2、R3和R6、R7中(其中R2和R6分别为高位字节),相乘的结果(积)依次存放在R4、R5、R6、R7单元中。试编写程序实现该乘法运算。分析:因为乘数和被乘数各为2字节,因此,必须进行4次乘法运算,得到4次部分乘积。部分积的高字节用H标识,部分积低字节用L标识。此外,还要处理部分积相加产生的进位。其竖式运算如下页示意图。两个双字节无符号数乘法示意图DBMUL: MOVA,R3 MOVB,R7 MULAB;R3×R7(得第1次部分积) XCHA,R7;原R7内容送A,R7←R3R7L MOVR5,B;R5←R3R7H MOVB,R2 MULAB;R2×R7(得第2次部分积) ADDA,R5;R2R7L+R3R7H MOVR4,A;R4←和 CLRA ADDCA,B;R2R7H+(R2R7L+R5时产生的进位) MOVR5,A;R5←和 MOVA,R6 MOVB,R3 MULAB;R3×R6(得第3次部分积) ADDA,R4;R3R6L+R4XCHA,R6 ;A←R6,R6←R3R6L+R4(在R6中得到乘积的 ;第3字节)XCHA,B ;A←R3R6H,B←R6ADDCA,R5 ;R3R6H+R5+(R3R6L+R4时产生的进位)MOVR5,A ;R5←和MOVF0,C ;F0←进位MOVA,R2MULAB ;R2×R6(得第4次部分积)ADDA,R5 ;R2R6L+R5MOVR5,A ;在R5中得到乘积的第2字节CLRAMOVACC.0,C ;累加器最高位←进位MOVC,F0ADDCA,B ;R2R6H+F0+ACC.0MOVR4,A ;在R4中得到乘积的第1字节RET4.3.1算术运算程序例10试编写程序实现双字节无符号的数除法运算。3.除法运算按主程序设计: 输入参数:R7R6:被除数,R5R4:除数; 输出参数:R7R6:商, R5R4:余数,

F0:溢出标志(1:溢出,0:未溢出)。4.3.1算术运算程序

3.除法运算算法分析:①能否象乘法那样利用单字节除法指令DIVAB来实现2字节数的除法呢?不能。只能用竖式计算,一位一位地计算,如下图。4.3.1算术运算程序

3.除法运算算法分析:②2字节除法运算是按位进行的。2个字节,16个二进制位,要试商16次,做16次减法、16次移位。如果用循环程序实现,要循环16次,每循环1次,做1次试商、1次减法、1次移位。我们把循环次数存放在R1中。4.3.1算术运算程序

3.除法运算算法分析:③竖式运算,减数右移位。计算机中,减数不动,余数左移位(为什么?)。我们把余数存放在R3R2中(为什么不能直接存放在R5R4中?)。4.3.1算术运算程序

3.除法运算首次试商在最高位,前面需补15个0。如果把余数R3R2初始化为0,把余数和被除数R3R2R7R6一起左移一位,再进行试商,做减法,正好可以通过R3R2-R5R4实现。够减,商1;不够减,商0。商0,余数R3R2不变;商1,余数R3R2为相减之差。商放在哪里呢?移位后,被除数R7R6的最低位不再有意义,商可以放在这位。

这样,移位、余数减除数、修改余数、存放商,循环16次,除法完成,被除数已全部移到余数R3R2中,并逐次被减得到最终余数,被除数R7R6已被16位商所代替。算法分析:4.3.1算术运算程序

3.除法运算算法分析:④除法运算需要对被除数和除数进行判定:若除数为0,则除法无法进行,置标志位F0为1。若被除数为0,除数不为0,则商为0,立即结束。下页给出2字节数除法运算的流程图。

4.3.1算术运算程序

3.除法运算TB_DIV:CLRF0 ;清溢出标志单元MOVA,R5JNZZERO ;若除数不为0,则跳转MOVA,R4JNZZERO ;若除数不为0,则跳转SETBF0 ;除数为0,设置溢出标志RETZERO:MOVA,R7JNZSTART ;若被除数高字节不为0,则开始除法运算MOVA,R6JNZSTART ;若被除数低字节不为0,则开始除法运算MOVR4,#0 ;若被除数为0,余数清0MOVR5,#0RET ;结束,返回START:CLRA ;开始除法运算MOVR2,A ;余数单元清0MOVR3,AMOVR1,#10HLOOP:CLRC ;进行一位除法运算MOVA,R6RLCA ;被除数左移一位MOVR6,AMOVA,R7RLCAMOVR7,AMOVA,R2 ;移出的被除数高位送余数单元RLCAMOVR2,AMOVA,R3RLCAMOVR3,AMOVA,R2 ;余数减除数,低位先减SUBBA,R4MOVR0,A ;保存低位相减结果MOVA,R3 ;再减高位SUBBA,R5JCNEXT ;若不够减,则转移INCR6 ;若够减,则商为1MOVR3,A ;相减结果送回余数单元MOVA,R0MOVR2,ANEXT:DJNZR1,LOOP ;不够16次,继续MOVA,R3 ;余数送输出寄存器R5R4MOVR5,AMOVA,R2MOVR4,ARET4.3.1算术运算程序

3.除法运算汇编应用除法运算比较复杂,程序比较长。我们可以把其中的移位和试商(即余数减除数、修改余数、存放商)分别编写成子程序,而在除法程序中进行调用。4.3.1算术运算程序

3.除法运算移位子程序SHIFTL:输入参数:R3R2R7R6:4字节无符号数;输出参数:R3R2R7R6:4字节无符号数。SHIFTL:CLRC MOVA,R6 RLCA MOVR6,A MOVA,R7 RLCA MOVR7,A MOVA,R2

RLCA MOVR2,A MOVA,R3 RLCA MOVR3,A RET4.3.1算术运算程序

3.除法运算试商子程序RES1BIT:输入参数:R5R4:除数, R3R2:余数, CY,R6[0]:0;输出参数:R3R2:余数, R6[0]:一位商。4.3.1算术运算程序

3.除法运算RES1BIT: MOVA,R2 ;余数减除数,低位先减

SUBBA,R4 MOVR0,A ;保存低位相减结果

MOVA,R3 ;再减高位

SUBBA,R5 JCSHANG0 ;若不够减,商0,返回

INCR6 ;若够减,则商为1

MOVR3,A

;相减结果送回余数单元

MOVA,R0 MOVR2,ASHANG0: RET4.3.1算术运算程序

3.除法运算原除法程序改写为TB_DIV:CLRF0 ;清溢出标志单元MOVA,R5JNZZERO ;若除数不为0,则跳转MOVA,R4JNZZERO ;若除数不为0,则跳转SETBF0 ;除数为0,设置溢出标志RETZERO:MOVA,R7JNZSTART ;若被除数高字节不为0,则开始除法运算MOVA,R6JNZSTART ;若被除数低字节不为0,则开始除法运算MOVR4,#0 ;若被除数为0,余数清0MOVR5,#0RET ;结束,返回4.3.1算术运算程序

3.除法运算START:CLRA ;开始除法运算

MOVR2,A ;余数单元清0

MOVR3,A

MOVR1,#10HLOOP:ACALLSHIFTL

ACALLRES1BITNEXT:DJNZR1,LOOP ;不够16次,继续

MOVA,R3 ;余数送输出寄存器R5R4

MOVR5,A

MOVA,R2

MOVR4,A

RET4.3.1算术运算程序

3.除法运算任务:试编写一个4字节无符号数的除法程序。4.3.2定时程序在单片机的控制应用中经常有定时的需要,例如定时检测和定时扫描等。定时功能除可使用定时器/计数器外,还可以使用程序实现。4.380C51单片机汇编语言程序设计举例1.单循环定时程序

MOVR5,#TIMELOOP:NOPNOPDJNZR5,LOOP4.3.2定时程序1.单循环定时程序NOP指令的机器周期为1,DJNZ指令的机器周期为2,则一次循环共4个机器周期。若单片机的晶振频率为6MHz,则一个机器周期是2μs,因此,一次循环的延迟时间为8μs。定时程序的总延迟时间是循环程序段延时时间的整数倍,故该程序的延迟时间为8×TIME(μs)。TIME是装入寄存器R5的时间常数,R5是8位寄存器,因此,这个程序的最长定时时间(不计“MOVR5,#TIME”指令)为:256×8μs=2048μs。4.380C51单片机汇编语言程序设计举例2.较长时间的定时程序单循环定时程序的时间延迟比较小。要加长定时时间,可以采用多重循环程序。4.3.2定时程序 MOVR5,#TIME1LOOP2:MOVR4,#TIME2LOOP1:NOP NOP DJNZR4,LOOP1 DJNZR5,LOOP2 RET本程序的最大定时时间及计算公式为:(256×4μs+2μs+1μs)×256×2+4μs=525828μs3.定时程序的时间调整在定时程序中可通过增减指令的方法对定时时间进行微调。譬如右边的程序,在6MHz晶振频率下的定时时间为10×TIME(μs)。如果要求定时时间为24μs,无论TIME取何值均得不到要求的定时时间。 MOVR0,#TIMELOOP:NOP NOP NOP DJNZR0,LOOP4.3.2定时程序3.定时程序的时间调整对此可通过在循环体内增加一条NOP指令(见右边调整后的程序)的方法,把循环程序段的机器周期数增加到6。这时只要TIME取值为2,就可以得到精确的24μs定时了。调整后的程序: MOVR0,#TIMELOOP:NOP NOP NOP NOP DJNZR0,LOOP4.3.2定时程序4.通过一个基本延时程序产生不同的定时例如,要求的定时时间分别为5s、10s和20s,已有一个1s的基本延时程序DELAY,则不同定时的调用情况如下。4.3.2定时程序

MOVR0,#05H ;5s延时LOOP1:LCALLDELAY DJNZR0,LOOP1 MOVR0,#0AH ;10s延时LOOP2:LCALLDELAY DJNZR0,LOOP2 MOVR0,#14H ;20s延时LOOP3:LCALLDELAY DJNZR0,LOOP34.3.3查表程序1.查表指令按顺序读出存储器中的数据称为查表。80C51指令系统中有两条专用的查表指令: MOVCA,@A+DPTR MOVCA,@A+PC这两条MOVC指令在指令系统中称为“程序存储器读指令”。它们的功能完全相同,使用时先确定好PC或DPTR的内容,然后只需有规律地改变A的内容,就可以从程序存储器中读出表格数据。4.380C51单片机汇编语言程序设计举例2.查表程序举例假定有4×4键盘,键扫描后把被按键的键码放在累加器A中,键码值与键处理子程序入口地址的对应关系为: 键码值 入口地址 0 RK0 1 RK1 2 RK2 假定键处理子程序在ROM64KB的范围内分布。要求以查表方法,按键码值转向对应的键处理子程序。4.3.3查表程序我们用转移指令表来实现键处理子程序。4.3.3查表程序KEYPROC:

MOVDPTR,#BS ;转移指令表首址送DPTR

MOVR2,A ;A*3

RLA

ADDA,R2

JMP@A+DPTR BS:

LJMPRK0

LJMPRK1

LJMPRK2编辑:编写和修改程序的过程。汇编语言源程序:用汇编语言编写的程序称为汇编语言源程序。汇编:汇编语言源程序不能在单片机中直接执行,必须将其“翻译”为用二进制代码(机器语言)表示的目标程序才能执行。这个“翻译”过程称为汇编。

4.4单片机汇编语言源程序的编辑和汇编4.4.1手工编程与汇编手工编程:用笔和纸手工编写和修改程序的过程。手工汇编:把汇编语言源程序用手工方法逐条“翻译”成机器代码的过程。手工汇编通常通过查表的方法进行“翻译”。4.4单片机汇编语言源程序的编辑和汇编4.4.2机器编辑与交叉汇编机器编辑:是指借助于微型机或开发系统进行单片机的程序设计,通常都是使用编辑软件进行源程序的编辑。编辑完成后,生成一个由汇编指令和伪指令构成的扩展名为“.ASM”的ASCII码文件。汇编器:也叫汇编程序,是把汇编语言源程序翻译成机器语言目标代码程序的软件。交叉汇编:是指使用一种计算机的汇编程序为另一种计算机的源程序进行汇编,即运行汇编程序进行汇编的是一种计算机,而汇编得到的目标程序是另一种计算机的。4.4单片机汇编语言源程序的编辑和汇编4.4.2

温馨提示

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

评论

0/150

提交评论