单片机期末复习资料完全版.docx

上传人:b****2 文档编号:1015038 上传时间:2023-04-30 格式:DOCX 页数:36 大小:345.27KB
下载 相关 举报
单片机期末复习资料完全版.docx_第1页
第1页 / 共36页
单片机期末复习资料完全版.docx_第2页
第2页 / 共36页
单片机期末复习资料完全版.docx_第3页
第3页 / 共36页
单片机期末复习资料完全版.docx_第4页
第4页 / 共36页
单片机期末复习资料完全版.docx_第5页
第5页 / 共36页
单片机期末复习资料完全版.docx_第6页
第6页 / 共36页
单片机期末复习资料完全版.docx_第7页
第7页 / 共36页
单片机期末复习资料完全版.docx_第8页
第8页 / 共36页
单片机期末复习资料完全版.docx_第9页
第9页 / 共36页
单片机期末复习资料完全版.docx_第10页
第10页 / 共36页
单片机期末复习资料完全版.docx_第11页
第11页 / 共36页
单片机期末复习资料完全版.docx_第12页
第12页 / 共36页
单片机期末复习资料完全版.docx_第13页
第13页 / 共36页
单片机期末复习资料完全版.docx_第14页
第14页 / 共36页
单片机期末复习资料完全版.docx_第15页
第15页 / 共36页
单片机期末复习资料完全版.docx_第16页
第16页 / 共36页
单片机期末复习资料完全版.docx_第17页
第17页 / 共36页
单片机期末复习资料完全版.docx_第18页
第18页 / 共36页
单片机期末复习资料完全版.docx_第19页
第19页 / 共36页
单片机期末复习资料完全版.docx_第20页
第20页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机期末复习资料完全版.docx

《单片机期末复习资料完全版.docx》由会员分享,可在线阅读,更多相关《单片机期末复习资料完全版.docx(36页珍藏版)》请在冰点文库上搜索。

单片机期末复习资料完全版.docx

单片机期末复习资料完全版

◆主要复习知识点:

第一章微机计算机系统的基本知识

1.单片机就是在一片硅片上集成了中央处理器、随机存储器、只读存储器、中断系统、定时/计数器和多种I/O口的微型计算机系统,该系统不带外部设备。

从组成和功能上看,它已经具备了计算机系统的基本属性,所以也可以称其为单片微型计算机,简称单片机。

2.微型处理器是单片机的核心。

它主要由三部分组成:

寄存器阵列、运算器和控制器、

3.程序计数器PC,专门用于存放现行指令的16位地址。

CPU就是根据PC中的地址到ROM中读取程序指令。

每当取出现行指令一个字节后,PC就自动加1,PC+1→PC,当遇到转移指令或子程序时,PC内容会被指定的地址取代,实现程序转移。

PC用于存放CPU下一条要执行的指令地址,是一个16位的专用寄存器。

(PC的功能与作用)

4.运算器用来完成算术运算和逻辑运算操作,是处理信息的主要部件。

运算器主要由累加器A、状态寄存器PSW、算术运算单元ALU组成。

累加器A,用来存放参与算术运算和逻辑运算的一个操作数和运算结果。

状态字寄存器,用来保存ALU操作运算的条件标志,如进位标志、奇偶标志等。

算术运算单元ALU,由加法器和其他逻辑电路组成,其基本功能是进行加法和移位运算,由此实现其他各种算术和逻辑运算。

5.控制器是分析和执行指令的部件,控制器只要由程序计数器PC、指令寄存器和指令译码器组成。

6.总线是用于传送信息的公共途径。

总线可以分为数据总线、地址总线、控制总线。

7.数据总线DB:

数据线D0~D7共8位,由P0提供,分时输送低8位地址(通过地址锁存器锁存)和8位数据信息。

数据总线是双向的,可以从CPU输出,也可以从外部输入到CPU。

8.地址总线AB:

地址线A0~A15共16位,P2口提供高8位地址A8~A15,P0口经地址锁存器提供低8位地址A0~A7。

片外存储器可寻址范围达到64KB(即65536字节)。

9.控制总线CB:

控制总线由P3口的第二功能、和3根独立的控制线ALE、

组成。

10.存储器是用来存储数据和程序的部件。

