第5章定时计数器原理及应用_第1页
第5章定时计数器原理及应用_第2页
第5章定时计数器原理及应用_第3页
第5章定时计数器原理及应用_第4页
第5章定时计数器原理及应用_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

1、第第5章章 定时定时/计数器原理及应用计数器原理及应用 在实时控制系统中,常常需要有实时时钟以实现定时 或延时控制,也常需要有计数功能以实现对外界事 件进行计数。MCS-5l单片机内有两个定时器计数 器(Timer/Counter)T0和T1;MCS-52子系统中除 这两个定时器外,还有一个定时器计数器T2; 80C552中还包括用于看门狗的8位定时器T3;后者 的功能比前者强。本章主要介绍MCS-5l的两个定时 器结构、原理、工作方式及其应用。 5.1 定时定时/计数器的结构和工作原理计数器的结构和工作原理 5.1.1 单片机定时单片机定时/计数器的结构计数器的结构 8051单片机内部有两个

2、16位的可编程定时/计 数器,称为定时器0(用T0表示)和定时器1 (用Tl表示),可以编程选择其作为定时器 用或作为计数器用。此外,工作方式、定时 时间、计数值、启动、中断请求等都可以由 程序设定,其逻辑结构框图框图如图5-1所示。 8051定时/计数器由定时器0、定时器1、定时 器方式寄存器TMOD和定时器控制寄存器 TCON组成。 定时器0、定时器1是16位加法计数器,分别由两 个8位专用寄存器组成:定时器0由TH0和TL0 组成,定时器1由TH1和TL1组成。TL0、TL1、 TH0、TH1的访问地址依次为8AH8DH,每个 寄存器均可单独访问。定时器0或定时器1用作 计数器时,对芯片

3、引脚T0(P3.4)或T1(P3.5) 上输入的脉冲计数,每输入一个脉冲,加法计 数器加1;其用作定时器时,对内部机器周期 脉冲计数,由于机器周期是定值,故计数值确 定时,时间也随之确定。 其中TMOD、TCON与定时器0、定时器1间通过 内部总线及逻辑电路连接,TMOD用于设置定 时器的工作方式,TCON用于控制定时器的启 动与停止。 5.1.2定时定时/计数器工作原理计数器工作原理 MCS-5l单片机的两个定时器/计数器均有两 种工作方式,即定时工作方式和计数工作方 式。这两种工作方式由TMOD的D6位和D2位 选择,即位,其中D6位选择T1的工作方式, D2位选择T0的工作方式。工作原理

4、见图5-2。 图5-2 工作原理图(TX代表T1或T0) 1.定时工作方式 当定时/计数器设置为定时工作方式时,计数器对内部 机器周期计数,计数脉冲输入信号由内部时钟提供, 每过一个机器周期,计数器增1,直至计满溢出。定 时器的定时时间与系统的振荡频率紧密相关,因 MCS-51单片机的一个机器周期由12个振荡脉冲组成, 所以,计数器的计数频率为振荡器频率的l12。如果 单片机系统采用fOSC=12 MHz晶振,则计数器的计 数频率fcont=fOSCl12为1MHz,计数器计数脉冲 的周期等于机器周期,即: Tcont=lfcont=l(fOSCl12)=12fOSC。 式中 fOSC为单片机

5、振荡器的频率;fcont为计数脉冲的 频率。 这是最短的定时周期,适当选择定时器的初值 可获取各种定时时间。MCS-5l单片机的定 时器/计数器工作于定时方式时,其定时时 间由计数初值和所选择的计数器的长度(如8 位、13位或l6位)来确定。 2.计数工作方式 当定时/计数器设置为计数工作方式时,计数器对来自输 入引脚T0(P3.4)和T1(P3.5)的外部信号计数, 外部脉冲的下降沿将触发计数。在每个机器周期的 S5P2期间采样引脚输入电平,若前一个机器周期采 样值为1,后一个机器周期采样值为0,则计数器加1。 新的计数值是在检测到输入引脚电平发生1到0的负跳 变后,于下一个机器周期的S3P

