单片机串口通信波特率自动识别.docx

上传人:b****3 文档编号:10332684 上传时间:2023-05-25 格式:DOCX 页数:45 大小:930.25KB
下载 相关 举报
单片机串口通信波特率自动识别.docx_第1页
第1页 / 共45页
单片机串口通信波特率自动识别.docx_第2页
第2页 / 共45页
单片机串口通信波特率自动识别.docx_第3页
第3页 / 共45页
单片机串口通信波特率自动识别.docx_第4页
第4页 / 共45页
单片机串口通信波特率自动识别.docx_第5页
第5页 / 共45页
单片机串口通信波特率自动识别.docx_第6页
第6页 / 共45页
单片机串口通信波特率自动识别.docx_第7页
第7页 / 共45页
单片机串口通信波特率自动识别.docx_第8页
第8页 / 共45页
单片机串口通信波特率自动识别.docx_第9页
第9页 / 共45页
单片机串口通信波特率自动识别.docx_第10页
第10页 / 共45页
单片机串口通信波特率自动识别.docx_第11页
第11页 / 共45页
单片机串口通信波特率自动识别.docx_第12页
第12页 / 共45页
单片机串口通信波特率自动识别.docx_第13页
第13页 / 共45页
单片机串口通信波特率自动识别.docx_第14页
第14页 / 共45页
单片机串口通信波特率自动识别.docx_第15页
第15页 / 共45页
单片机串口通信波特率自动识别.docx_第16页
第16页 / 共45页
单片机串口通信波特率自动识别.docx_第17页
第17页 / 共45页
单片机串口通信波特率自动识别.docx_第18页
第18页 / 共45页
单片机串口通信波特率自动识别.docx_第19页
第19页 / 共45页
单片机串口通信波特率自动识别.docx_第20页
第20页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机串口通信波特率自动识别.docx

《单片机串口通信波特率自动识别.docx》由会员分享,可在线阅读,更多相关《单片机串口通信波特率自动识别.docx(45页珍藏版)》请在冰点文库上搜索。

单片机串口通信波特率自动识别.docx

单片机串口通信波特率自动识别

毕业设计说明书

设计题目:

单片机串口通信波特率自动识别

学院计算机科学与信息工程学院

专业年级自动化2008级

学生姓名何泽宏学号**********

指导教师刘传文职称讲师

设计地点重庆工商大学

日期2012.02.27——2012.05.18

 

单片机串口通讯波特率的自动识别

重庆工商大学自动化2008级2班何泽宏

指导教师:

***

摘要:

本设计是基于串口通信,设计能够自动识别上位机波特率的系统。

要自动识别串口通信波特率,通常的实现方法是,上位机首先发出规定的字符或数据,系统收到该字符或数据后,下位机计算对方的波特率,以适应对方的波特率进行工作。

本系统正是利用这种方法,让上位机先发送一段字符,下位机使用软件的方法检测出一位数据发送时间,从而计算出上位机发送数据波特率。

关键词:

串行通信波特率自动识别发送检测

 

Abstact:

Thedesignisbasedonserialcommunication,designedtoautomaticallyidentifythebaudrateofthehostcomputersystem.Toautomaticallyidentifytheserialcommunicationbaudrate,theusualmethod,thehostcomputerbyfirstissuingacharacterordata,thesystemreceivesthecharacterordata,thenextbitmachine,theotherbaudratetoadapttoeachother'sbaudratetowork.Thesystemtookadvantageofthismethod,thehostcomputerfirstsendsacharacter,themachinesoftwaretodetectadatatransmissiontime,inordertoestimatethehostcomputertosenddatabaudrate.

Keywords:

serialcommunicationbaudrateautomaticallysenddetect

4.4编译环境24

第一章绪论

1.1课题研究背景

近年来,随着科学技术的发展,PC机以其优越的性价比和丰富的软件资源成为计算机应用的主流机种。

在工业控制中单片机得到广泛的应用,现代化集中管理需要对现场数据进行统计、分析、制表、打印、绘图、报警等。

同时,又要求对现场装置进行实时控制,完成各种规定操作,达到集中管理的目的。

由于单片机的计算能力有限,难以进行复杂的数据处理。

