单片机原理及应用蔡启仲第5章定时器计数器分析

上传人:cl****1 文档编号:587505274 上传时间:2024-09-06 格式:PPT 页数:44 大小:1.84MB
返回 下载 相关 举报
单片机原理及应用蔡启仲第5章定时器计数器分析_第1页
第1页 / 共44页
单片机原理及应用蔡启仲第5章定时器计数器分析_第2页
第2页 / 共44页
单片机原理及应用蔡启仲第5章定时器计数器分析_第3页
第3页 / 共44页
单片机原理及应用蔡启仲第5章定时器计数器分析_第4页
第4页 / 共44页
单片机原理及应用蔡启仲第5章定时器计数器分析_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《单片机原理及应用蔡启仲第5章定时器计数器分析》由会员分享,可在线阅读,更多相关《单片机原理及应用蔡启仲第5章定时器计数器分析(44页珍藏版)》请在金锄头文库上搜索。

1、第5章定时器/计数器2 第第5章章 目录目录5.1 定定时/计数器的数器的结构构 5.1.1 定定时器器/计数器的核心原型数器的核心原型 5.1.2 定定时器器/计数器的数器的组成成 5.1.3 定定时器器/计数器的工作方式寄存器数器的工作方式寄存器TMOD 5.1.4控制寄存器控制寄存器TCON5.2 定定时器器/计数器的工作方式数器的工作方式 5.2.1 方式方式1 5.2.2 方式方式2 5.2.3 方式方式3 5.2.4 方式方式05.3 定定时器器/计数器的数器的应用用 5.3.1 方式方式1的的应用用举例例 5.3.2 方式方式2的的应用用举例例 5.3.3 方式方式3的的应用用举

2、例例 5.3.4 外部外部输入的入的计数脉冲信号的要求数脉冲信号的要求习题35.1 5.1 定时器定时器/ /计数器的结构计数器的结构 微处理器应用系统中,经常完成如下工作: 1. 特定事件的定时控制特定事件的定时控制 2. 脉冲个数的统计脉冲个数的统计 因此,定时功能和计数功能就是处理器必须具备的一项基本配备。 51单片机内部就具备定时器和计数器,以满足功能需要。定时器定时器/计数器计数器的核心部件就是计数器核心部件就是计数器(参考数字电子技术中的时序逻辑电路),额外附件了其他控制单元电路。5.1.1 5.1.1 定时器定时器/ /计数器的核心原型计数器的核心原型 定时器/计数器的主要功能部

3、件的核心原型就是+1计数器。图51 3位异步+1计数器的组成 4图52 3位异步+1计数器的时序图 在计数脉冲CP的作用下, JK触发器输出端Q0Q0、Q1Q1、Q2Q2的状态变换由000001010011100101110111000000001010011100101110111000时,总共需要8个计数脉冲。 5定时功能(设定时功能(设5 5秒定时):秒定时):(1) 设置Q0、Q1、Q2的初始状态为“011”(定时初值 )(2) CP脉冲(频率为1Hz)作用下,Q0、Q1、Q2状态变换历经011100 101110111000。(3) 5个时钟脉冲周期之后,即时间恰好为5秒,此时计数状

4、态由111 000 ,溢出。计数功能(需计数功能(需3 3次计数):次计数):(1) 设置Q0、Q1、Q2的初始状态为“101”(定时初值 )(2) 外部待计数的触发脉冲(频率未知)作用下,Q0、 Q1、Q2状态变换历经101110111000。 (3) 3个计数触发脉冲之后,即计数次数恰好为3,此时计数状态由111 000 ,溢出。65.1.2 5.1.2 定时器定时器/ /计数器的组成计数器的组成 51单片机内部一般有2 23 3个可编程定时器个可编程定时器/ /计数器计数器,其结构基本相同。常规系列80C51单片机内部设有2 2个个1616位位可编程定时器/计数器,分别是T0T0和和T1

