微机原理与接口技术11.ppt

上传人:李医生 文档编号:5655671 上传时间:2020-07-20 格式:PPT 页数:66 大小:1.13MB
返回 下载 相关 举报
微机原理与接口技术11.ppt_第1页
第1页 / 共66页
微机原理与接口技术11.ppt_第2页
第2页 / 共66页
微机原理与接口技术11.ppt_第3页
第3页 / 共66页
微机原理与接口技术11.ppt_第4页
第4页 / 共66页
微机原理与接口技术11.ppt_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《微机原理与接口技术11.ppt》由会员分享,可在线阅读,更多相关《微机原理与接口技术11.ppt(66页珍藏版)》请在三一文库上搜索。

1、微机原理与接口技术第11章 串行接口技术,主编:周国运 机械工业出版社 2011.9,第11章 串行接口技术,本章内容 11.1 串行通信概述 11.2 串行接口芯片16550 11.3 串行接口应用举例,串行通信是微机中数据传送的一种重要方式,大大降低了远距离通信的成本,它是构成计算机网络的基础。 本章讲述串行通信的概念、串行通信基本方式、RS-232串行通信标准、串行接口芯片NS16550以及在微机中NS16550的实际应用。,11.1 串行通信概述,一、串行通信基本概念 二、串行通信基本方式 三、RS-232串行通信标准 四、其他串行通信标准,1、通信方式 计算机与外界的信息交换称为通信

2、。基本的通信方法有并行通信和串行通信两种。 (1)并行通信 单位信息(通常指一个字节)的各位数据同时传送的通信方法称为并行通信。 (2)串行通信 单位信息的各位数据被分时一位一位依次顺序传送的通信方式称为串行通信。,一、串行通信基本概念,11.1 串行通信概述,11.1 串行通信概述,2、数据传送方式 单工方式:一对传输线只允许单方向传送数据; 半双工方式:一对传输线允许向两个方向中的任一方向传送数据,但不能同时进行; 全双工方式:用两对传输线连接在发送器和接收器上,发送和接收能同时进行。,一、串行通信基本概念,11.1 串行通信概述,一、串行通信基本概念,接,收,器,发,送,器,接,收,器,

3、发送器,发送器,接,收,器,数据流,接,收,器,发送器,发送器,数据流,接,收,器,(,a,),单工方式,(,b,),半双工方式,(,c,),全双工方式,11.1 串行通信概述,一、串行通信基本概念,3、波特率和收/发时钟,(1)波特率 指在串行通信中,每秒传送的二进制位数(bps)。 (2)收发时钟 收发时钟的快慢直接影响通信设备发送/接收字符数据的速度。 收发时钟频率与波特率的关系: 时钟频率=Factor收发波特率 其中Factor称为波特率因子,取1,16,64,11.1 串行通信概述,一、串行通信基本概念,4、信号调制解调 调制就是把数字信号变换成模拟信号表示的过程,而解调则是把模拟

4、信号变换成数字信号表示的过程。,计 算 机,Modem,调制 解调,模拟信号,数字信号,数字信号,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,两线电话线,Modem,调制 解调,计 算 机,11.1 串行通信概述,一、串行通信基本概念,最基本的调制与解调的方法有以下几种: (1)调幅(AM)(2)调频(FM)(3)调相(PM),11.1 串行通信概述,一、串行通信基本概念,5、串行通信的错误校验 ()奇偶校验 在传送数据时,数据位尾随的1位为奇偶校验位(1或0)。奇校验时,数据中“1”的个数与校验位“1”的个数之和应为奇数;偶校验时,数据中“

5、1”的个数与校验位“1”的个数之和应为偶数。 ()和校验 和校验是发送方将所发数据块求和(或各字节异或),产生一个字节的校验字符(校验和)附加到数据块末尾。 ()循环冗余校验 这种校验是通过某种数学运算实现有效信息与校验位之间的循环校验。,11.1 串行通信概述,二、串行通信基本方式,1、异步通信 异步通信中,传送的数据可以是一个字符代码或一个字节数据,数据以帧的形式一帧一帧传送。,0,/,1,0,/,1,0,/,1,0,/,1,0,/,1,1,0,0,/,1,0,/,1,0,/,1,0,/,1,0,/,1,0,/,1,1,0,0,/,1,停,止,位,起,始,位,8,位数据,校,验,位,停,止