按其功能来分,存储器可以分为随机存储器(RAM)和只读存储器(ROM)两大类。

可以随机写入读出,读写速度快,读写方便。

缺点是电源断电后,被存储的信息会丢失。

RAM主要用于存放各种数据。

一般用来存放固定的数据和程序。

其特点是信息写入后,能长期保存,不会因断电而丢失。

所谓“只读”指不能写入。

13.(基本了解)ROM的5种不同形式:

①MaskROM(淹膜ROM)②OTPROM③EPROM④E²PROM⑤FlashROM

14.单片机程序设计语言可分为三类:

机器语言、汇编语言和高级语言

①机器语言:

机器语言是计算机可以识别和直接执行的语言,它由一组二进制代码组成,不同的微处理器机器语言也不同。

②汇编语言:

用助记符替代机器语言中的操作码,用十六进制数代替二进制数。

计算执行时,必须将汇编语言翻译成机器语言。

汇编语言和机器语言一样,微处理器不同,汇编语言也不同,即不同的微处理器采用不同的汇编语言。

■思考与练习:

什么是单片机

答:

单片机就是在一片硅片上集成了中央处理器、随机存储器、只读存储器、中断系统、定时/计数器和多种I/O口的微型计算机系统,该系统不带外部设备。

从组成和功能上看,它已经具备了计算机系统的基本属性,所以也可以称其为单片微型计算机,简称单片机。

单片机的基本组成有哪些

答:

单片机由中央处理器、随机存储器、只读存储器、中断系统、定时/计数器和多种I/O口组成。

第二章单片机的硬件结构(重点复习)

15.(简答题)80C51单片机有4个8位的双向并行输入/输出(I/O)端口,称为P0口、P1口、P2口和P3口。

①P0口:

P0口是一个双功能的8位并行I/O口,可用作输入/输出端口,又可作地址/数据总线分时传输时低8位地址和8位数据。

②P1口:

P1口是单一功能的并行I/O口,只用作通用的数据输入/输出口。

③P2口:

P2口是一个双功能的8位并行I/O,可用作通用的输入/输出口,又可用作高8位地址总线。

④P3口:

P3口是一个双功能的8位并行I/O口,它的第一功能是通用输入/输出口,作第二功能用时,各引脚定义如下:

⑴:

RXD串行口输入;⑵:

TXD串行口输出;⑶:

外部中断0输入;

⑷:

外部中断1输入;⑸:

T0定时/计数器0外部计数脉冲输入;

⑹:

T1定时/计数器1外部计数脉冲输入;⑺:

片外数据存储器写选通讯号输出;

⑻:

片外数据存储器读选通讯号输出。

16.基本时序单位

单片机的时序单位有:

◆振荡周期:

晶振的振荡周期,又称时钟周期,为最小的时序单位。

◆状态周期:

振荡频率经单片机内的二分频器分频后提供给片内CPU的时钟周期。

因此,一个状态周期包含2个振荡周期。

◆机器周期:

1个机器周期由6个状态周期即12个振荡周期组成。

是计算机执行一种基本操作(如取指令,读存储器,写存储器等)的时间单位。

◆指令周期:

执行一条指令所需的时间。

一个指令周期由1~4个机器周期组成,依据指令不同而不同。

4种时序单位中,振荡周期和机器周期是单片机内计算其他时间值(例如,波特率、定时器的定时时间等)的基本时序单位。

例:

单片机外接晶振频率fosc=12MHZ时的各种时序单位:

◆振荡周期=1/fosc=1/12MHZ=;

◆状态周期=2/fosc=2/12MHZ=;

◆机器周期=12/fosc=12/12MHZ=1us;

◆指令周期=(1~4)机器周期=1~4us。

17.MCS-51的存储器结构与常见的微型计算机的配置方法不同,采用哈佛结构它将程序存储器和数据存储器分开,各有自己的寻址方式、控制信号和功能。

程序存储器用来存放程序、始终要保留的表格、常数。

数据存储器存放程序运行中所需要的数据和结果(常数和变量)。

18.从物理空间(实际结构)看,MCS-51有四个存储器地址空间:

片内数据存储器、片外数据存储器、片内程序存储器、片外程序存储器

19.从逻辑上(使用角度)看,MCS-51有三个存储器空间:

片内、片外统一编址的程序存储器,片外数据存储器,片内数据存储器

20.程序存储器中的几个特殊地址的使用:

地址用途

0000H复位操作后的程序入口

0003H外部中断0服务程序入口

000BH定时器0中断服务程序入口

0013H外部中断1服务程序入口

001BH定时器1中断服务程序入口

0023H串行口中断服务程序入口

21.外部数据存储器作用:

用于存放随机读写的数据。

◆外部数据存储器包括两部分空间:

①外部RAM②扩展的I/O口地址

◆内部数据存储器(单元数少,但最复杂)特殊功能寄存器空间,离散分布,作数据缓冲器、标志位等

22.程序存储器与外部数据存储器的比较

23.◆相同:

地址线A15~A0

◆不同:

访问的指令不同,读写信号不同。

访问程序寄存器的指令为MOVC指令,访问外部数据存储器的指令为MOVX指令;程序寄存器:

只读,PSEN作为外部ROM读信号;外部数据存储器:

可读写,RD作为读信号,WR作为写信号。

23.工作寄存器区的选择

RS1:

程序状态寄存器PSW的D4位;RS0:

程序状态寄存器PSW的D3位;

RS1RS0

寄存器区

R0~R7所占单元的地址

00

0区

00H~07H

01

1区

08H~0FH

10

2区

10H~17H

11

3区

18H~1FH

复位时,自动选中0区。

一旦选中其中一个区,其它三区只能作为普通RAM单元使用,而不能作为工作寄存器使用。

设置多个工作寄存器区可以方便保护现场。

24.字节地址与位地址在使用上如何区别

例:

MOVC,20H

MOVA,20H

位操作指令MOVC,20H位地址只有1bit(小圆区域)

字节操作指令MOVA,20H字节地址共8bit(大椭圆区域)

25.位地址空间组成及位地址表示法

⑴内部数据存储器的20H~2FH共16个单元可按位寻址,128位;

例1:

位地址1EH=23H.6即字节单元23H的D6位

⑵专用寄存器地址能被8整除的可按位寻址。

例2:

位地址D4H=D0H.4=PSW.4=RS1

26.特殊功能寄存器的地址分配(名称必须记住)

27.①累加器ACC:

累加器为8位的寄存器,是程序中使用最频繁的寄存器,是用于存放中间结果和数据传送的渠道。

②程序状态字寄存器PSW:

PSW也称为标志寄存器

⑴CY:

进/借位标志。

CY=1,有进/借位;CY=0,无进/借位。

⑵AC:

辅助进位标志,反映高半字节与低半字节之间的进/借位。

AC=1有进/借位;AC=0无进/借位。

⑶F0:

用户标志位

⑷RS1,RS0:

工作寄存器的控制位

⑸OV:

溢出标志位。

有溢出OV=1,无溢出OV=0。

⑹P:

奇偶标志位。

运算结果有奇数个“1”,P=1;偶数个“1”,P=0。

⑺D1:

无效位,一般不用。

③数据指针DPTR:

数据指针DPTR是一个16位的专用寄存器,DPTR主要用来存放16位地址。

④PC用于存放CPU下一条要执行的指令地址,是一个16位的专用寄存器。

27.访问不同的存储器空间使用不同的指令:

程序存储器,使用MOVC指令;外部数据存储器,使用MOVX指令;内部数据存储器,使用MOV指令;特殊功能寄存器,使用MOV指令;位地址空间,使用MOV、SETB、CLR等指令。

28.堆栈是在单片机内部RAM中从某个选定的存储单元开始划定的一个地址连续的区域。

堆栈操作是在内存RAM区专门开辟出来的按照“先进后出”原则进行数据存取的一种工作方式,主要用于子程序调用及返回和中断处理断点的保护和返回。

SP用来指示堆栈所处的位置。

当数据堆入栈区后,SP的值也自动随之变化。

51单片机属于向上生长型堆栈(即向高地址方向生成)。

29.用一个称为堆栈指针SP的特殊功能寄存器来给出栈顶存储单元的地址。

堆栈指针SP中存储的总是堆栈栈顶存储单元的地址,即堆栈指针SP总是指向堆栈栈顶。

30.向上生长型堆栈出栈入栈的操作原则是“先进后出”或“后进先出”。