6、1期间装入计数器中 的,可见,检测一个由1到0的负跳变需要两个机器周 期,所以,最高检测频率为振荡频率的1/24。计数器 对外部输入信号的占空比没有特别的限制,但必须保 证输入信号的高电平与低电平的持续时间在一个机器 周期以上。 当设置了定时器的工作方式并启动定时器工作后, 定时器就按被设定的工作方式独立工作,不再 占用CPU的操作时间,只有在计数器计满溢出 时才可能中断CPU当前的操作 52 定时器定时器/计数器的控制计数器的控制 单片机中的定时/计数器可以有两种用途,那么我们怎 样才能让它们工作于我们所需要的用途呢?这就需 要向有关寄存器写入一些控制命令字。在启动定时/ 计数器工作之前,C

7、PU必须将一些命令(称为控制 字)写入定时/计数器中,这个过程称为定时/计数 器的初始化。定时/计数器的初始化通过定时/计数 器的方式寄存器TMOD和控制寄存器TCON完成。 下面介绍与定时器/计数器工作有关的寄存器。 1定时定时/计数器方式寄存器计数器方式寄存器TMOD TMOD为定时器0、定时器1的工作方式寄存器, 其格式如下: TMOD的低4位为定时器0的方式字段,高4位 为定时器1的方式字段,它们的含义完全相同。 (1) M1和M0:方式选择位。2位可形成4种编 码,对应于4种操作方式。定义如下: Ml M0操作模式功 能 筒 述 0 0模式0l3位计数器,TLi只用低5位。 0 1模

8、式116位计数器。 1 0模式2 8位自动重装计数器。仅TLi作为计数器,而THi的 值在计数中不变。TLi溢出时,THi中的值自动装 入TLi中。 1 1模式3TO分成2个独立的8位计数器。 (2) :功能选择位。当=0时,定时器/计数器被设置为定时器工 作方式;计数脉冲由内部提供,计数周期等于机器周期。 当=1时,定时器/计数器设置为计数器工作方式,计数脉冲 为外部引脚T0或T1引入的外部脉冲信号。 (3)GATE:门控位。用来控制定时器/计数器的启动操作方式。 当GATE=O时,只能利用控制位TR0或TR1来控制定时器 计数器的启停。TRi位置1时,启动定时器计数器; TRi位为0时,定

9、时器计数器停止工作。 当GATE=1时,定时器/计数器的启动要由外部中断引脚和TRi位 共同控制。只有当外部中断引脚或为高时,软件控制位 TR0或TR1置l才允许外中断启动对应的定时器工作。 TMOD不能位寻址,只能用字节指令设置高4位定义定时器1, 低4位定义定时器0定时器工作方式。TMOD的低4位用于定 义定时器T0,高4位用于定义定时器Tl。系统复位时TMOD 所有位均置0。 2 定时器定时器/计数器控制寄存器计数器控制寄存器TCON TCON的作用是控制定时器的启动、停止,标 志定时器的溢出和中断情况。定时器控制字 TCON的格式如下: D7 (TCON.7) D6 (TCON.6)

10、D5 (TCON.5) D4 (TCON.4) D3 (TCON.3) D2 (TCON.2) D1 (TCON.1) D0 (TCON.0) TFlTRlTF0TR0IElITlIE0IT0 TCON(88H) 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H 各位含义如下: (1) TCON.7 TF1:定时器1溢出标志位。当定时器1计满数产生 溢出时,由硬件自动置TF1=1。在中断允许时,向CPU发出定时 器1的中断请求,进入中断服务程序后,由硬件自动清0。在中断 屏蔽时,TF1可作查询测试用,此时只能由软件清0。 (2) TCON.6 TR1:定时器1运行控制位。由软件置

11、1或清0来启动或 关闭定时器1。当由软件将TR1清0时,则停止定时器/计数器1的 工作。定时器/计数器1启动时该位应置“l”。 (3) TCON.5 TF0:定时器0溢出标志位。其功能及操作情况同 TF1。 (4) TCON.4 TR0:定时器0运行控制位。其功能及操作情况同 TR1。 (5) TCON.3 IE1:外部中断1请求标志位。 (6)TCON.2 IT1:外部中断1触发方式选择位。 (7)TCON.1 IE0:外部中断0请求标志位。 (8) TCON.0 IT0:外部中断0触发方式选择位。 定时器/计数器的启动与门控位(GATE)、外 部中断引脚上的电平有关。当GATE设置为0 时