6、,位,起,始,位,0,/,1,数据,第,n,个字符,第,n,+,1,个字符,11.1 串行通信概述,二、串行通信基本方式,2、同步通信 在同步通信中,每一数据块发送开始时,先发送一个或两个同步字符,使发送与接收取得同步,然后再顺序发送数据。数据块的各个字符间取消起始位和停止位,所以通信速度得以提高 。,数据,数据,同步字符,1,同步字符2,数据流,11.1 串行通信概述,三、RS-232串行通信标准,RS-232C标准(协议)是美国EIA与BELL等公司一起开发的1969年公布的通信协议。 最初是为远程通信连接数据终端设备DTE与数据通信设备DCE而制定的。但目前已广泛用于计算机与终端或外设之

7、间的近端连接。 对串行通信接口的有关问题,如信号线功能、电气特性都作了明确规定。 通信设备厂商都生产与RS-232C制式兼容的通信设备,它作为一种标准,已在目前微机串行通信接口中广泛采用。,11.1 串行通信概述,三、RS-232串行通信标准,1、电气特性 在TxD和RxD数据上采用负逻辑: 逻辑1(MARK):用电平-3-15V表示。 逻辑0(SPACE):用电平+3+15V表示。 在RTS、CTS、DSR、DTR和DCD等控制线上: 信号有效(接通,ON状态,正电压):用电平+3+15V表示。 信号无效(断开,OFF状态,负电压):用电平-3-15V表示。,11.1 串行通信概述,三、RS

8、-232串行通信标准,2、机械特性 RS-232C连接器的机械形状有DB-25,DB-15和DB-9三种类型,其引脚的定义各不相同。,11.1 串行通信概述,三、RS-232串行通信标准,3、功能特性,11.1 串行通信概述,三、RS-232串行通信标准,4、通信线路的连接,(1)采用Modem和专用电话线通信时信号线的连接,11.1 串行通信概述,三、RS-232串行通信标准,4、通信线路的连接,(2)采用Modem和电话网通信时信号线的连接,11.1 串行通信概述,三、RS-232串行通信标准,4、通信线路的连接,(3)三线制通信连接 (4)零Modem方式的标准信号连接,计,算,机,或,

9、终,端,2,3,4,5,7,6,20,计,算,机,或,终,端,2,3,4,5,7,6,20,2,22,20,8,7,6,5,4,3,TxD,RxD,RTS,CTS,DSR,SG,DCD,DTR,RI,2,22,20,8,7,6,5,4,3,TxD,RxD,RTS,CTS,DSR,SG,DCD,DTR,RI,DTE,DTE,11.1 串行通信概述,四、其他串行通信标准,1USB标准接口,传统的接口电路每增加一种设备,就需要为它准备一种接口或插座,还要为它们准备各自的驱动程序。这些接口、插座、驱动程序各不相同,给使用和维护带来了困难。 由Intel等公司开发的USB(通用串行总线)采用通用的连接器

10、,采用热插拔技术以及相应的软件,使得外设的连接和使用大大地简化,受到了普遍欢迎,目前已经成为流行的外设接口。,11.1 串行通信概述,四、其他串行通信标准,USB接口的主要性能特点: 设备连接简便,具有即插即用和热插拔的能力。 具有适合传送多媒体数据的传输方式。 和很多传统接口一样,可由电缆给接入的设备提供5V电源。 数据传输速率比普通标准串行口的要高得多。 两台设备之间的最大传输距离一般为45m。 最多可挂接127台USB设备。,11.1 串行通信概述,四、其他串行通信标准,2IEEE1394标准接口,IEEE1394是1995年批准和发布的一种最新的高性能串行总线接口标准。 1998年,在

11、Microsoft、Intel和Compaq等公司制定的个人计算机规格PC98中,将具备IEEE1394接口作为一项重要内容,目前正在PC机中逐步推广普及。 IEEE1394与USB有很多相似之处,一开始就是针对高速I/O设备而提出的,其I/O速度是USB最高速度的8倍。,11.1 串行通信概述,四、其他串行通信标准,IEEE1394的主要性能特点: 1)数据传输速率高 1394的数据传输率分为100Mbps、200Mbps和400Mbps三档,远远高于EIDE和SCSI的最高数据传输率。 2)数据传送实时性强 这对于多媒体数据传送特别重要,实时性可保证图像和声音不会出现失真。 3)结构小巧,