5、T1。图53 定时器/计数器结构框图7特点:特点:(1) 独立性独立性:定时器/计数器和内部CPU相互独立,互不 影响,即计数过程计数过程与单片机执行程序并行进行执行程序并行进行。(2) 51单片机内部有T0、T1两个定时器/计数器。(3) 两个定时器/计数器结构相同结构相同。(4) 每个定时器/计数器均具备独立的+1计数器计数器THx和 TLx(x取0或1)。(5) 两个定时器/计数器共同受TMOD(工作方式寄存器) 和TCON(控制寄存器)相应位相应位的控制控制其工作。8(1) GATE 门控位 (2) 工作模式选择位(3) M1和M0 工作方式选择位5.1.3 5.1.3 工作方式寄存器

6、工作方式寄存器TMOD TMOD 特殊功能寄存器特殊功能寄存器TMODTMOD用于设置设置定时器/计数器T0和T1工作方式工作方式。字节地址为89H,不能位寻址。图54 TMOD的位定义9GATE 门控位GATE=0:定时器定时器/计数器的运行启动控制与外部引脚无关计数器的运行启动控制与外部引脚无关,仅由仅由TRx(x取0或1)位通过置置1实现。GATE=1:定时器/计数器的运行启动控制与外部引脚有关,即由TRx(x取0或1)位和外部引脚 (x取0或1)的电平情况共同作用。 当 ,TRx=1,启动Tx/ Cx工作。TMOD工作方式寄存器工作方式寄存器10 工作模式选择位 =0,定时器/计数器的

7、工作模式工作模式为定时器定时器,固定的定时时钟脉冲来自于12分频分频的单片机时钟脉时钟脉冲冲 。 =1,定时器/计数器的工作模式工作模式为计数器计数器,计数脉冲计数脉冲来自于P3.4(T0)/P3.5(T1)引脚输入引脚输入的计数脉冲 。11M1和M0 工作方式选择位 M1M0工作方式工作方式备备 注注00方式013位计数长度,软件程序装载初值,T0和T1均适用01方式方式116位计数长度,软件程序装载初值,T0和T1均适用10方式方式28位计数长度,自动重新装载初值,T0和T1均适用11方式方式3特殊情况,仅适用于T0,分成两个8位计数器,T1停止计数12(1) TFx 溢出标志位 (2)

8、TRx 运行控制位(3) IEx 外部中断请求标志位(与定时器与定时器/计数器无关计数器无关)(4) ITx 外部中断触发模式选择位(与定时器与定时器/计数器无关计数器无关)5.1.4 5.1.4 控制寄存器控制寄存器TCON TCON 控制寄存器控制寄存器TCONTCON用来完成启动控制、溢出判断、中断标志等功能配置 。字节地址为88H,位寻址8FH88H。图55 TCON的位定义13TFx 溢出标志位TFx =0,计数值无溢出。TFx =1,计数值有溢出。当+1计数器的计数值达到最大值时,在下一个输入脉冲作用下产生溢出,由硬件完成TFx的置1操作,并同时申请中断。 控制寄存器控制寄存器TC

9、ONTCON14TRx 运行控制位TRx=0,停止定时器/计数器Tx工作(绝对控制,计数器此时停止工作) 。TRx=1,启动定时器/计数器Tx工作(相对控制,是否计数开始还需要考虑GATE位的配置)。155.2 5.2 定时器定时器/ /计数器的工作方式计数器的工作方式 通过对定时器/计数器的工作方式寄存器TMOD的配置,编程M1位位和M0位位,可以实现定时器/计数器的工作方式选择。 51单片机的定时器/计数器具备4 4种工作方式种工作方式,分别是方式方式0 0,方式,方式1 1,方式,方式2 2,方式,方式3 3。 现以T0为例来说明定时器/计数器的各个工作方式。165.2.1 5.2.1

10、方式方式1 1 方式1为1616位位定时器/计数器工作方式,其16位计数器由TH0TH0和和TL0TL0共同组成共同组成,其中TH0为高8位,TL0为低8位。图56 方式1基本电路结构框图 17工作模式选择定时/计数(计数脉冲来源)启动/停止控制电路(启动:与门输出为1)(停止:与门输出为0)启动/停止模拟开关(闭合:控制端为1)(打开:控制端为0)16位计数器模块(TH0:高8位)(TL0:低8位)中断标志(溢出: TF0=1)(正常: TF0=0)18启动/停止控制电路计数器模块模拟开关溢出中断工作模式选择工作模式选择定时定时/计数计数(计数脉冲来源计数脉冲来源)=0时,开关S1拨至上侧,