12、,定时器/计数器的启动仅由TRi=1控制; 而当GATE设置为1时,如果要启动定时器/计 数器Ti,除要求TRi=l外,还要求外部中断=l。 TCON中的低4位用于控制外部中断,与定时/计 数器无关。当系统复位时,TCON的所有位均 清0。 TCON的字节地址为88H,可以位寻址,清 溢出标志位或启动定时器都可以用位操作指 令。SETB TR1、JBC TF1。 3定时定时/计数器的初始化计数器的初始化 由于定时/计数器的功能是由软件编程确定的, 所以,一般在使用定时器/计数前都要对其进 行初始化,初始化程序应放在主程序的开始 处。初始化骤如下 (1)确定工作方式对TMOD赋值。 确定定时器/

13、计数器的工作方式、操作模式、 启动控制方式,并利用传送指令将其写入 TMOD寄存器。例如,MOV TMOD #10H, 表明定时器1工作在方式1,且工作在定时器方 式。 (2) 预置定时器/计数器的初值。直接将初值写 入TH0、TL0或TH1、TL1中。定时/计数器的 初值因工作方式的不同而不同。l6位计数初值 必须分两次写入对应的计数器 当T0或T1工作于定时器或计数器方式时,其 计数初值如何确定?不同的工作方式、不 同的操作模式其计数初值均不相同。若设 最大计数值(溢出值)为M,各操作模式下的 M值为: 模式0: M=213=8192 模式1: M=216=65536 模式2: M=28=

14、256 模式3: M=28=256,定时器T0分成2个独 立的8位计数器,所以TH0、TL0的M均为 256。 因为MCS-51的两个定时器均为加1计数器,当 加到溢出值时产生溢出,将TFi位置l,可发出 溢出中断,因此,计数器初值X的计算式为: X=M-计数值 式中M由操作模式确定,计数值与定时器的工 作方式有关。 计数器方式 当T0或T1工作于计数器方式时,计数脉冲由外 部引入,它是对外部脉冲进行计数。因此计数 值应根据实际要求来确定。计数初值的计算公 式为: X=M-计数值 例如:某工序要求对外部脉冲信号计录lO0次后, 才需要处理,则计数初值为X=M-100。 定时器方式 当T0或T1

15、工作于定时器方式时,由于是对机器周期进行 计数,故计数值应为定时时间对应的机器周期个数。 为此,应首先将定时时间转换为所需要记录的机器周 期个数(计数值)。其转换公式为: 机器周期个数(计数值)=式中 Tc定时时间; Tp机器周期,;fosc为机器时钟(振荡器)的振荡频 率。 故计数初值的计算公式为: X=M-计数值=M-=M-(TCfosc)12。 (3) 根据要求考虑是否采用中断方式,直接对IE 位赋值。开放中断时,对应位置1;采用程序 查询方式时,IE中对应位应清0进行中断屏蔽。 (4) 启动定时/计数器工作。使用SETB TRi指 令。 若第一步设置为软启动,即GATE设置为0时, 以

16、上指令执行后,定时器/计数器即可开始工作。 若GATE设置为l时,还必须由外部中断源共同 控制,只有当引脚电平为高时,以上指令执行 后定时器/计数器方可启动工作。定时器/计数 器一旦启动就按规定的方式定时或计数。 由前述内容可知,通过对TMOD寄存器中M0、 M1位进行设置,可选择4种工作方式,下面 逐一进行论述。 1方式方式0图图5-3 定时器方式定时器方式0时的逻辑电路时的逻辑电路 结构图结构图 方式0构成一个13位定时/计数器。图5-3是定 时器0在方式0时的逻辑电路结构,定时器1的 结构和操作与定时器0完全相同。 5.3 定时定时/计数器的工作方式计数器的工作方式 由图可知16位加法计