12、连接方便 1394使用6芯电缆,直径约为6mm,插座也小。,11.2 串行接口芯片16550,一、16550的内部结构 二、16550的引脚信号 三、16550的内部寄存器及初始化编程,11.2 串行接口芯片16550,一、16550的内部结构,包括: 数据总线缓冲器 读/写控制逻辑 波特率发生器 收发模块 线路模块 Modem控制模块 中断模块 除法器模块,读,/,写,控制,逻辑,A,0,A,1,A,2,CS,0,CS,1,CS,2,ADS,MR,RD,RD,WR,WR,DDIS,TxRDY,XIN,XOUT,RxRDY,数据总线,缓冲器,D,0,D,7,内,部,数,据,总,线,接收缓冲,寄

13、存器,接收器,FIFO,接收移位,寄存器,线路控制,寄存器,除数锁存器,低字节,除数锁存器,高字节,线路状态,寄存器,发送保持,寄存器,接收定时,控制,波特率,发生器,发送定时,控制,发送器,FIFO,发送移位,寄存器,SIN,RCLK,BAUDOUT,SOUT,S,E,L,E,C,T,S,E,L,E,C,T,发送保持,寄存器,Moden,控制寄存器,Moden,状态寄存器,中断标识,寄存器,FIFO,控制寄存器,发送移位,寄存器,Moden,控制逻辑,中断允许,寄存器,SOUT,RTS,CTS,DTR,DSR,DCD,RI,OUT,1,OUT,2,INTR,中断允许,寄存器,E,L,E,C,

14、T,读,/,写,控制,逻辑,A,0,A,1,A,2,CS,0,CS,1,CS,2,ADS,MR,RD,RD,WR,WR,DDIS,TxRDY,XIN,XOUT,RxRDY,内,部,数,据,总,线,11.2 串行接口芯片16550,二、16550的引脚信号,D7D0:双向数据总线 CS2、CS1、CS0:片选输入信号 A2A0:端口选择信号 ADS:地址选通输入信号 TxRDY:发送器准备好信号 RxRDY:接收器准备好信号 WR/WR写控制信号 RD/RD:读控制信号 DDIS:驱动器禁止信号 MR:主复位信号 INTR:中断请求信号 XIN、XOUT:基准时钟信号输入、输出引脚,11.2 串

15、行接口芯片16550,二、16550的引脚信号,SOUT:串行数据输出引脚 SIN:串行数据输入引脚 BANDOUT:波特率发生器输出信号 RCLK:接收时钟信号 DTR:数据终端就绪 DSR:数据设备就绪 RTS:请求发送 CTS:允许发送 DCD:接收线路信号 RI:振铃指示 OUT1、OUT2:输出信号,由用户编程定义,三、16550的内部寄存器及初始化编程,11.2 串行接口芯片16550,三、16550的内部寄存器及初始化编程,(1)数据接收寄存器,11.2 串行接口芯片16550,三、16550的内部寄存器及初始化编程,(2)数据发送寄存器,11.2 串行接口芯片16550,三、1

16、6550的内部寄存器及初始化编程,(3)FIFO控制寄存器,RT1 RT0表示接收器触发器的值 00:1字节 01:4字节 10:8字节 11:14字节,DMA位为1时,选择FIFO方式;为0时,选择16450UART方式。,XMIT置1时,发送器复位。,RECV置1时,接收器复位。,EN置1,允许FIFO模式。,11.2 串行接口芯片16550,三、16550的内部寄存器及初始化编程,(4)通信线路控制寄存器,寄存器选择 0 正常值 1 除数寄存器,中止字符 0 无作用 1 发送中止字符,校验位设置 0 无校验位 001 设置奇校验 011 设置偶校验 101 校验位为1 111 校验位为0

