




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验七、中断技术实验八、基本时钟和定时器实验报告实验七、中断技术一、实验目的1. 了解中断原理,包括对中断源、中断向量、中断类型号、中断程序以及中断相应过程的理解;2. 掌握单片机C语言中断程序设计方法。二、实验任务1. 中断相应过程的理解(1)在中断子程序的定义之前,有一条预编译指令,观察其中的中断向量即可知道中断源。如本程序中的预编译指令是“#pragma vector=PORT1_VECTOR”可知中断源是P1.0P1.7的八个引脚(准确说应该是P1.3)。在知道中断源的情况下,通过查表可以知道中断其对应的中断类型号是3。从程序中看出中断标志位用的是Bit3,所以将P1.3与按键连接。实
2、验现象:当操作时,LED灯一直闪烁,当按下K4(与P1.3相连)时,灯停止闪烁,蜂鸣器响三声之后灯继续闪烁。(2)port_ISR被在满足条件的时候被硬件执行,不受软件操控,所以程序中并没有调用这个函数的语句但是仍可以被执行。中断响应过程:由于在该程序中用到的是可屏蔽中断,中断相应需要满足三个条件:中断总控位、中断分控位、中断源发出请求(即中断标志位置位)。在程序中已经将中断总控位和分控位置于允许状态所以只需要中断标志位置位即可,所以当在按键的下降沿时(由P1.3作为中断源),中断标志位被置位,即P1IFG&BIT3被置位,则中断子程被硬件自动运行,也就是函数port_ISR被执行。(3)当在
3、运行完port_ISR时,如果中断标志位没有被清零则当跳出中断子程之后,由于依然满足中断相应的条件,所以中断会被继续执行,即中断将被一直运行下去。(4)在将PORT1_VECTOR改为PORT2_VECTOR之后在单片机上运行,发现按键不再能够使蜂鸣器响起,但是按键时原来闪烁的LED灯会暂停非常短暂的时间。这说明在按键时虽然程序暂时中断,但是并没有去执行中断子程里面的东西。在main函数入口处加入一断点时,按键时原来闪烁的LED灯会停止闪烁,并且程序会停止在断点处。这是由于将中断向量改为PORT2_VECTOR之后,在按下键的时候产生中断请求,但是由于PORT1的中断向量没有被预编译,所以不能
4、够正确执行,所以中断子程不能够被执行。程序运行复位,所以程序会从最开始运行,所以在main函数的入口处加上断点时,运行程序,程序会停在断点处。(5)将原程序总中断的相关设置修改为以下:P2SEL&=BIT5; P2SEL2&=BIT5;P2OUT|=BIT5;P2REN|=BIT5;P2DIR&=BIT5;P2IES|=BIT5;P2IFG&=BIT5;P2IE|=BIT5;另外#pragma vector=PORT1_VECTOR需要修改为:#pragma vector=PORT2_VECTOR;中断子程中的清零指令修改为:P2IFG &=BIT5;在硬件连接上需要将P2.5连接至KEY6。
5、即可实现程序的修改。2. 中断程序编程练习(1)程序设计思路当程序中没有收到中断请求时,L5灯循环闪烁,该功能可以由main函数中的循环实现,即设置某引脚为输出引脚,并控制L5,则实现L5的循环闪烁则很容易实现。要求中中断源有两个,P1.2和P1.7均可以触发中断。由于P1.2和P1.7两个引脚共享一个中断类型号,所以两个引脚的关于中断的设置相同,但是在中断子程中需要对两个中断进行判断,使得两个中断对应执行不同的指令。(2)硬件连接图(3)C语言程序#include io430.h#include in430.hvoid delay( ) /延时子函数 unsigned int j; for
6、(j=0;j0xffff;j+); void blink1( ) /LED5闪烁控制子函数 P2OUT &=BIT4; delay(); P2OUT |= BIT4; delay(); void blink2( ) /LED2闪烁控制子函数 for(int i=0;i2;i+) P2OUT &=BIT1; delay(); P2OUT |= BIT1; delay(); ;void Buzz( ) /蜂鸣器控制子函数 P2OUT &=BIT2; delay(); P2OUT|= BIT2; int main( void ) / Stop watchdog timer to prevent ti
7、me out reset WDTCTL = WDTPW + WDTHOLD; /*输出端口设置*/ P2SEL&=(BIT4+BIT1+BIT2); P2SEL2&=(BIT4+BIT1+BIT2); P2DIR|=(BIT4+BIT1+BIT2); P2OUT|=(BIT4+BIT1+BIT2); /*中断相关设置*/ P1SEL&=(BIT2+BIT7); P1SEL2&=(BIT2+BIT7); /设置GPIO类型 P1DIR&=(BIT2+BIT7); /设置两个引脚为输入引脚 P1REN|=(BIT2+BIT7); /上拉/下拉电阻允许 P1OUT|=(BIT7+BIT2); /上拉
8、电阻 P1IES|=(BIT2+BIT7); /下降沿触发 P1IFG&=(BIT2+BIT7); /清零中断标志位 P1IE|=(BIT2+BIT7); /中断分控允许 _EINT(); /中断总控允许 for(;) blink1(); /LED5循环闪烁 #pragma vector=PORT1_VECTOR _interrupt void port_1() /中断子程 if(P1IFG&BIT2)!=0) /如果是P1.2产生的中断,执行下面的内容 Buzz(); P1IFG&=BIT2; if (P1IFG&BIT7)!=0) /如果是P1.7产生的中断 blink2(); P1IFG
9、&=BIT7; (3)思考题1)如果将按键K2,K7分别接在P2.1和P2.6上时,此时的中断向量应该变为了P2.0P2.7八个端口。首先需要将上面程序main函数中的中断相关的设置改为下面:/*中断相关设置*/ P2SEL&=(BIT1+BIT6); P2SEL2&=(BIT1+BIT6); /设置GPIO类型 P2DIR&=(BIT1+BIT6); /设置两个引脚为输入引脚 P2REN|=(BIT1+BIT6); /上拉/下拉电阻允许 P2OUT|=(BIT6+BIT1); /上拉电阻 P2IES|=(BIT1+BIT6); /下降沿触发 P2IFG&=(BIT1+BIT6); /清零中断
10、标志位 P2IE|=(BIT1+BIT6); /中断分控允许另外由于在上面的程序中用P2.1来控制LED2的闪烁,所以需要将控制LED2的闪烁的引脚改为P2.3。中断子程也应该进行相关的修改,如下所示:#pragma vector=PORT2_VECTOR _interrupt void port_2() /中断子程 if(P2IFG&BIT1)!=0) /如果是P1.2产生的中断,执行下面的内容 Buzz(); P2IFG&=BIT1; if (P2IFG&BIT6)!=0) /如果是P1.7产生的中断 blink2(); P2IFG&=BIT6; 2)如果按键K2,K7分别接在P1.0和P
11、2.4上,此时中断会用到P1.0P1.7和P2.0P2.1两个中断源。在进行程序修改时,也是应该对中断相关端口的设置和中断子程进行相关的修改。修改如下所示:对于中断相关端口的设置:/*中断相关设置*/ P1SEL&=BIT0; P1SEL2&=BIT0; /设置GPIO类型 P1DIR&=BIT0; /设置两个引脚为输入引脚 P1REN|=BIT0; /上拉/下拉电阻允许 P1OUT|=BIT0; /上拉电阻 P1IES|=BIT0; /下降沿触发 P1IFG&=BIT0; /清零中断标志位 P1IE|=BIT0; /中断分控允许 P2SEL&=BIT4; P2SEL2&=BIT4; /设置G
12、PIO类型 P2DIR&=BIT4; /设置两个引脚为输入引脚 P2REN|=BIT4; /上拉/下拉电阻允许 P2OUT|=BIT4; /上拉电阻 P2IES|=BIT4; /下降沿触发 P2IFG&=BIT4; /清零中断标志位 P2IE|=BIT4; /中断分控允许中断子程的修改如下:#pragma vector=PORT1_VECTOR _interrupt void port_1() /中断子程1Buzz();P1IFG&=BIT0;#pragma vector=PORT2_VECTOR _interrupt void port_2() /中断子程2blink2(); P2IFG&=
13、BIT4;另外由于原程序中用P2.4来控制LED5的闪烁,所以与这里中断中用到的引脚冲突,所以可以利用P2.5来控制LED5,即将原P2.4对应程序改为P2.5即可。3. 采用事件标志处理中断(1)功能描述:在将P1.4和某一按键相连,P1.6与蜂鸣器相连的情况下,两个程序实现的功能是相同的,都是在没有按键的情况下程序不执行任何指令,在按下键时产生中断,蜂鸣器发出一声警报声。(2)两者在编程实现上的不同:程序L7_intA对于蜂鸣器控制的指令在中断子程中,即在按键时,执行中断子程,使蜂鸣器发出一声警报,然后跳出中断子程继续执行空的循环。而在程序L7_intB中,多了一个标志变量flag,在不执
14、行中断子程中flag一直为0,虽然在main函数循环中存在对蜂鸣器引脚操作的指令,但是由于flag为0,所以不执行。当按键时,执行中断子程,在中断子程中只是将flag变量置位,然后跳出中断子程,由于此时flag为1,所以蜂鸣器会发出一声警报之后,flag又被置零。所以两个程序实现的功能是相同的,但是L7_intB中中断子程的执行时间较L7_intA短很多。(3)对任务二的程序进行改编,如下所示:#include io430.h#include in430.hvoid delay( ) unsigned int j; for (j=0;j0xffff;j+); void blink1( ) P2
15、OUT &=BIT4; delay(); P2OUT |= BIT4; delay(); void blink2( ) for(int i=0;i2;i+) P2OUT &=BIT1; delay(); P2OUT |= BIT1; delay(); ;void Buzz( ) P2OUT &=BIT2; delay(); P2OUT|= BIT2; int flag1=0;int flag2=0;int main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P2SEL&=(
16、BIT4+BIT1+BIT2); P2SEL2&=(BIT4+BIT1+BIT2); P2DIR|=(BIT4+BIT1+BIT2); P2OUT|=(BIT4+BIT1+BIT2); P1SEL&=(BIT2+BIT7); P1SEL2&=(BIT2+BIT7); P1DIR&=(BIT2+BIT7); P1REN|=(BIT2+BIT7); P1OUT|=(BIT7+BIT2); P1IES|=(BIT2+BIT7); P1IFG&=(BIT2+BIT7); P1IE|=(BIT2+BIT7); _EINT(); for(;) if(flag1=0&flag2=0) blink1(); i
17、f(flag1!=0) Buzz();flag1=0; if(flag2!=0) blink2();flag2=0; ; #pragma vector=PORT1_VECTOR _interrupt void port_1() if(P1IFG&BIT2)!=0) flag1=1; P1IFG&=BIT2; if (P1IFG&BIT7)!=0) flag2=1; P1IFG&=BIT7; 4. (提高)按键抖动处理(1)延时函数应该加在按键中断程序的最后,因为若延时加在中断程序的开始,则在执行中断时对有效指令的执行也会产生相同的延时。将延时放在中断中的最后,则当产生按键下降延时,立即执行中断
18、的内容,但是由于在中断程序最后加上了延时,在这段延时中产生的抖动不会再次触发中断,达到防抖的目的。对中断程序的修改如下所示:#pragma vector=PORT1_VECTOR _interrupt void port_int(void) unsigned int i;if (P1IFG&BIT2)!=0) number+;P2OUT=number; P1IFG &=BIT2; for(i=0;i0xfff;i+); /延时环节(2)延时函数不能加的太短,加的太短不能有效地去除抖动的影响;同时也不能加的太长,否则会影响下一次按键,经过查阅资料得知毛刺一般时间为毫秒级,故选择计数到“0xfff
19、”即延时了大约两毫秒。(3)经过查找发现,防抖用的最多的方法就是延时,另外还有用对于按键连续检测的方法实现防抖的,其大致思路是当按键下降沿进入中断子程中,先对按键的装态连续检测几次,若这几次的按键状态相同则说明不是抖动。据此,编写的中断子程如下所示:#pragma vector=PORT1_VECTOR _interrupt void port_int(void) unsigned int i; unsigned int count=0; /按键检测计数 for(i=0;i8;i+) /连续检测八次 if(P1IN&BIT2)=0) count+; /若检测到按键均按下则count等于8 if
20、 (P1IFG&BIT2)!=0)&(count=8) number+;P2OUT=number; P1IFG &=BIT2; count=0;实验八、基本时钟和定时器一、 实验目的1. 了解MSP430G2553基本时钟模块的工作原理,掌握其控制方法;2. 了解MSP430定时器A的工作原理,掌握MSP430定时器A的控制方法。二、 实验任务1. 数字示波器的使用(1) 将信号源波形在示波器上显示出来,掌握测量周期、频率、峰峰值的方法;(2) 用导线将实验板上的地信号与示波器地信号相连,测量实验板上的Vcc电源信号是否正常;用示波器观察到Vcc信号为3.6V直流信号,故正常。2. 测试上电复
21、位系统的ACLK和SMCLK的时钟频率实验编程分别用P1.0和P1.4将ACLK和SMCLK输出并使用示波器观察,编程如下所示:#include io430.h#include in430.hint main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P1SEL|=BIT0; P1SEL2&=BIT0; P1DIR|=BIT0; /P1.0输出ACLK P1SEL|=BIT4; P1SEL2&=BIT4; P1DIR|=BIT4; /P1.4输出SMCLK【思考题】(1)
22、将JP8中的两个插针接到32.768KHZ晶振侧测得的ACLK为32.768KHZ,当将两个插针接到P2.6和P2.7侧时,得不到ACLK的信号,这是因为当接到P2.6和P2.7时,并没有将端口连接到晶振处,所以不能输出。(2) 通过测量得到结果如下表所示:DIVAxx与ACLK的关系DIVA1DIVA0ACLK频率值/KHz作用0116.393二分频114.086八分频可见DIVAxx用来控制ALCK输出的频率,其主要通过分频来实现,DIVA1,DIVA0分别为“00,01,10,11”时分别对应1,2,4,8分频。DIVSxx与SMCLK的关系DIVS1DIVS0SMCLK频率值/KHz作
23、用10274.7四分频11137.55八分频可见DIVSxx用来控制SMLCK输出的频率,其主要通过分频来实现,DIVS1,DIVS0分别为“00,01,10,11”时分别对应1,2,4,8分频。LFXT1Sxx和ACLK的关系LFXT1S1LFXT1S0ACLK频率值/KHz时钟来源0032.768晶振1010.219内部振荡器(3) 经示波器测试,上电复位之后,CPU工作的时钟信号MCLK的频率为1MHz。3. 掌握基本时钟模块的编程控制(1) ACLK=16.384KHz;(时钟源外部晶振二分频)在上电复位情况下,ACLK接外部晶振,所以只需将外部晶振进行二分频即可,所以编程如下所示:#
24、include io430.h#include in430.hint main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P1SEL|=BIT0; P1SEL2&=BIT0; P1DIR|=BIT0; /P1.0输出ACLK BCSCTL1|=DIVA0; BCSCTL1&=DIVA1; /二分频将ACLK通过P1.0输出并用示波器进行观察,得到的ACLK波形如下所示,由示波器测得的ACLK频率为16.385KHz,即实现了二分频。(2) ACLK=1.5KHz;(时钟源V
25、CLOCK八分频,即12KHz/8)编程如下:#include io430.h#include in430.hint main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P1SEL|=BIT0; P1SEL2&=BIT0; P1DIR|=BIT0; /P1.0输出ACLKBCSCTL1|=DIVA0;BCSCTL1|=DIVA1; /八分频BCSCTL3|=LFXT1S1;BCSCTL3&=LFXT1S0;通过示波器观察得到的结果如下:由于受各种因素的影响,单品机上的外部晶
26、振其频率并不是12KHz,而是10.1KHz,所以最终分频得到的频率不是1.5KHZ,而是1.274KHZ。思考题:可否通过对时钟模块进行编程在引脚P2.4上输出ACLK?为什么?不可以,因为输出引脚已经由硬件确定了,没有时钟输出功能的引脚不能够通过编程实现时钟的输出。4. DCO出厂校验值的频率检验(1)利用出厂校验值,编程使DCO分别为1MHZ、16MHZ,通过P1.4输出,并用示波器测量实际值。编程如下:#include io430.h#include in430.hint main( void ) / Stop watchdog timer to prevent time out re
27、set WDTCTL = WDTPW + WDTHOLD; P1SEL|=BIT4; P1SEL2&=BIT4; P1DIR|=BIT4; /P1.4输出DCOCLK if(CALBC1_1MHZ!=0xff)/利用出厂校验值1MHZ BCSCTL1=CALBC1_1MHZ; DCOCTL=CALDCO_1MHZ; 通过示波器得到的两个校验值对应输出的实测值如下所示:可见校验值1MHZ对应的实测值为993.5KHZ,校验值16MHZ对应的实测值是16.3MHZ,即校验值和实测值之间存在一定的误差。(2)(提高)在实验4的例程test_2553.c的基础上使系统时钟工作在不同的频率下,观察灯的亮
28、灭速度。由于例程在实验四中有,为简洁说明,这里不再将程序完整地给出,而只给出对于系统时钟的相关设置指令。 设置主系统时钟MCLK=复位频率/8BCSCTL2|=DIVM0+DIVM1;只需在程序中加入上面语句,对SMCLK进行八分频; 设置主系统时钟MCLK=16MHZif(CALBC1_16MHZ!=0xff) BCSCTL1=CALBC1_16MHZ; DCOCTL=CALDCO_16MHZ; 通过观察发现在两种不同的主时钟控制下,16MHZ主时钟时对应的程序灯闪烁的要比复位频率/8的主时钟时对应的灯闪烁的快很多。由于程序执行都是在主系统时钟的控制下进行的,所以当主系统时钟频率较高时,对应
29、的程序执行速度也较快,由于在例程中灯的闪烁快慢是由延时函数实现的,当主频较高时,延时函数的延时时间较短,所以对应的灯的闪烁速度较快。5. 定时器A的定时功能学习(1)设计思路通过定时器A实现1s的定时中断,在中断中利用变量计数实现当前秒值的记录,并将该变量的值取反后赋给P1.0P1.7端口,控制LED等闪烁。并且可以通过计数变量是否是五的倍数来控制蜂鸣器。选择计数时钟为ACLK默认值32768HZ,所以要使每1s产生一次中断,则需要取TA0CCR0为32767。(2)硬件连接图(3)C语言编程#include io430.h#include in430.hunsigned number=0;u
30、nsigned buzz=0;int main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P1SEL=0; P1SEL2=0; P1DIR=0xff; P1OUT=0xff; /设置P1.0P1.7为输出端口 P2SEL&=BIT0; P2SEL2&=BIT0; P2DIR|=BIT0; P2OUT|=BIT0; /设置P2.0为输出端口 /*定时中断相关设置*/ TA0CTL|=TACLR+TASSEL_1+MC_1; TA0CCR0=32767; TA0CCTL0|=C
31、CIE; /分控位 _EINT(); /总控位打开 while(1);#pragma vector=TIMER0_A0_VECTOR _interrupt void timer0_A0_ISR() number+; /计数加1 buzz+; /蜂鸣器控制计数 if(number=0xff) number=0; if(buzz=5) buzz=0;P2OUT&=BIT0; if(buzz=1) P2OUT|=BIT0; P1OUT=number; 6. PWM波形输出(1)采用定时器比较输出功能,编程在P1.2上输出频率为264HZ,占空比为50%的方波信号。设计思路计时时钟采用ACLK,频率为
32、32768HZ,所以为产生264HZ的方波信号,可以使TA0CCR0=32768/264-1=123(取整之后),为保证占空比为50%,应使TA0CCR1=0.5*124-1=61,采用OUTMOD_2即可产生想要的波形。硬件连接图C语言编程#include io430.h#include in430.hint main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P1SEL|=BIT2; P1SEL2&=BIT2; P1DIR|=BIT2; /P1.2输出设置 TA0CCR
33、0=123; /设置CCR1和CCR0 TA0CCR1=61; TA0CCTL1=OUTMOD_2; /输出模式2 TA0CTL|=TACLR+TASSEL_1+MC_1; while(1);(2)编程在P1.2上分别输出264HZ,297HZ,330HZ,352HZ,396HZ,440HZ,495HZ,538HZ的方波信号。对于生成不同频率的方波信号,其设计方法与(1)中相同,故不再赘述,将计算得到的参数值列举在下表中:输出方波频率/HZTA0CCR0TA0CCR12641236129710954330994935292463968140440733649565325385929硬件连接图与
34、(1)中相同,C语言程序如下所示:#include io430.h#include in430.hvoid delay() /延时函数 for(unsigned int i=0;i0xffff;i+);int main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P1SEL|=BIT2; P1SEL2&=BIT2; P1DIR|=BIT2; /P1.2输出设置 while(1) TA0CCTL1=OUTMOD_2; /输出模式2 TA0CTL|=TACLR+TASSEL_1+
35、MC_1; unsigned int j; for(j=0;j8;j+) switch(j) case(0):TA0CCR0=123; TA0CCR1=61;break; case(1):TA0CCR0=109; TA0CCR1=54;break; case(2):TA0CCR0=99; TA0CCR1=49;break; case(3):TA0CCR0=92; TA0CCR1=46;break; case(4):TA0CCR0=81; TA0CCR1=40;break; case(5):TA0CCR0=73; TA0CCR1=36;break; case(6):TA0CCR0=65; TA0
36、CCR1=32;break; case(7):TA0CCR0=59; TA0CCR1=29;break; delay(); 7. (提高)低功耗模式学习(1)实验现象:当程序从复位状态运行时,LED4先闪烁5次,然后蜂鸣器鸣叫三次,然后不再有反应。当按键K2时,蜂鸣器鸣叫三下,然后LED4闪烁5次,然后LED灯和蜂鸣器不再有动作。通过示波器观察ACLK和SMCLK的输出,得到结论如下:ACLKSMCLK进入低功耗之前32.768KHZ1MHZ进入低功耗之后无输出,关闭无输出,关闭响应中断后32.768KHZ1MHZ退出中断后无输出,关闭无输出,关闭发光二极管和蜂鸣器:发光二极管蜂鸣器进入低功耗
37、之前L4闪烁5次蜂鸣三次进入低功耗之后无动作无动作响应中断后无动作蜂鸣三次退出中断后L4闪烁5次无动作分析:根据程序可知,在程序开始运行时,程序先使LED4闪烁5次,然后蜂鸣器鸣叫3次,之后进入主循环中,进入低功耗模式LPM4,这时候程序虽然运行到Blink();但是由于时钟已经关闭,所以程序指针会一直停留在此处。当相应中断之后,从低功耗模式中进入活动模式,执行中断子程中的Buzz();使蜂鸣器鸣叫三次,然后由于LPM_EXIT();使当程序退到主循环时,处于活动模式,所以会执行Blink();使LED4闪烁五次,紧接着又会进入低功耗模式。(2)当程序中没有了LPM_EXIT语句之后,当程序从
38、中断子程中跳出之后,会立即进入低功耗模式,并不会使LED4再闪烁5次。这是因为在相应中断子程之前,程序的所有状态被存储在SR中,如果在退出中断子程之前没有LPM_EXIT语句将主程序的状态从低功耗退出,则当中断子程执行完之后,程序会直接进入低功耗模式,则主循环中的Blink()语句仍然无法执行。8.(提高)研究看门狗定时器的定时控制和应用(1)设计思路使用看门狗定时器来定时,需要使看门狗工作在定时器状态,可以使用宏定义来设置看门狗控制寄存器的值。采用ACLK作为时钟。(2)C语言编程#include io430.h#include in430.hunsigned number=0;unsigned buzz=0;int main( void ) WDTCTL = WDT_ADLY_1000; /定时1s P1SEL=0; P1SEL2=0; P1DIR=0xff; P1OUT=0xff; /设置P1.0P1.7为输出端口 P2SEL&=BIT0; P2SEL2&=BIT0; P2DIR|=BIT0; P2OUT|=BIT0; /设置P2.0为输出端口 IE1|=WDTIE; /分控位打开 _EINT(); /总控位打开 w
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论