17、数器(TH0和TL0)只用了 13位。其中,TH0占高8位,TL0占低5位(只 用低5位,高3位未用)。当TL0低5位溢出时自 动向TH0进位,而TH0溢出时向中断位TF0进 位(硬件自动置位),并申请中断。 装入和读取数据时,应注意13位数据与l6位 数据之间的转换。例如:将 X=0001111100000110B=1F06H的l6位数据 装入13位定时器计数器的工作寄存器 (THi+TLi(低5位)中。装入时应先将l6位数 据转换为13位工作寄存器所对应的数据。 方法是:l6位数据低5位作为TLi的低5位; 由于TLi的高3位未用,应补填O;l6位数据 的D12D5送入Thi中(高8位)。

18、所以13位 工作寄存器中存放的实际数值为 1111100000000110B,即F806H。 当 = 0时,多路开关连接12分频器输出, 定时器0对机器周期计数,此时,定时器0 为定时器。 当 = 1时,多路开关与T0(P3.4)相连, 外部计数脉冲由T0脚输入,当外部信号电 平发生由0到1的负跳变时,计数器加1,此 时,定时器0为计数器。 TC/ TC/ 当GATE = 0时,或门被封锁,信号无效。或门 输出常1,打开与门,TR0直接控制定时器0 的启动和关闭。TR0 = 1,接通控制开关, 定时器0从初值开始计数直至溢出。溢出时, 16位加计数器为0,TF0置位,并申请中断。 如要循环计数

19、,则定时器0需重置初值,且 需用软件将TF0复位, TR0 = 0,则与门被 封锁,控制开关被关断,停止计数。 当GATE = 1时,与门的输出由的输入电平和 TR0位的状态来确定。若TR0 = 1则与门打开, 外部信号电平通过引脚直接开启或关断定时 器0,当为高电平时,允许计数,否则停止计 数;若TR0 = 0,则与门被封锁,控制开关被 关断,停止计数。 例5.1 用定时器1,方式0实现1 s的延时。 解:因方式0采用13位计数器,其最大定时时间 为:81921 s = 8.192 ms,因此,定时时 间不可能像实训5步骤1)一样选择50ms,可 选择定时时间为5章ms,再循环200次。定时

20、 时间选定后,再确定计数值为5000,则定时 器1的初值为 X = M 计数值= 8192 5000 = 3192 = C78H = 0110001111000B 因13位计数器中TL1的高3位未用,应填写0, TH1占高8位,所以,X的实际填写值应为 X = 0110001100011000B = 6318H 即:TH1 = 63H,TL1 = 18H,又因采用方式0定时,故 TMOD = 00H。 可编得1 s延时子程序如下: DELAY:MOV R3,#200 ;置5 ms计数循环初值 MOV TMOD,#00H ;设定时器1为方式0 MOV TH1,#63H ;置定时器初值 MOV T

21、L1,#18H SETBTR1 ;启动T1 LP1: JBCTF1,LP2 ;查询计数溢出 SJMPLP1 ;未到5 ms继续计数 LP2: MOV TH1,#63H ;重新置定时器初值 MOVTL1,#18H DJNZ R3,LP1;未到1 s继续循环 RET;返回主程序 2方式方式1 定时器工作于方式1时,其逻辑结构图如图5-4所 示。 方式1构成一个16位定时/计数器,其结构与操作 几乎完全与方式0相同,惟一差别是二者计数 位数不同。作定时器用时其定时时间为 (M 定时器0初值)时钟周期12=(65536 定时 器0初值)时钟周期12 例5.2用定时器1,方式0 1 s的延时。 解:因方

22、式1采用16位计数器,其最大定时时间为: 655361 s = 65.3536ms,因此可选择定时时间 为50ms,再循环20次。定时时间选定后,再确定 计数值为50000,则定时器1的初值为 X = M 计数值= 65536 50000 = 15536= 3CB0H 即:TH1 = 3CH,TL1 = 0B0H,又因采用方式1定时, 故TMOD = 10H。可编得1 s延时子程序如下: DELAY:MOV R3,#14H;置50 ms计数循环初值 MOV TMOD,#10H ;设定时器1为方式1 MOV TH1,#3CH;置定时器初值 MOVTL1,#0B0H SETBTR1 ;启动定时器1