因此在功能比较复杂的控制系统中,通常以PC机为上位机,单片机为下位机,由单片机完成数据的采集及对装置的控制,而由上位机完成各种复杂的数据处理及对单片机的控制,二者结合,使得单片机的应用已不仅仅局限于传统意义上的自动监测或控制,而形成了向以网络为核心的分布式多点系统发展的趋势。

现代信息网络技术的一个突出特点,就是使工业控制系统中的所有设备连接成网,从而在一个核心软件管理下工作,形成一个有机的整体。

这种整体网络方式在现代工业控制系统具有传统独立控制系统所无法比拟的先进性,不仅能极大地提高工业设备的生产效率,还可以大大提高系统的安全性和可靠性。

随着工业技术的发展,单片机广泛应用在工程控制领域,用单片机可以构成形式多样的控制系统、数据采集系统。

单片机的控制系统中,一般都通过串口和上位机PC进行通信,这样不仅能够实现远程控制,而且能够利用PC机强大的数据处理功能以及友好的控制界面。

因此研究单片机与PC机串行通信具有重要的现实及工业意义。

而对于异步串行通信,只有在通信双方波特率相同时,才能实现数据的正确传输与接收,而一些系统总是希望能实现对各种波特率的兼容这就需要能够自动识别上位机波特率。

通常的实现方法是,要求上位机首先发出规定的字符或数据,系统收到该字符或数据后,下位机计算对方的波特率,以适应对方的波特率进行工作。

1.2串口通信基础

计算机与外界的信息交换称为通信。

通信的基本方式可分为并行通信和串行通信两种。

所谓并行通信是指数据的各位同时在多根数据线上发送或接收。

串行通信是数据的各位在同一根数据线上依次逐位发送或接收。

而串行通信按同步方式可分为异步通信和同步通信两种基本通信方式。

1.2.1同步通信(SynchronousCommunication)

同步通信是一种连续传送数据的通信方式,一次通信传送多个字符数据,称为一帧信息。

数据传输速率较高,通常可达56000bps或更高。

其缺点是要求发送时钟和接收时钟保持严格同步。

1.2.2异步通信(AsynchronousCommunication)

在异步通信中,数据通常是以字符或字节为单位组成数据帧进行传送的。

收、发端各有一套彼此独立,互不同步的通信机构,由于收发数据的帧格式相同,因此可以相互识别接收到的数据信息。

图1-1异步串行通信帧格式

1.起始位

在没有数据传送时,通信线上处于逻辑“1”状态。

当发送端要发送1个字符数据时,首先发送1个逻辑“0”信号,这个低电平便是帧格式的起始位。

其作用是向接收端表示发送端开始发送一帧数据。

接收端检测到这个低电平后,就准备接收数据信号。

2.数据位

在起始位之后,发送端发出(或接收端接收)的是数据位,数据的位数没有严格的限制,5~8位均可。

由低位到高位逐位传送。

3.奇偶校验位

数据位发送完(接收完)之后,可发送一位用来检验数据在传送过程中是否出错的奇偶校验位。

奇偶校验是收发双方预先约定好的有限差错检验方式之一。

有时也可不用奇偶校验。

4.停止位

字符帧格式的最后部分是停止位,逻辑“1”电平有效,它可占1/2位、1位或2位。

停止位表示传送一帧信息的结束,也为发送下一帧信息作好准备。

1.2.3串行通信波特率

波特率(BaudRate)是串行通信中一个重要概念,它是指传输数据的速率。

波特率的定义是每秒传输二进制数码的位数。

如:

波特率为1200bps是指每秒钟能传输1200位二进制数码。

波特率的倒数即为每位数据传输时间。

例如:

波特率为9600bps,每位的传输时间为:

………………

(1)

1.2.4串行通信制式

在串行通信中,数据是在两个站之间传送的。

按照数据传送方向,串行通信可分为三种制式。

1.单工制式(Simplex)

单工制式是指甲乙双方通信只能单向传送数据。

单工制式如图3所示。

图1-2串行通信单工制式

2.半双工制式

半双工制式是指通信双方都具有发送器和接收器,双方既可发送也可接收,但接收和发送不能同时进行,即发送时就不能接收,接收时就不能发送。

 

图1-3串行通信半双工制式

3.全双工制式