31.实现复位操作,必须使RST引脚(9)保持两个机器周期以上的高电平。

32.复位是单片机的初始化操作,其主要功能是程序计数器PC值变为0000好,使单片机从0000H开始执行程序。

上电复位后,RAM的内容是随机的。

寄存器初始状态寄存器初始状态

PC0000HACC00H

PSW00HSP07H

■思考与练习:

51单片机内部包括哪些主要部件

答:

51单片机包括中央处理器CPU、数据存储器RAM、只读存储器ROM、并行输入输出口P1~P3口、串行口、并行口、定时/计数器、中断系统及特殊功能寄存器等8个部件。

80C51单片机的存储器有哪几种类型可以划分为哪几个部分

答:

80C51单片机的存储器按功能可以划分为两大类:

随机存储器(RAM)和只读存储器(ROM)。

可以划分为以下五部分:

片内程序存储器、片外程序存储器、片内数据存储器、特殊功能寄存器、片外数据存储器。

80C51如何确定和改变当前工作寄存器区

答:

在选择工作寄存器区时,可通过对特殊功能寄存器中的程序状态寄存器PSW的RS1和RS0的状态设置,来选择哪一组工作寄存器作为当前的工作寄存器组。

单片机复位时,当前工作寄存器默认为0组。

位地址和字节地址如何区分

位地址00H~7FH与片内RAM的字节地址编址相同,容易混淆。

区分方法:

在80C51的指令系统中,有专门的位操作指令和字节操作指令来区分。

(位操作指令MOVC,20H位地址只有1bit;字节操作指令MOVA,20H字节地址共8bit)。

PC在执行指令过程中,起什么作用

答:

PC在执行指令过程中,PC用于存放CPU下一条要执行的指令地址,是一个16位的专用寄存器。

第三章51单片机的指令系统

33.计算机所有的指令集合称为该计算机的指令系统。

34.指令是基本格式:

[标号:

]操作码[目的操作数][,源操作数][;注释]

●标号:

指令的符号地址;

●操作码:

规定指令的操作功能,是指令格式中唯一不能空缺的部分;

●操作数:

用于给指令的操作提供数据或地址。

把左边的操作数称为目的操作数,右边的操作数称为源操作数;

●注释:

注释是对语句或程序段功能的说明。

注释用“:

”开头,可空缺。

35.按指令的功能分类:

数据传送指令(28条)、算术运算类指令(24条)、逻辑运算与移位类指令(25条)、控制转移类指令(17条)、位操作类指令(17条)。

36.寻址方式

♦立即寻址

指令中跟在操作码后面的数据就是实际参与运算的操作数,称为立即数。

MCS-51指令系统中允许使用8位和16位立即数,立即数之前加“#”予以标识。

例:

MOVA,#6DHMOVA,#3AHMOVDPTR,#0DFFFHMOV40H,#30H

MOVA,#60HMOVDPTR,#3400HMOV30H,#40H

♦直接寻址

指令中包含了操作数的地址,该地址直接给出了参加运算或传送的单元的地址。

直接寻址可访问两种地址空间:

⑴特殊功能寄存器SFR(又叫做专用寄存器)⑵内部数据存储器RAM中的128个字节单元。

例:

MOVA,52HMOVA,P1MOV30H,20HMOVP0,P1

♦寄存器寻址

把指定的某一可寻址的工作寄存器R0~R7或A,B(乘、除指令中),DPTR,的内容作为操作数。

例:

MOV53H,AMOVB,AMOV20H,R1MOVP0,R0

♦寄存器间接寻址

指令指定的某一寄存器的内容作为操作数地址。

可用来间接寻址的寄存器有R0、R1和数据指针DPTR,前面加@表示间接寻址。

可访问内部RAM或外部数据存储器。

堆栈指针SP在执行指令中也起到寄存器间接寻址的作用,但它不出现在指令表达形式中。

实现间接寻址的地址指针:

(1)Ri(R0、R1):

寻址对象为片内RAM的128个单元;

(1)DPTR:

寻址对象为外部数据存储器。

例:

MOVA,@R0MOVB,@R1MOVXA,@DPTRPUSH20H

POPACCMOV@R0,AMOVXA,@R1MOVX@DPTR,A

♦变址寻址