23、 LP1:JBC TF1,LP2 ;查询计数溢出 SJMPLP1;未到50 ms继续计数 LP2:MOV TH1,#3CH ;重新置定时器初值 MOVTL1,#0B0H DJNZR3,LP1;未到1 s继续循环 RET 3方式方式2 定时/计数器工作于方式2时,其逻辑结构图如图 5-5 方式2中,16位加法计数器的TH0和TL0具有不 同功能,其中,TL0是8位计数器,TH0是重 置初值的8位缓冲器。 从例5.1和例5.2中可看出,方式0和方式1用 于循环计数,在每次计满溢出后,计数器都 复0,要进行新一轮计数还须重置计数初值。 这不仅导致编程麻烦,而且影响定时时间精 度。方式2具有初值自动装

24、入功能,避免了上 述缺陷,适合用作较精确的定时脉冲信号发 生器。其定时时间为 (M 定时器0初值)时钟周期12=(256 定 时器0初)时钟周期12 方式2中16位加法计数器被分割为两个,TL0用 作8位计数器,TH0用以保持初值。在程序初始 化时,TL0和TH0由软件赋予相同的初值。一 旦TL0计数溢出,TF0将被置位,同时,TH0中 的初值装入TL0,从而进入新一轮计数,如此 循环不止。 例5.3 试用定时器1,方式2实现1 s的延时。 解:因方式2是8位计数器,其最大定时时间为:2561 s = 256 s,为实 现1 s延时,可选择定时时间为250 s,再循环4000次。定时时间选定后

25、, 可确定计数值为250,则定时器1的初值为:X = M 计数值=256 250 = 6 = 6H。采用定时器1,方式2工作,因此,TMOD =20H。 可编得1 s延时子程序如下: DELAY:MOVR5,#28H;置25 ms计数循环初值 MOV R6,#64H ;置250 s计数循环初值 MOV TMOD,#20H ;置定时器1为方式2 MOV TH1,#06H ;置定时器初值 MOV TL1,#06H SETB TR1 ;启动定时器 LP1:JBC TF1,LP2 ;查询计数溢出 SJMPLP1 ;无溢出则继续计数 LP2:DJNZR6,LP1 ;未到25 ms继续循环 MOVR6,#

26、64H DJNZ R5,LP1 ;未到1 s继续循环 RET 4方式方式3 定时/计数器工作于方式3时,其逻辑结构图如 图5-6所示。 方式3时,定时器0被分解成两个独立的8位计数器TL0 和TH0。其中,TL0占用原定时器0的控制位、引脚 和中断源,即、GATE、TR0、TF0和T0(P3.4)引 脚、(P3.2)引脚。除计数位数不同于方式0、方式 1外,其功能、操作与方式0、方式1完全相同,可定 时亦可计数。TH0占用原定时器1的控制位TF1和 TR1,同时还占用了定时器1的中断源,其启动和关 闭仅受TR1置1或清0控制。TH0只能对机器周期进 行计数,因此,TH0只能用作简单的内部定时,

27、不 能用作对外部脉冲进行计数,是定时器0附加的一个 8位定时器。二者的定时时间分别为 TL0:(M-TL0初值)时钟周期12=(256-TL0初值) 时钟周期12 TH0: (M-TH0初值)时钟周期12=(256-TH0初 值)时钟周期12 方式3时,定时器1仍可设置为方式0、方式1或方 式2。但由于TR1、TF1及T1的中断源已被定时 器0占用,此时,定时器1仅由控制位切换其定 时或计数功能,当计数器计满溢出时,只能将 输出送往串行口。在这种情况下,定时器1一 般用作串行口波特率发生器或不需要中断的场 合。因定时器1的TR1被占用,因此其启动和关 闭较为特殊,当设置好工作方式时,定时器1