全双工制式是指通信双方均设有发送器和接收器,并且将信道划分为发送信道和接收信道,两端数据允许同时收发,因此通信效率比前两种高。

 

图1-4全双工通信制式

1.2.5串行通信校验

串行通信的目的不只是传送数据信息,更重要的是应确保准确无误地传送。

因此必须考虑在通信过程中对数据差错进行校验,因为差错校验是保证准确无误地通信的关键。

常用差错校验方法有奇偶校验、累加和校验以及循环冗余码校验等。

1.奇偶校验

奇偶校验的特点是按字符校验,即在发送每个字符数据之后都附加一位奇偶校验位(1或0),当设置为奇校验时,数据中1的个数与校验位1的个数之和应为奇数;反之则为偶校验。

收、发双方应具有一致的差错检验设置,当接收1帧字符时,对1的个数进行检验,若奇偶性(收、发双方)一致则说明传输正确。

奇偶校验只能检测到那种影响奇偶位数的错误,比较低级且速度慢,一般只用在异步通信中。

2.累加和校验

累加和校验是指发送方将所发送的数据块求和,并将“校验和”附加到数据块末尾。

接收方接收数据时也是先对数据块求和,将所得结果与发送方的“校验和”进行比较,若两者相同,表示传送正确,若不同则表示传送出了差错。

“校验和”的加法运算可用逻辑加,也可用算术加。

累加和校验的缺点是无法检验出字节或位序的错误。

3.循环冗余码校验

循环冗余码校验的基本原理是将一个数据块看成一个位数很长的二进制数,然后用一个特定的数去除它,将余数作校验码附在数据块之后一起发送。

接收端收到该数据块和校验码后,进行同样的运算来校验传送是否出错。

目前CRC已广泛用于数据存储和数据通信中,并在国际上形成规范,市面上已有不少现成的CRC软件算法。

1.3波特率自动识别研究现状

串行通信的数据是按位顺序传输的,而异步串行通信由于没有位定时时钟,因此各个数据位之间需要严格的定时,才能保证正确的通信。

也就是说,只有在通信双方波特率相同时,才能实现数据的正确传输与接收。

传统的波特率自动识别的方法主要有两种:

1.3.1标准波特率穷举法

标准波特率穷举法适用于主机侧的波特率必须在有限的几个固定数值之间变化,如300~19200之间的标准值;且从机侧的工作振荡频率已知且稳定。

从机启动通信程序后,逐个尝试以不同的波特率接收主机发出的特定字符,直到能正确接收为止,因此,该方法的运用有一定的局限性。

1.3.2码元宽度实时检测法

该方法要求主机按照约定发送某一数据,从机通过单片机的定时器测量RXD引脚上输人数据的码元宽度,而后计算出待测系统通信的波特率。

该方法目前应用比较广泛。

如某GMS模块在计时为了适应各种通信波特率,要求其通信的系统首先发送08H,之后发送指令,它就是依靠数据08H的码元宽度计算出对方波特率的.

1.3.3最大公约数法

传统的方法对待测系统发送的数据都有一定的限制或要求才能够实现波特率的识别,但有些时候是无法约束待测系统首先发送特定字符的。

这里,根据不同的应用需求,提出更为通用的波特率识别方法——最大公约数法。

该方法不对待测系统发送的数据进行特殊要求即可实现波特率识别,且保证了波特率识别的有效性和可靠性。

1.4设计任务及要求

根据串口通讯的原理,利用软件的办法,设计出能够自动识别串口通讯波特率的系统,给出完整的设计方案、注意事项,并利用单片机实验系统完成系统的基本演示。

需要串口通讯的原理及进行波特率判断的原理进行介绍,并说明设计的过程,给出系统的电路图以及与单片机的接口部分等设计说明。

要求能够给出所设计系统性能指标(即能够判断多大范围的波特率)。

需要以实际的结果验证设计系统的正确性及准确性。

即当上位机(可以使用PC机)的波特率变化时,单片机应能够自动识别出变化后的波特率。

需要对系统使用中易出现的问题进行说明。

分析自己所设计的系统需要作哪些方面的改进和完善,才可以更好地发挥作用。

在系统的程序软件设计说明中还应当描述出程序的编译环境配置,可执行代码的运行环境要求说明。