基址寄存器(DPTR或PC):

存放基准地址;变址寄存器(A):

存放偏移量;基址寄存器的内容与变址寄存器的内容的和为可寻址单元的地址。

该类寻址方式用于访问程序存储器,对查表访问特别有用。

注意:

A中内容为无符号数。

例:

MOVCA,@A+DPTRMOVCA,@A+PCJMP@A+DPTR

♦位寻址

采用位寻址方式的操作数是8位二进制数中的某1位,指令中给出的是位址。

寻址对象:

①片内数据存储器位寻址区中,位地址为00H~7FH的128位②11个可位寻址的特殊功能寄存器中的82个有效可寻址位。

例:

MOVC,3AHSETBPSW,4MOVC,00HMOVC,20H

■思考与练习:

下列哪些指令是非法指令,并改正。

CJNEA,#30H,ABC;合法

CJNEA,30H,ABC;合法

CJNE30H,A,ABC;非法→CJNEA,30H,ABC

CJNER7,#30H,ABC;合法

CJNER5,#30H,ABC;合法

CJNEA,R4,ABC;非法→不存在这种格式

CJNEA,@R4,ABC;非法→不存在这种格式(CJNEA,#data,rel/CJNEA,direct,rel/CJNE@Ri,#data,rel/CJNERn,#data,rel)

DJNZACC,ABC;合法

DJNZ30H,ABC;合法(DJNZRn,rel/DJNZdirect,rel)

INCDPTR;合法(INCA/INCdirect/INC@Ri/INCRn/INCDPTR)

MOVA,@R3;合法

MOVXA,DPTR;非法→MOVXA,@DPTR(MOVXA,@DPTR/MOVXA,@Ri/MOVX@DPTR,A/MOVX@Ri,A)

DECDPTR;非法→不存在这种格式(DECA/DECdirect/DEC@Ri/DECRn)

JB70H;非法→不存在这种格式(JBbit,rel)

ADDCB,DIRECT1;非法→不存在这种格式(ADDCA,#data/ADDCA,direct/ADDCA,@Ri/ADDCA,Rn)

指出源操作数的寻址方式。

MOVA,#30H(立即寻址)

MOVA,B(直接寻址)

MOVP0,P1(直接寻址)

DIVAB(寄存器寻址)

MOVCA,@A+DPTR(变址寻址)

MOV30H,A(寄存器寻址)

PUSH30H(直接寻址)

PUSHB(寄存器寻址)

POPACC(寄存器间接寻址)

写出下列程序执行的结果。

(40H)=FFH

MOV50,#40H;(50H)=40H

MOVR1,#50H;R1=50H

MOVA,@R1;A=40H

MOVR0,A;R0=40H

MOV60H,@R0;(60H)=FFH

MOV30H,60H;(30H)=FFH

分析下面程序执行的结果。

MOVSP,#2FH;SP=2FH

MOVA,#30H;A=30H

MOVB,#31H;B=31H

PUSHA;SP=30H,(30H)=30H

PUSHB;SP=31H,(31H)=31H

POPA;SP=30H,A=31H

POPB;SP=2FH,B=30H

分析执行下列程序后A和标志位C,AC,OV及P的结果。

MOVA,#0DH;A=0DH

MOVR7,#3DH;R7=3DH

ADDA,R7;A=4AH,C=0,AC=1,OV=0,P=1

第四章51单片机的汇编语言程序设计

37.伪指令:

在对汇编语言进行翻译的过程中,需要提供一些有关汇编的信息指令。

这些指令在汇编时起到控制作用,但其自身不产生机器代码。

伪指令就是汇编程序能够识别的汇编命令,它是程序员发给汇编程序的命令,只在汇编过程中起作用,它不是单片机要执行的指令,所以没有机器码。

◆起始伪指令ORG(ORIGIN)

格式:

[<标号:

>]ORG<地址>

功能:

出现在源程序的开头,用于规定目标程序存放的起始地址。

例:

程序如下:

ORG0000H

START:

MOVA,#20H

ADDA,#08H

MOV20H,A

HERE:

SJMPHERE

◆结束伪指令END(ENDOFASSEMBLY)

格式:

[<标号:

>]END<表达式>

功能:

汇编终止命令,本命令用于终止源程序的汇编工作。

例:

程序如下:

ORG0000H

START:

MOVA,#20H

ADDA,#08H

MOV20H,A

HERE:

SJMPHERE

END

◆赋值伪指令EQU(EQUATE)

格式:

<字符名称>EQU<赋值项>

功能:

本命令用于给标号赋值。

例:

程序如下:

PPEQOR0

QQEQU30H

MOVA,PP;把R0中的值送给A

MOVB,QQ;把30H中的值送给直接地址F0H

◆定义字节伪指令DB(DEFINEBYTE)

格式:

[<标号:

>]DB<8位数表>

功能:

定义字节命令,本命令用于从指定的地址开始,在程序存储器的连续单元中定义字节数据。

例:

程序如下:

ORG0000H

TAB:

DB00H,45H,67H,78H

DB78H,58H,90H,57H

……

汇编后结果:

(0000H)=00H(0001H)=45H(0002H)=67H(0003H)=78H

(0004H)=78H(0005H)=58H(0006H)=90H(0007H)=57H

◆定义字伪指令DW(DEFINEWORD)

格式:

[<标号:

>]DW<16位数表>

功能:

定义数据字命令,本命令用于从指定地址开始,在程序存储器的连续单元中定义16位的数据字。

该命令将字数据表中的数据依从左到右的顺序存放在指定的存储单元中,数据字的高8位放在低地址单元,低8位放在高地址单元。

例:

程序如下:

ORG0030H

TAB:

DW6789H,3456H

DW1234H,5678H

……

汇编后的结果:

(0030H)=67H,(0031H)=89H

(0032H)=34H,(0033H)=56H

(0034H)=12H,(0035H)=34H

(0036H)=56H,(0037H)=87H

◆位定义命令BIT

格式:

<字符名称>BIT<位地址>

功能:

本命令用于给字符名称赋以位地址。

例:

程序如下:

AQBIT

DEFBIT

汇编结果:

把的位地址赋给AQ,把的位地址赋给DEF。

38.程序设计举例:

◆【例4-2】设在片内RAM中,20H和21H单元各存放有一个8位数据,要求拼装一个新字节并送30H保存,其低5位取自20H单元中的低5位,高3位取自21H单元中的低3位。

实现程序如下:

MOV30H,20H;20H单元中的数据送入30H单元

ANL30H,#00011111B;屏幕高3位

MOVA,21H;21H单元中的数据送入A

SWAPA;将A中的数据高低3位交换,循环左移4次

RLA;将A中数据再循环左移1次

ANLA,#B;屏蔽A中数据的低5位

ORL30H,A;完成拼装

◆【例4-6】设在外部RAM的3个连续存储单元ST1/ST2和ST3中,ST1和ST2存放着两个不带符号的二进制数,请找出其中的大数并存在ST3中。

程序如下:

START:

CLRC;进位位清0

MOVDPTR,#ST1;设置数据指针

MOVXA,@DPTR;取第一个数

MOVR7,A;暂存R7

INCDPTR;数据指针加1

MOVXA,@DPTR;取第二个数

SUBBR7;比较两数的大小

JNCBIG1;第二个数大转移

XCHA,R7;第一个数大送A

BIG0:

INCDPTR;数据指针加1

MOVX@DPTR,A;存大数

RET

BIG1:

MOVXA,@DPTR;第二个数送A

◆【例4-11】有一数据块从片内RAM的30H单元开始存入,设数据块长度为10个单元。

根据下式:

求出Y的值,将Y值存入31H单元。

程序如下:

ORG1000H

MOVA,30H;取数

JB,NEG;负数,转NEG

JZZERO;为零,转ZERO

ADDA,#02H;为正数,求X+2

AJMPSAVE;转到SAVE,保存数据

ZERO:

MOVA,#64H;数据为零,Y=100

AJMPSAVE;转到SAVE,保存数据

NEG:

DECA

CPLA;求|X|

SAVE:

MOV31H,A;保存数据

SJMP$;暂停

◆【例4-13】在外部RAM首地址为table的数据表中,有10个字节的数据,编程将每个字节的最高位无条件的置1。

实现程序如下:

MOVDPTR,#table;送数据表首地址

MOVR7,#OAH;置处理次

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

当前位置:首页 > 小学教育 > 语文

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

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