11、定时模式。16位+1计数器的计数脉冲信号来自于51单片机时钟振荡器的时钟脉冲的12分频。=1时,开关S1拨至下侧,计数模式。外部计数触发脉冲来自于单片机的引脚T0(P3.4)。19计数触发脉冲启动/停止控制电路计数器模块溢出中断模拟开关模拟开关(闭合:控制端为闭合:控制端为1)(打开:控制端为打开:控制端为0)模拟开关 当控制端电平信号为1(高电平)时,模拟开关闭合,通道导通,触发脉冲加载到计数器模块。 当控制端电平信号为0(低电平)时,模拟开关打开,通道断开,触发脉冲无法加载到计数器模块。20计数触发脉冲计数器模块模拟开关溢出中断启动启动/停止控制电路停止控制电路(启动:与门输出为启动:与门

12、输出为1)(停止:与门输出为停止:与门输出为0)TR0=0,与门输出锁定为0(低电平),模拟开关打开,停止计数,T0停止工作。 TR0=1,与门输出需考虑另一端电平(即或门输出)。GATE=0,非门控状态非门控状态。或门输出锁定为1(高电平),此时T0启/停只受TR0控制。 GATE=1,门控状态。或门输出受外部引脚P3.2(INT0)控制,仅有P3.2引脚为高电平时,或门输出为1,结合TR0,共同控制 T0的启/停。21计数触发脉冲启动/停止控制电路模拟开关溢出中断16位计数器模块位计数器模块(TH0:高:高8位位)(TL0:低:低8位位)计数器模块计数器模块:1616位计数器,位计数器,例

13、如指定计数初值为5000H,则计数器变化5000H5001H5002HFFFEHFFFFH0000H在计数触发脉冲作用下,从指定的计数初值开始+1操作,每一个脉冲,进行一次+1操作。当计数值由FFFFH0000H变化时,产生溢出,置位溢出标志位。其中,高8位存放在TH0中,低8位存放在TL0中,组合生成16位计数值。22计数触发脉冲启动/停止控制电路计数器模块中断标志中断标志(溢出:溢出: TF0=1)(正常:正常: TF0=0)计数器模块计数触发脉冲计数器模块启动/停止控制电路计数触发脉冲计数器模块模拟开关中断标志模块中断标志模块:当16位计数器计数值由FFFFH0000HFFFFH0000

14、H跳变时,硬件置位TF0,标明定时器/计数器T0已经发生溢出,供处理器中断查询。235.2.2 5.2.2 方式方式2 2 方式2为自动装载初值自动装载初值的8 8位位定时器/计数器工作方式 ,其8位计数器位计数器由TL0组成。而TH0作为自动重载自动重载初值备用寄存器,当溢出发生后,由硬件完成计数初值硬件完成计数初值的重新赋值重新赋值。图57 方式2基本电路结构框图 与方式与方式1 1的区别的区别245.2.3 5.2.3 方式方式3 3 方式3:只能用于设置定时器定时器/计数器计数器T0。 工作方式3的引入,目的在于通过该方式的设置,实现增加一个8位定时器的目的。 T0工作于方式3时, T

15、0被设置为两个8位定定时器器/计数器,一数器,一个占用个占用T0的的资源,另一个在源,另一个在硬件上占用了T1的TR1和TF1,导致T0工作于方式3时,T1不能够使用TR1和TF1,使得T1的功能弱化。25方式方式3 3结构框图结构框图图58 T0方式3基本电路结构框图 定时器定时器/ /计数器功能计数器功能只有定时器功能只有定时器功能与与26T0T0工作于方式工作于方式3 3时时T1T1的工作状态的工作状态图59 T1工作于方式1基本电路结构框图 图510 T1工作于方式2基本电路结构框图 或或275.2.4 5.2.4 方式方式0 0 方式0为1313位位定时器/计数器工作方式,其13位计