第二章系统方案设计

2.1系统功能指标

本设计主要完成能够自动识别串口通信波特率的系统,系统指标主要分为以下几点:

1.系统能够进行串口通信;

2.系统应有显示波特率的模块;

3.能够自动识别的波特率范围为300——9600bps;

2.2系统设计思路及方案论证

由设计任务可以确定,本系统主要分为通信模块、显示模块两部分。

其中,显示模块已有比较成熟的设计,而本设计通信部分最核心的又是波特率自动识别的算法,故在此着重论证波特率识别方法。

方案一:

查表:

首先在已知主机发送波特率的情况下,单片机根据在RXD端接收到的主机波特率检测字符0x01的电平变化,控制定时器T0的开启和关闭,进而获得计数Num。

这里,Num值为单片机在接收主机1位数据的时间内,定时器T0的计数值。

然后,串口选择工作于方式一,即一帧数据包括一位起始位,八位数据位和一位停止位。

UART总是先发送数据低位(LSB),后发送数据高位(MSB),我们总会看见数据的停止位。

则我们可以选择一个检测字符,检测字符0x01的数据格式如下图。

当RXD端没有数据时,接收到的是空闲位高电平,随后,在接收数据时首先收到起始位低电平,这样可在下降沿处启动定时器T0计数;随后又接收到检测字符的第一位数据高电平,并在上升沿处停止定时器T0,从而获取Num值。

故选择了检测字符为0x01。

图2-1波特率与计数值的对应关系

这是在实际应用中,单片机在未知主机波特率的情况下,将实际获得的Num值与图2中的Num的范围相比较,从而检测出主机的发送波特率。

主要应用于调试和测试环节,显示出所测试的中间变量值以及最终检测到

的主机波特率值。

同时,确定出波特率发生器T1在实现匹配时重新装载的计数初值。

图2-2检测字符0x01数据格式

方案二:

计算:

计算法的主要特点就是通过复杂的数学公式进行推导,找出定时器T0的计数值X16与波特率发生器T1的装载初值X8之间的数学关系。

在接收主机波特率检测字符的过程中,此方法与方法一雷同。

但要确定从机自动匹配时定时器T1装载的计数初值,计算法更为简便。

根据公式推导,可以得出从机T1装载初值为

……………………

(2)

这里,注意到N=8,分母为256,除以256,在程序中只须将分子右移8位,而这里分子恰好为定时器T0的计数值X16(指TH0和TL0),所以从机波特率发生器的装载初值X8只和X16的高字节TH0有关,因为外界干扰一般只影响TL0,对高字节的影响很小,大大提高了系统的抗干扰能力。

同时可见X8的确定与晶体振荡器的频率fosc无关,因而系统的通用性更强。

在程序中,需要用到一个移位运算和一个减法运算,可见其较为简便、易行。

方案三:

最大公约数法:

为了便于说明问题,设主机的波特率为BPS,位传输时间为t1bit,测试系统测得的波特率为BAUD,位传输时间为txbit。

以l位起始位、8位数据位、1位停止位、无奇偶校验位为例,通信数据格式如图l所示。

除了起始位始终为0,停止位始终为1外,8位数据位的电平高低是由传输的数据决定的,要测得待测系统的波特率,根据波特率的实际意义BPS=l/t1bit,只要检测出待测系统通信数据的位传输时间t1bit即可。

位传输时间t1bit对应的就是单位码元宽度时间,只要知道单位码元宽度时间,系统波特率就很容易计算出来了。

由于不能要求待测系统按照规定发出特定的数据或字符,因此这里使用码元宽度捕捉的方法来查找码元宽度时间,要将单片机挂入待测系统的通信线路,采用对待测系统TXD(或RXD)引脚的高、低电平脉冲持续时间不断采集的方式,来捕捉单位码元宽度时间t1bit,显然单片机直接采集到的单个高、低电平脉冲持续时间可能是nt1bit,其中1≤n≤9。

如何从采集到的nt1bit找出t1bit,成为波特率识别的关键。

经过对串行通信数据格式的特点进行分析,本文提出了码元宽度最大公约数法来从捕捉到的码元宽度时间中计算单位码元宽度时间,也就是位传输时间t1bit。