17、,停止位个数 0 1位 1 1.5位(数据位为5位时) 1 2位(数据位为68位时),数据位个数 00 5位 01 6位 10 7位 11 8位,11.2 串行接口芯片16550,三、16550的内部寄存器及初始化编程,(5)通信线路状态寄存器,为1表示接收FIFO错误,为1时表示发送移位寄存器空,当数据由发送保持寄存器移入发送移位寄存器时,该位为0,为1表示发送缓冲寄存器空,当CPU将字符写入发送保持寄存器后,该位为0,为1表示接收到终止符,为1表示帧格式错,为1表示奇偶错,为1表示溢出错,为1表示接收数据就绪,当CPU读走数据后,该位为0,11.2 串行接口芯片16550,三、16550的

18、内部寄存器及初始化编程,(6) Modem控制寄存器,自测试状态: 4个控制输入信号在内部与4个控制输出信号相连 发送的串行数据在内部被接收 检测16550发送和接收功能,不必外连线,为1表示DTR准备好,为1表示RTS有效,为1使OUT1输出为低,为1使OUT2输出为低,为1表示16550工作于自测试状态,即自发自收状态,为0表示工作于正常工作状态,11.2 串行接口芯片16550,三、16550的内部寄存器及初始化编程,(7) Modem状态寄存器,1)高4位DCD、RI、DSR和CTS记录外部Modem的四个输入信号状态,功能与相应引脚信号功能相同,而极性相反。 2)低4位记录高4位相应

19、状态的改变,即当高4位中某一位的状态发生改变时,则低4位相应位置1。这些状态位的改变,除了允许CPU执行输入指令进行查询外,也可以引起中断。,11.2 串行接口芯片16550,三、16550的内部寄存器及初始化编程,(8)中断允许寄存器,D3D0各位为1分别表示允许Moden输入状态改变中断、允许接收出错中断、允许发送缓冲器空中断、允许接收缓冲器满中断。 需要注意的是:中断允许寄存器的相应位为“1”,只允许中断源产生一个高电平有效的中断请求信号INTR。,11.2 串行接口芯片16550,三、16550的内部寄存器及初始化编程,(9)中断识别寄存器,D0反映是否有中断请求 D3D2D1位表示正

20、在请求的中断,对应关系如下: 000:Moden输入状态改变 001:发送寄存器空 010:接收缓冲器满 110:FIFO接收字符超时 011:接收数据出错,11.2 串行接口芯片16550,三、16550的内部寄存器及初始化编程,16550初始化编程,将80H写入通信线路控制寄存器,使最高位D7(DLAB)1,建立访问除数寄存器的标志。 写除数寄存器,设定波特率分频系数。 写通信线路控制寄存器, 使最高位D7(DLAB)0,设置数据格式。 设置FIFO控制寄存器。 设置中断允许寄存器。 设置Modem控制寄存器。,11.2 串行接口芯片16550,三、16550的内部寄存器及初始化编程,MO

21、V DX, 3FBH;线路控制寄存器端口地址 MOV AL, 80H;AL=10000000B, 使最高位DLAB=1 OUT DX, AL;写线路控制寄存器 MOV DX, 3F8H;除数寄存器低字节端口地址 MOV AX, 3CH;分频系数 OUT DX, AL;写除数寄存器低字节 INC DX;除数寄存器高字节端口地址 MOV AL, AH OUT DX, AL;写除数寄存器高字节,写线路控制寄存器和除数寄存器,11.2 串行接口芯片16550,三、16550的内部寄存器及初始化编程,写线路控制寄存器及FIFO控制寄存器,MOV DX, 3FBH;线路控制寄存器端口地址 MOV AL,

22、0BH;AL=00001011, 数长8位, 1位停止位, 奇校验 OUT DX, AL;写线路控制寄存器 MOV DX,3FAH;FIFO控制寄存器地址送DX MOV AL,47H ;允许FIFO并清除,设FIFO中断触发值为4B OUT DX,AL;写FIFO控制寄存器,11.2 串行接口芯片16550,三、16550的内部寄存器及初始化编程,写Modem控制寄存器及中断允许寄存器,MOV DX, 3FCH;Modem控制寄存器端口地址 MOV AL, 03H;使DTR =0和RTS =0, ;数据终端就绪, 请求发送 OUT DX, AL;写Modem控制寄存器 MOV DX, 3F9H