16、数器由TH0和TL0的低5位共同组成。方式0基本电路结构框图 285.3 5.3 定时器定时器/ /计数器的应用计数器的应用 定时器/计数器是所有的微处理器不可或缺的组成部件,应用广泛。其应用应用方面:定时和计数。其编程方法编程方法:查询法和中断法。其编程过程:(1) 计算初值。 (2) 定时器/计数器的初始化编程。 (3) 定时器/计数器所要完成功能的程序设计。29计算初值计算初值X 计算初始计数开始的值计算初始计数开始的值,即从哪个值开始进行+1操作,直至计数溢出或被停止。 初值初值:计数的最大值确定的定时时间t所需要的计数个数 或计数的最大值确定的计数值M所需要的计数个数计数功能定时功能

17、方式1方式方式1:方式方式1:方式方式2、3:方式2、3方式2、3方式方式2、3:305.3.1 5.3.1 方式方式1 1的应用举例的应用举例例例5-1 某51单片机应用系统,系统晶振的时钟频率采用12MHz,在P1.0引脚输出一个周期为10ms的方波信号,如图511所示。 图511(1) (1) 计算定时初值计算定时初值X X 时钟频率fOSC=12MHz,12分频后为1MHz,周期为1s,定时时间5ms。(2) (2) 初始化定时器初始化定时器T1T1:查询方法编程。初始化TL1、TH1、TMOD、TCON31 ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV

18、 SP, #60H ;开辟堆栈空间,栈底的地址设置为60H MOV TMOD, #10H ;设置T1为工作方式1,非门控的定时器模式 MOV TCON, #00H ;设置T1相关标志位,TR1=0,TF1=0 MOV TL0, #78H ;设置定时初值低8位 MOV TH0, #0ECH ;设置定时初值高8位 SETB TR1 ;启动T1开始定时 LOOP:JBC TF1, TIME1 ;判断T1是否溢出,若TF1=0,顺序执行 ;如果TF1=1,清TF1,转移到TIME1执行 SJMP LOOP ;TF1=0,返回LOOP再继续查询TIME1:LCALL CPLP10 ;TF1溢出位有效,调

19、用定时处理子程序CPLP10 SJMP LOOP ;实现产生方波脉冲的循环输出 ORG 0090H ;定时处理子程序入口地址CPLP10:MOV TL1, #78H ;重新设置定时初值低8位 MOV TH1, #0ECH ;重新设置定时初值高8位 CPL P1.0 ;取反P1.0,输出10ms方波 RET ;子程序返回 END ;汇编源文件编译结束(3 3)完成功能程序设计:)完成功能程序设计:查询TF1是否为1,判断是否溢出,定时时间到,完成P1.0引脚的取反操作。初初始始化化查询溢出标志位查询溢出标志位调用调用子程序子程序 32方式方式1 1的应用举例的应用举例例例5-2 某51单片机应用

20、系统,系统晶振的时钟频率采用12MHz,通过定时器T0产生1s的定时,驱动P1.0引脚电平取反操作程序。 时钟频率为12MHz时,各工作方式最长定时时间如下: 方式0 最长定时时间:8.192ms方式1 最长定时时间:65.536ms方式2 最长定时时间:0.256ms方式3 最长定时时间:0.256ms 根据题目要求,需要定时1秒,即便选择方式1,也无法直接实现1秒定时需要。此时可采用“硬件硬件( (定时器定时器) )定时定时+ +软件计数软件计数”的方法达到目标要求。 设定定时时间为50ms50ms,通过程序设置循环变量计数2020次次,可得到2050ms=1000ms=1s的定时时间。

21、33(1) 50ms定时初值定时初值X (2) 初始化定时器初始化定时器T0 初始化程序主要完成对TL0、TH0、TMOD、TCON的设置,以及循环变量计数值的初始化设置。设循环变量R0存放计数值,则初始化其值为(R0)=20。 设定定时时间为设定定时时间为50ms50ms。 34(3) 完成功能程序设计完成功能程序设计 ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV SP, #60H MOV TMOD, #01H MOV TCON, #00H MOV TL0, #0B0H MOV TH0, #3CH MOV R0, #20 SETB TR0LOOP:JBC TF

22、0, TIME0 SJMP LOOPTIME0:LCALL MS50 SJMP LOOP ORG 0090H MS50:DJNZ R0, NEXT CPL P1.0 MOV R0, #14H NEXT:MOV TL0, #0B0H位 MOV TH0, #3CH RET END355.3.2 5.3.2 方式方式2 2的应用举例的应用举例例例5-3 编写应用T0实现对T0(P3.4)引脚的方波脉冲个数检测程序。每检测到100个脉冲,驱动P1.0引脚电平取反,如图512。 图512 方波脉冲(1) 计算定时初值计算定时初值X (2) 初始化定时器初始化定时器T1 查询方法编程。初始化TL1、TH1