具体实现方法如下:

在待测系统正常工作后,将测试单片机挂入其通信线路;首先对正、负脉冲宽度都进行计时,分别采集n次,剔除正脉冲溢出的部分后,把所有不相等的有效脉冲宽度时间从小到大排序(△t<5μs就认为两个时间相等,这一点在后面将有说明),假设依次为t1,t2,t3,…,tm(1≤m≤9);由于采集到的时间一定是t1bit的整数倍,计算出t1,t2,t3,…,tm的最大公约数为txbit,那么txbit就可以作为系统的最小脉冲宽度来计算波特率。

这里计算得到的txbit可能等于t1bit,也可能不等于t1bit。

下面分类讨论其作为位传输时间t1bit来计算波特率的可靠性及依据。

第1种情况,txbit=t1bit:

待测系统通信过程中出现最窄正脉冲或最窄负脉冲,得到的txbit等于t1bit,那么使用txbit计算波特率是可靠的;待测系统通信过程中未出现最窄正脉冲或最窄负脉冲,但系统通信过程中出现的脉冲宽度的最大公约数为最窄脉冲宽度,如待测系统处出现了2t1bit、3t1bit脉冲时间或者待测系统出现了4t1bit,7t1bit、8t1bit脉冲时间,此时最大公约数txbit仍等于t1bit,这种情况下波特率是可以可靠识别的。

第2种情况,txbit≠t1bit,即txbit=N’t1bit(2≤N’≤9):

若系统通信过程中出现的脉冲宽度时间都是N’t1bit的整数倍,以N’=2为例,待测系统通信过程中可能只出现类似图2(a)所示的数据,求得的最大公约数txbit=2t1bit,BAUD=BPS/2,实际测得的波特率是被测系统波特率的1/2。

但我们注意到,测得的数据如图2(b)所示,依次为FFH、FEH、FDH、FCH、FBH、FAH、F9H、F8H,尽管测得的波特率并不是被测系统波特率,但是并不会导致信息丢失,所有的数据都可以正确还原,因此这种情况下使用最大公约数法计算波特率也是完全可靠的。

上面讲了那么多,其实简言之,也是要检测上位机发送的一位数据(低电平)宽度,然后求出波特率。

当然,单片机在采集低电平时,可能采集到2个、3个甚至更多连续低电平,这就需要使用软件处理来求最得小值。

假设求得的最小值为baud,则根据波特率定义,通信波特率BAUD为

………………(3)

为什么公式中要乘以10-6呢?

这是因为我们所求的baud是单位是us(即10-6s),故得到以上结果。

2.3系统方案确定

方案一操作简单易行,没有复杂的计算,但是软件中需要用到两个定时器,且上位机必须发送指定字符,实际运用时有一定限制;方案二计算较为复杂,能确定从机自动匹配时定时器T1装载的计数初值,关键是能准确确定上位机发送波特率大小,较方案一更具实用性,但同样需要发送指定字符。

方案三原理简单,计算也不复杂,能较准确识别上位机发送波特率,关键是不需要上位机发送指定字符,通用性较强,故选择方案三,但再次基础上加了一点小改动,就是只采集了上位机发送数据的低电平。

第三章硬件设计

由前面章节已经知道,要实现串口通信,则至少需要一个上位机、一个下位机,在此,上位机选择普通PC机,下位机则选择MCS-51系列单片机;另外需一片显示芯片,以满足系统系那是波特率的要求。

但是单片机中的数据信号电平都是TTL电平,这种电平采用正逻辑标准,即约定≥2.4V表示逻辑1,而≤0.5V表示逻辑0,这种信号只适用于通信距离很短的场合,若用于远距离传输必然会使信号衰减和畸变。

因此,在实现PC机与单片机之间通信或单片机与单片机之间远距离通信时,通常采用标准串行总线通信接口,比如RS-232C、RS-422、RS-423、RS-485等。

但由于RS-232C信号电平(EIA)与单片机信号电平(TTL)不一致,因此,必须进行信号电平转换。

实现这种电平转换的电路称为RS-232C接口电路。

一般有两种形式:

一种是采用运算放大器、晶体管、光电隔离器等器件组成的电路来实现;另一种是采用专门集成芯片(如MC1488、MC1489、MAX232等)来实现。