23、;中断允许寄存器端口地址 MOV AL, 00H;禁止所有中断 OUT DX, AL;写中断允许寄存器,11.3 串行接口应用举例,一、BIOS通信功能介绍 二、 双微机串行通信 三、Windows下微机串口应用,11.3 串行接口应用举例,一、 BIOS通信功能介绍,(1)串行口初始化 :INT 14H 0号功能 入口参数:AH0,串行口初始化; AL初始化参数,000:110bps 001:150 bps 010:300 bps 011:600 bps 100:1200 bps 101:2400 bps 110:4800 bps 111:9600 bps,x0:无校验 01:奇校验 11:

24、偶校验,为1时2位停止位 为0时1位停止位,为11时8位数据为10时7位数据,出口参数:AH通信线路状态寄存器内容。 ALModem状态寄存器内容。,11.3 串行接口应用举例,一、 BIOS通信功能介绍,(2)发送一帧数据 :INT 14H 1号功能 入口参数:AH1,发送数据。 AL待发送的数据。 DX0,使用主串行口; DX1,使用辅助串行口。 出口参数:AH的D71,表示发送失败; D70,表示发送成功。,11.3 串行接口应用举例,一、 BIOS通信功能介绍,(3)接收一帧数据 :INT 14H 2号功能 入口参数:AH2,接收数据。 DX0,使用主串行口; DX1,使用辅助串行口。

25、 出口参数:AH的D71,表示接收失败; D70,表示接收成功。 AL=接收的字符。,11.3 串行接口应用举例,一、 BIOS通信功能介绍,(4)测试通信线路状态 :INT 14 H 3号功能 入口参数:AH3,测试通信线路状态。 DX0,使用主串行口; DX1,使用辅助串行口。 出口参数:AH通信线路状态寄存器内容。 ALModem状态寄存器内容。 AX寄存器返回值的定义见下表。,11.3 串行接口应用举例,一、 BIOS通信功能介绍,11.3 串行接口应用举例,二、双微机串行通信,例11.1 在甲乙两台微机之间使用串口1进行近距离通信。采用异步方式,字符长度8位,1位停止位,偶校验,通信

26、波特率为9600bps。双机同时运行通信程序,一方输入的字符可在另一方屏幕上显示。当按下“Esc”键时,程序结束运行。 解:由于两台微机是近距离通信,因此不需要Modem,可直接使用串口线连接。本例采用对端口的直接操作。 程序代码如下:,11.3 串行接口应用举例,CODESEGMENT ASSUMECS:CODE START:MOVAL,80H MOVDX,3FBH OUTDX,AL;设置控制寄存器, ;选择除数寄存器 MOVAX,120 MOVDX,3F8H OUTDX,AL INCDX MOVAL,AH OUTDX,AL;设置除数寄存器, ;波特率为9600bps,11.3 串行接口应用

27、举例,MOV AL,0BH MOV DX,3FBH OUT DX,AL;置16550工作方式,奇校验, ;8位数据,1个停止位 LOOP1:MOV DX,3FDH IN AL,DX;循环读状态寄存器 TEST AL,1 JNZ RECV;接收准备好,转接收 TEST AL,20H JNZ TRANS;发送准备好,转发送 JMP LOOP1;循环,11.3 串行接口应用举例,TRANS:MOV AH,1;发送程序段 INT 16H;BIOS功能调用, ;键盘缓冲区空ZF=1 JZ LOOP1;无键按下,循环下一次 MOV AH,0 INT 16H;读取按键ASCII码 CMP AL,27 JZ

28、EXIT;是ESC键,程序退出 MOV DX,3F8H OUT DX,AL;发送按键ASCII码 JMP LOOP1,11.3 串行接口应用举例,RECV:TEST AL,1EH JNZ DISPERR;接收错误,转出错处理 MOV DX,3F8H IN AL,DX;读取接收字符 CMP AL,13 JNZ DISPNOMAL;不是回车,转普通显示 MOV DL,10 CALL DISP;显示换行 MOV DL,13 CALL DISP;显示回车 JMP LOOP1,11.3 串行接口应用举例,DISPERR: MOV DL,? CALL DISP;接收出错,显示?号 JMP LOOP1 DI