23、、TMOD、TCON36(3) 完成功能程序设计完成功能程序设计 ORG 0000H LJMP MAIN ;跳转到主程序 ORG 0030H MAIN:MOV SP, #60H ;开辟堆栈空间 MOV TMOD, #06H ;初始化T0为工作方式2,计数器模式 MOV TCON, #00H ;初始化T0相关标志位 MOV TL0, #9CH ;初始化8位计数初值 MOV TH0, #9CH ;初始化TH0,必须满足(TH0)=(TL0) SETB TR0 ;启动T0工作 LOOP:JBC TF0, CNT100 ;判断T0是否溢出,若TF0=0,顺序执行 ;如果TF0=1,清TF0,转移到CN

24、T100执行 ;当TF0由01时,单片机自动将(TH0)TL0 SJMP LOOP ;反复查询CNT100:LCALL CPLP10 ;TF0溢出位有效,调用计数处理子程序 SJMP LOOP ;实现产生方波脉冲的循环输出 ORG 0090H ;计数处理子程序入口地址CPLP10:CPL P1.0 ;已计数100个脉冲,取反P1.0 RET ;子程序返回 END ;汇编源文件编译结束375.3.3 5.3.3 方式方式3 3的应用举例的应用举例例例5-4 某51单片机应用系统,要求P1.0引脚以200s的周期输出方波,P1.1引脚以482s的周期输出方波,且同时以T1作为串行通信的波特率发生器

25、。(系统晶振采用12MHz,波特率为9600bps) 分析:分析:根据题目要求,至少需要三个硬件定时器/计数器完成该项工作,而51单片机内部仅仅具备两个硬件定时器/计数器。T0工作于方式3恰好可以解决此问题,应用T0实现两个硬件的8位定时器(参见图58),将T1设置为方式2(参见图510),构建三个硬件定时器,满足本题目的要求。(1) 计算定时初值X (2) 初始化定时器T1:查询方法编程。初始化T0、T1相关寄存器的初始化。TL0作为8位定时器: TH0作为8位定时器: T2为工作于方式2的定时器,波特率Xbps计算公示为: 38(3) 完成功能程序设计完成功能程序设计 ORG 0000H

26、LJMP MAIN ORG 0050H MAIN:MOV SP, #60H MOV TMOD, #23H ;初始化T0定时:方式3;T1定时:方式2 MOV TCON, #00H ;初始化T0、T1相关标志位 MOV TL0, #9CH ;设置TL0的定时初值X:t=100s MOV TH0, #0FH ;设置TH0的定时初值X:t=241s MOV TL1, #0FDH ;设置波特率发生器的定时初值Xbps MOV TH1, #0FDH ;设置TH1的初值,(TH1)=(TH0)=FDH SETB TR0 ;启动T0的TL0定时 SETB TR1 ;启动T0的TH0定时 LOOP:JBC T

27、F0, TIME100 ;判断100s定时计数是否溢出,溢出转移 JBC TF1, TIME241 ;判断241s定时计数是否溢出,溢出转移 SJMP LOOP ;反复查询TIME100:MOV TL0, #9CH ;100s定时处理程序,重新装载定时参数初值 CPL P1.0 ;每个100s取反一次P1.0 SJMP LOOP ;实现周期为200s的方波脉冲的循环输出TIME241:MOV TH0, #0FH ;241s定时处理程序,重新装载定时初值 CPL P1.1 ;每个241s取反一次P1.1 SJMP LOOP ;实现周期为482s方波脉冲的循环输出 END ;汇编源文件编译结束39

28、例例5-5 5-5 测量外部信号电平宽度测量外部信号电平宽度 利用定时器T0测量 (P3.2)引脚外部输入周期性方波信号的高电平THx持续时间。(振荡频率fOSC=12MHz)图513 根据题目要求,待测方波如图513所示。 由于不对低电平测量,可以应用T0门控GATE方式进行测量,设置T0为定时器模式,工作于方式1,定时初值:(TH0)=(TL0)=00H。 过程分析:过程分析: (1) GATE=1, 输入为低电平时,设置TR0=1,T0停止定时。 (2) GATE=1,TR0=1, 输入由01的上升沿跳变时,T0开始定时。 TH0和TL0组成的16位+1计数器从0000H开始+1计数。