MAX232芯片是MAXIM公司生产的具有两路接收器和驱动器的IC芯片,其内部有一个电源电压变换器,可以将输入+5V的电压变换成RS-232C输出电平所需的+10V电压。

所以采用这种芯片来实现接口电路特别方便,只需单一的+5V电源即可。

3.1设计系统框图

 

图3-1单片机与PC机串口通信波特率自动识别系统框图

 

3.2芯片选择

3.2.1单片机选择

STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,是标准的MCS-51单片机,指令代码完全兼容传统8051单片机,且市场占有量大,容易购买,故设计选择此种单片机。

鉴于设计要求,现着重介绍其串行口:

STC89C52内部有一个可编程全双工串行通信接口。

该部件不仅能同时进行数据的发送和接收,也可作为一个同步移位寄存器使用。

下面将对其内部结构、工作方式以及波特率进行介绍。

图3-2AT89C51串行口结构框图

1.串行数据缓冲器SBUF:

SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器,以便能以全双工方式进行通信。

此外,在接收寄存器之前还有移位寄存器,从而构成了串行接收的双缓冲结构,这样可以避免在数据接收过程中出现帧重叠错误。

发送数据时,由于CPU是主动的,不会发生帧重叠错误,因此发送电路不需要双重缓冲结构。

逻辑上,SBUF只有一个,它既表示发送寄存器,又表示接收寄存器,具有同一个单元地址99H。

但在物理结构上,则有两个完全独立的SBUF,一个是发送缓冲寄存器SBUF,另一个是接收缓冲寄存器SBUF。

如果CPU写SBUF,数据就会被送入发送寄存器准备发送;如果CPU读SBUF,则读入的数据一定来自接收缓冲器。

即CPU对SBUF的读写,实际上是分别访问上述两个不同的寄存器。

2.串行控制寄存器SCON:

串行控制寄存器SCON用于设置串行口的工作方式、监视串行口的工作状态、控制发送与接收的状态等。

它是一个既可以字节寻址又可以位寻址的8位特殊功能寄存器。

其格式如图4所示,其中各位功能再次就不再鏊述。

图3-3串行口控制寄存器SCON

3.电源控制寄存器PCON:

PCON

D7

D6

D5

D4

D3

D2

D1

D0

位名称

SMOD

GF1

GF0

PD

IDL

表3-1电源控制寄存器PCON的格式

SMOD:

串行口波特率倍增位。

在工作方式1~工作方式3时,若SMOD=1,则串行口波特率增加一倍。

若SMOD=0,波特率不加倍。

系统复位时,SMOD=0。

STC89C52串行通信共有4种工作方式,它们分别是方式0、方式1、方式2和方式3,由串行控制寄存器SCON中的SM0SM1决定,如表4所示.

SM0、SM1

工作方式

功能描述

波特率

00

方式0

8位同步移位寄存器

Fosc/12

01

方式1

10位UART

可变,由定时器控制

10

方式2

11位UART

Fosc/64或fosc/32

11

方式3

11位UART

可变,由定时器控制

表3-2单片机串行口工作方式

各方式下波特率计算方法分别为:

方式0、2的波特率是固定的,而方式1、3的波特率是可变的,由定时器T1的溢出率来决定

方式0波特率=fosc/12………(4)

方式2波特率=(2SMOD/64)·fosc………(5)

方式1波特率=(2SMOD/32)·(T1溢出率)………(6)

方式3波特率=(2SMOD/32)·(T1溢出率)………(7)

其中,T1溢出率=fosc/{12×[256-(TH1)]}………(8)

T1方式2,TR1=1(以启动定时器)

由于本设计将需要串行口工作于工作方式1,故着重介绍一下方式一。

方式1是一帧10位的异步串行通信方式,包括1个起始位(0),8个数据位和一个停止位

(1),其帧格式如下:

起始位0

D0

D1

D2

D3

D4

D5

D6

D7

停止位1

表3-3方式1数据帧格式

数据发送:

当TI=0时,执行“MOVSBUF,A”指令后开始发送,由硬件自动加入起始位和停止位,构成一帧数据,然后由TXD端串行输出。

发送完后,TXD输出线维持在“1”状态下,并将SCON中

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2