28、即自动开始运行。若要停止操作,只需送入一 个设置定时器1为方式3的方式字即可。 例5.3 用定时器0。方式3实现1 s的延时。 解:根据题意,定时器0中的TH0只能为定时器, 定时时间可设为250 s;TL0设置为计数器,计数 值可设为200。TH0计满溢出后,用软件复位的方法 使T0(P3.4)引脚产生负跳变,TH0每溢出一次, T0引脚便产生一个负跳变,TL0便计数一次。TL0计 满溢出时,延时时间应为50ms,循环20次便可得到 1 s的延时。 由上述分析可知,TH0计数初值为 X =(256 250)= 6 = 06H TL0 计数初值为 X =(256 200)= 56 = 38H

29、TMOD = 00000111B = 07H 可编得1 s延时子程序如下: DELAY: MOV R3,#14H ;置100 ms计数循环初值 MOV TMOD,#07H ;置定时器0为方式3计数 MOV TH0,#06H ;置TH0初值 MOV TL0,#38H;置TL0初值 SETB TR0;启动TL0 SETB TR1;启动TH0 LP1: JBC TF1,LP2 ;查询TH0计数溢出 SJMP LP1 ;未到500 s继续计数 LP2:MOV TH0,#06H ;重置TH0初值 CLR P3.4 ;T0引脚产生负跳变 NOP ;负跳变持续 NOP SETBP3.4 ;T0引脚恢复高电平

30、 JBC TF0,LP3 ;查询TH0计数溢出 SJMP LP1 ;100 ms未到继续计数 LP3: MOV TL0,#38H ;重置TL0初值 DJNZ R3,LP1 ;未到1 s继续循环 RET 综上所述可知,模式0、模式1、模式3为非自 动重装计数器。在初始化程序中和中断服务 程序中均应对工作寄存器TLi、THi进行装载 操作。即利用MOV指令将装载值(计数初 值)装入工作寄存器中。 模式2为8位自动重装计数器。仅TLi作为工作寄 存器,而THi的值在计数中保持不变。TLi溢出 时,THi中的值将作为装载值由CPU自动装入 TLi中。因此,使用时为了保证Ti首次工作也能 正常运行,在初

31、始化时TLi、THi均应装入相同 的装载值(计数初值),而在中断服务程序中 不需要再装入计数初值。 模式3只适用定时器/计数器T0。T0在该模式 下被拆成两个独立的8位计数器TH0和TL0, 其中TL0使用原来T0的一些控制位和引脚, 它们是:、GATE、TR0、TF0和T0(P3.4) 引脚及(P3.2)引脚。此模式下的TL0的操作 与模式0、模式1完全相同,可作定时器也可 作计数器用。该模式下,TH0只可用作简单 的内部定时器功能,它借用原定时器T1的 控制位和溢出标志位TRl和TFl,同时占用了 T1的中断源。TH0的启动和停止仅受TRl的 控制。TRl=1,TH0启动定时;TRl=0,

32、 TH0停止定时工作。 当T0选作操作模式3时,由于Tl的TFl被TH0占 用,所以T1仅可用在任何不需要中断的场合, 仍可设置为模式0、模式1、模式2。通过设置 位可对内部时钟进行定时或对外部引脚脉冲 进行计数,也可用作串行口波特率发生器。 事实上,只在定时器/计数器T1用做串行口波 特率发生器时,T0才选作操作模式3。 5.4 定时定时/计数器的编程和应用计数器的编程和应用 定时/计数器是单片机应用系统中的重要部件, 通过下面实例可以看出,灵活应用定时/计数 器可提高编程技巧,减轻CPU的负担,简化 外围电路。 例1:用T1产生一个50Hz的方波,由P1.l输出,采用程序查询方式, fosc=12MHz。 解:方波周期T=l/50=O.02s=20ms,用T1定时10ms,计数初值为: X1=216-1010-31210612=65536-10000=55536=D8F0H 源程序如下: ORG 0000h LJMP T1BUS ORG 0030h T1BUS: MOV TMOD,#10H ;T1模式1,定时 SETB TRl ;启动T1 LOOP:MOV TH1,#0D8H ;T

温馨提示

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

评论

0/150

提交评论