29、(3) 当 (P3.2)引脚输入由高电平低电平时,即高电平THx的下降 沿,T0停止定时,读出并存放TH0和TL0中的定时计数值,该值T 就是高电平THx的持续时间。 40(3) 完成功能程序设计完成功能程序设计 CNT_H EQU 45H CNT_L EQU 44H ORG 0000H ;程序开始 LJMP MAIN ;跳转到主程序 ORG 0050H ;主程序入口地址 MAIN:MOV SP,#60H ;开辟堆栈空间 MOV TMOD, #09H ;设置T0门控方式,工作于定时方式1,GATE=1 CLR A MOV TCON, A ;初始化T0相关标志位 MOV TL0, A ;初始化定

30、时低8位初值(TL0)=00H MOV TH0, A ;初始化定时高8位初值(TH0)=00H SETB P3.2 ;设置P3.2引脚为高电平,为正确读取输入状态作好准备 JB P3.2, $ ;P3.2=0,顺序执行;P3.2=1,等待待测方波低电平的出现 SETB TR0 ;为启动T0定时计数做好准备LOOP:SETB P3.2 ;P3.2输入为0,设置P3.2=1,为正确读取输入状态作好准备 JNB P3.2, LOOP ;P3.2=0转移;P3.2=1顺序执行,并启动T0定时计数 JB P3.2, $ ;等P3.2上待测方波低电平的出现;P3.2=0,顺序执行 CLR TR0 ;测量完

31、成,清零TR0,T0停止定时计数 MOV CNT_H, TH0 ;存放定时计数结果的高8位时间数据 MOV CNT_L, TL0 ;存放定时计数结果的低8位时间数据 SJMP $ ;原地踏步 END415.3.4 5.3.4 单片机外部输入的计数脉冲信号的要求单片机外部输入的计数脉冲信号的要求 例53中T0(P3.4)引脚输入的计数脉冲信号必须满足一定的条件:(1) 脉冲信号边沿不能够有抖动,否则计数错误;(2) 脉冲信号最大频率要小于单片机振荡时钟频率的1/24。(3) 脉冲占空比:高电平TH和低电平TL维持一个机器周期以上。 究其原因,主要是单片机执行指令的具体过程和特点所决定。 根据单片

32、机执行指令的时序图,每个机器周期的S5P2期间,均对外部输入引脚T0或T1进行电平采样。如果在前一个机器周期的采样过程中,T0引脚电平为“1”,而在当前机器周期的采样中T0引脚电平为“0”,即表明产生了一个下降沿,则在下一个机器周期的S3P1期间,+1计数器将进行加1操作。 4243习题习题51 51单片机内部有几个定时/计数器?它们是由哪些特殊功能寄存器组成?计数脉冲的来源?52 如果51单片机晶振频率=3MHz,分析定时器/计数器工作在方式1和方式2的最大定时时间各为多少?53 简述定时器/计数器的门控信号GATE设置为1时,定时器的启动方法。54 编程实现选用T1方式2产生500s的定时

33、程序,在P1.0输出周期为1ms的方波( =6MHz)。55 已知51单片机应用系统采用6MHz晶振,应用T0定时,在P1.0输出一个高电平宽度为100ms,低电平宽度50ms的方波信号。4344习题习题56 仔细思考例55,请分析是否可以利用定时器实现超宽脉冲的时间测量。如果可以,说明如何操作;如果不可以,说明为什么。57 利用51单片机产生一个实时时钟,上电初始时钟从00:00:00开始,以秒为单位。58 使用定时器/计数器编写跑马灯的程序:实现连接在P1口上的8个LED依次亮灭。每次只能一个灯状态变化,且按由 P1.7P1.0的顺序依次亮灭,每次变化时间间隔100ms,设51单片机晶振时钟频率为6HMz。59 对于软件延时程序和定时器/计数器定时程序的执行过程,分析比较两种定时方式的特点和优缺点。44

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号