29、SPNOMAL: MOV DL,AL CALL DISP;显示接收到的字符 JMP LOOP1 DISP:MOV AH,2 INT 21H;DOS功能调用,将DL中的字符 ;输出到屏幕 RET EXIT:MOV AH,4CH INT 21H;DOS功能调用,返回系统 CODEENDS END START,11.3 串行接口应用举例,三、Windows下串行口编程应用,1SerialPort组件的属性和方法简介 在.NET Framework 2.0中提供了SerialPort类,该类主要实现串口数据通信等。下面主要介绍该类在后面实例中用到的部分属性和方法。 PortName:属性,获取或设置串

30、行口,如COM1、COM2等。 BaudRate:属性,获取或设置串行波特率,如常用的波特率9600、19200、115200等。 Parity:属性,获取或设置奇偶校验检查协议,如无校验、奇校验、偶校验等。,11.3 串行接口应用举例, StopBits:属性,获取或设置每个字节的标准停止位数,1位、1.5位、2位等。 Open:方法,打开一个新的串行端口连接。 Close:方法,关闭端口连接,设置IsOpen 属性为 false,并释放内部Stream对象。 WriteLine:方法,将字符串写入串行端口输出缓冲区。 ReadLine:方法,读取输入缓冲区中的字符串 DataReceive

31、d:事件,该事件处理SerialPort对象的数据接收事件。 其他属性和方法可以参阅.NET Framework 2.0中SerialPort类。,11.3 串行接口应用举例,2串口应用编程 下面介绍在Windows 下使用VS2005版Visual C#,利用SerialPort组件编写串行口传送字符串程序的方法。,(1)创建项目 启动VS2005,新建Visual C#类型项目。 (2)界面设计 串行口通信界面如右图。,11.3 串行接口应用举例,(3)程序设计 下面是需要编写的各种事件处理代码。 1)窗体创建时的串口初始化程序 private void Form1_Load(object

32、 sender, EventArgs e) comboBox1.SelectedIndex = 0;/选择串口 comboBox2.SelectedIndex = 4;/选择波特率 comboBox3.SelectedIndex = 0; /选择校验方式 comboBox4.SelectedIndex = 0; /选择停止位数 serialPort1.Open();/打开串口 ,11.3 串行接口应用举例,2)通过comboBox1选择串口程序 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) ser

33、ialPort1.PortName = comboBox1.Text; 3)通过comboBox2选择波特率程序 private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text); ,11.3 串行接口应用举例,4)通过comboBox3选择校验方式程序 private void comboBox3_SelectedIndexChanged (object sender, EventArgs e) seria

34、lPort1.Parity = (Parity)comboBox3.SelectedIndex; 5)通过comboBox4选择停止位数程序 private void comboBox4_SelectedIndexChanged (object sender, EventArgs e) serialPort1.StopBits = (StopBits)comboBox4.SelectedIndex + 1; ,11.3 串行接口应用举例,6)发送按钮按下时的程序 private void button1_Click(object sender, EventArgs e) serialPort1

35、.WriteLine(textBox1.Text); /用写串口方法发送textBox1中的字符串 7)窗体关闭程序 private void Form1_FormClosing(object sender, FormClosingEventArgs e) serialPort1.Close();/关闭串行口 ,11.3 串行接口应用举例,8)接收数据程序 在serialPort1的“事件”标签页双击“DataReceived”项,自动生成以下事件处理框架,添加读数据及显示代码。 private void serialPort1_DataReceived(object sender, Syst

36、em.IO.Ports.SerialDataReceivedEventArgs e) richTextBox1.AppendText(serialPort1.ReadLine()+“n”); ,本章小结 本章首先介绍了串行通信的有关概念、RS-232C标准、USB和1394串行接口的性能特点等。 主要讲述了可编程接口芯片NS16550的内部结构原理、引脚信号、编程结构。 用汇编语言和C#高级语言列举了16550芯片及微机串行口应用编程。 16550芯片是一全双工串行接口芯片,可工作于同步方式、也可工作于异步方式,具有接收/发送双缓冲功能、奇偶校验功能、出错检测等功能。 本章重点:(1)串行通信的概念;(2)可编程接口芯片16550及应用;(3) 16550芯片及微机串行口的应用编程。,

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1