单片机总结ppt课件.ppt

上传人:小飞机 文档编号:1655857 上传时间:2022-12-13 格式:PPT 页数:60 大小:1.46MB
返回 下载 相关 举报
单片机总结ppt课件.ppt_第1页
第1页 / 共60页
单片机总结ppt课件.ppt_第2页
第2页 / 共60页
单片机总结ppt课件.ppt_第3页
第3页 / 共60页
单片机总结ppt课件.ppt_第4页
第4页 / 共60页
单片机总结ppt课件.ppt_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《单片机总结ppt课件.ppt》由会员分享,可在线阅读,更多相关《单片机总结ppt课件.ppt(60页珍藏版)》请在三一办公上搜索。

1、第1章 绪论,一、什么是单片机,从外形上看:双列直插式封装、贴片式封装,从内部上看:结构图,又称微控制器 (Microcontroller Unit ,MCU)或称嵌入式控制器(Embedded Controller),在一块半导体硅片上集成了微处理器(CPU)、存储器、各种I/O接口,具有计算机的属性,称为单片微型计算机(简称单片机)。,从类型上看:,通用型单片机专用型单片机,2.1 单片机的外特性,一、电源:2个 Vcc(40) Vss(20)二、时钟: 2个 XTAL1(19) XTAL2(18)三、输入输出(I/O):32个 P0:8个 P1:8个 P2:8个 P3:8个四、控制信号:

2、4个 RST/VPD ALE/PROG PSEN EA/Vpp,XTAL1,XTAL2,MCS-51,C1,C2,CYS,XTAL2,XTAL1,MCS-51,+5V,VSS,外部时钟源,图1 内部振荡方式,图2 外部振荡方式,二、时钟电路引脚 XTAL1(19) XTAL2(18),1、两种方式,说明:频率越高,工作速度就越快,但功耗就要增加,其产生的高次谐波也会对系统内部的模拟电路(如ADC)产生严重的干扰。,1振荡周期:为单片机提供时钟信号的振荡源的周期。 2状态周期:是振荡源信号经二分频后形成的时钟脉冲信号。 3机器周期:通常将完成一个基本操作所需的时间称为机器周期。6个状态周期 4指

3、令周期:是指CPU执行一条指令所需要的时间。一个指令周期通常含有14个机器周期。,思考:若MCS-51单片机外接晶振为12MHz时,则单片机的机器周期为多少?,实例1:用8051最小系统点亮发光二极管LED,ORG 0000H D1:JB P1.6, LOOP CLR P1.3 SJMP LOOP1 LOOP: SETB P1.0LOOP1:SJMP D1 END,1、程序存储器(1)作用:存储应用程序的机器码、表格常数(2)如何选择片内片外的程序存储器?(3)系统保留ROM地址(特殊存储单元),0000H:启动地址,0003H:外部中断0的中断服务入口地址000BH:定时/计数器0溢出中断入

4、口地址0013H:外部中断1的中断服务入口地址001BH:定时/计数器1溢出中断入口地址0023H:串行口中断服务程序入口地址,2、数据存储器,(1)作用:存放运算的中间结果、数据暂存、缓冲(2)片外数据存储器:64K(3)片内数据存储器: 地址范围:低128字节 00H7FH 高128字节 80HFFH,返回,D0H,PSW.0,PSW.1,PSW.2,PSW.4,PSW.6,PSW.7,PSW.5,PSW.3,CY:进借位标志;AC:辅助进借位标志; F0:用户标志; RS1、RS0:工作寄存器组选择;OV:溢出位;P: 奇偶位。,工作寄存器组选择控制表,特殊功能寄存器SFR,三、比较不相

5、等转移指令 CJNE A,#data,rel CJNE A,direct,rel CJNE Ri,#data,rel CJNE Rn,#data,rel,该类指令具有比较和判断双重功能,比较的本质是做减法运算,用第一操作数内容减去第二操作数内容,但差值不回存。两个操作数的内容不变。,若(第一操作数)=(第二操作数),则程序继续执行,(PC)(PC) +3 若(第一操作数)(第二操作数),则程序转移,(PC)(PC) + rel +3,Cy0 若(第一操作数)(第二操作数),则程序转移,(PC)(PC) + rel +3,Cy1,5.2 MCS-51的中断系统,MCS-51提供了5个中断源,2个

6、中断优先级控制,可实现2级中断服务嵌套。可通过程序设置中断的允许或屏蔽,设置中断的优先级。,P3.0,P3.1,P3.5,P3.4,P3.2,P3.3,IT0,IT1,一、内部结构图,88H,TCON: 定时器/计数器控制寄存器,SCON: 串行口控制寄存器,98H,IE: 中断允许寄存器,A8H,IP: 中断优先级寄存器,B8H,MCS-51单片机设置了4个专用寄存器用于中断控制,用户通过设置其状态来管理中断系统。,二、处理外部中断举例,例1:要求每次按动按键,使外接发光二极管LED改变一次亮灭状态。解:INT0输入按键信号,P1.0输出改变LED状态。1跳变触发:每次跳变引起一次中断请求。

7、,ORG 0000H;复位入口 AJMP MAINORG0003H;中断入口AJMPPINT0ORG0100H;主程序MAIN:MOV SP,#40H;设栈底SETBIT0;负跳变触发中断SETBEX0;开INT0中断SETBEA;开总允许开关H:SJMPH ;执行其它任务ORG0200H;中断服务程序PINT0:CPL P1.0;改变LED RETI;返回主程序,(1)软件等待按键释放。(2)硬件清除中断信号。,2、电平触发:,ORG 0000H;复位入口 AJMP MAINORG0003H;中断入口AJMPPINT0ORG0100H;主程序MAIN:MOV SP,#40H;设栈底 CLRI

8、T0;低电平触发中断 SETBEX0;开INT0中断 SETBEA;开总允许开关H:SJMPH ;执行其它任务ORG0200H;中断服务程序PINT0:CPL P1.0;改变LEDWAIT:JNBP3.2,WAIT;等按键释放RETI;返回主程序,例2: 通过外部中断控制八盏灯循环点亮。解:通过P1口扩展八盏灯,在/INT1引脚接一个按钮开关到地,每按一下按钮就申请一次中断,点亮一盏灯,中断服务则是:依次点亮八盏灯中的一盏。采用边沿触发。,程序如下: ORG 0000H LJMP MAIN ORG 0013H ; 中断服务程序入口地址 LJMP IN11 MAIN:SETB EA ; 开总中断

9、允许“开关” SETB EX1 ; 开分中断允许“开关” CLR PX1 ; 低 优先级(也可不要此句) SETB IT1 ; 边沿触发 MOV A , #01H ; 给累加器A赋初值 SJMP $ ; 原地等待中断申请 IN11:RL A ; 左环移一次 MOV P1,A ; 输出到P1口 RETI ; 中断返回 END,1、TCON 定时器/计数器控制寄存器 88H,TF0/TF1:T0/T1溢出标志位。可用于申请中断或供CPU查询。在进入中断服务程序时会自动清零;但在查询方式时必须软件清零。 定时或计数时间到,可以采用查询或中断方式处理; =1 :计数溢出; =0 :计数未满。TR0/T

10、R1:T0/1启停控制位。 =1 :启动计数; =0: 停止计数。IE0/IE1和IT0/IT1:用于管理外部中断。,二、4个SFR,2、TMOD: 定时器/计数器工作方式控制寄存器 89H,0 :INT0对启动T0没有影响,由TR0启动;,GATE :门控位,1 :启动T0由INT0、TR0共同启动。,M1 M0:工作方式选择位 。 0 0 :13位定时器/计数器; 0 1 :16位定时器/计数器(常用); 1 0 :可自动重装的8位定时器/计数器(常用); 1 1 :T0 分为2个8位定时器/计数器;仅适用于T0。,C/T : 定时方式/计数方式选择位。 1 : 计数器工作方式,对T0/T

11、1引脚外部事件的负脉冲计数; 0 : 选择定时器工作方式,对机器周期脉冲计数定时。,例1:利用定时器产生周期为2ms的方波,fosc=6MHZ,使用T0/T1的步骤:1、确定选择T0/T12、确定工作模式3、确定工作方式4、计算初值5、编写主程序 中断入口处理 定时器/计数器初始化6、编写中断服务程序,(1)方式0:Tmax=2131s=8.192ms(2)方式1:Tmax=2161s=65.536ms (3)方式2、3:Tmax=281s=0.256ms,定时,选择T0,T=(MTC)T0,1ms=(216 -TC)2s TC=65036=0FE0CH,一、方式1的应用,ORG 0000H

12、AJMP MAIN ORG 000BH AJMP TT0 ORG 0100HMAIN: MOV SP,#40H MOV TMOD,#01H MOV TL0,#0CH MOV TH0,#0FEH SETB TR0 SETB ET0 SETB EALOOP: SJMP LOOP,ORG 0200HTT0:CPL P1.0 MOV TL0,#0CH MOV TH0,#0FEH RETI END,思考题:1、实现本题功能T0是否需要停止?2、中断服务程序为什么要给T0重新赋初值? 不赋初值会出现什么现象?,讨论题:定时精度可能会受什么因素影响?,方案1:采用中断方法,方案2:采用查询方法,ORG 00

13、00H MOV TMOD, #01HLOOP: MOV TH0, #0FEH MOV TL0, #0CH SETB TR0LOOP1:JNB TF0,LOOP1 CLR TR0 CPL P1.0 SJMP LOOP,讨论题:比较两个方案的优缺点,查询方法: 程序简单; 但CPU必须不断查询TF0标志; CPU效率低。中断方法: 程序复杂; 能提高CPU效率。,3、方式0的应用:扩展并行输入输出口,CB: MOV R7,#0AH MOV R0,#50H MOV SCON ,#00HSEND1: MOV A,R0 MOV SBUF ,A,WAIT: JNB TI,WAIT CLR TI INC R

14、0 DJNZ R7, SEND1,例:将以50H为首地址的10个单元中数据由串口送出。,CB:MOV R7,#05H MOV R0,#30H RE1: MOV SCON ,#10HWAIT: JNB RI,WAIT CLR RI MOV A,SBUF MOV R0 ,A,INC R0 DJNZ R7,RE1,例:从扩展口读入5个数据,存到内部RAM以30H开始的单元中。,例:T0引脚发生负跳变时,从p1.0引脚输出1个周期为1ms的方波,分析:(1)工作方式选择 T0为方式2计数,初值 0FFH. T1为方式2定时,初值(28-X)2us=500us X=06H(2)中断服务程序 T0中断服务

15、程序停止T0计数,置标志位 T1中断服务程序对P1.0求反,使P1.0产生周期1ms的方波。,二、方式2的应用,ORG 0000H RESET: LJMP MAIN ORG 000BH LJMP IT0P ORG 001BH LJMP IT1P,ORG 0100HMAIN: MOV SP,#60H ACALL PT0M2 LOOP: MOV C,F0 JNC LOOP SETB TR1 SETB ET1 HERE: AJMP HERE,PT0M2: MOV TMOD,#26H MOV TL0,#0FFH MOV TH0,#0FFH SETB TR0 SETB ET0 MOV TL1,#06H

16、MOV TH1,#06H CLR F0 SETB EA RET IT0P: CLR TR0 SETB F0 RETI IT1P: CPL P1.0 RETI,一、串口方式0的应用,例:用8051串行口外接CD4094扩展8位并行输出口,8位并行口的各位都接一个发光二极管,要求发光二极管呈流水灯状态(轮流点亮)。 方案一:采用查询TI决定是否发送下一帧数据方案二:采用中断决定是否发送下一帧数据,RR A CLR P1.0 SJMP OUT0 DELAY: MOV R7, #250 D1: MOV R6, #250 D2: DJNZ R6, D2 DJNZ R7, D1 RET END,ORG 0

17、000H START: MOV SCON, #00H MOV A, #80H CLR P1.0 OUT0: MOV SBUF, A OUT1: JNB TI, OUT1 CLR TI SETB P1.0 ACALL DELAY,CB:MOV R7,#05H MOV R0,#30H RE1: MOV SCON ,#10HWAIT: JNB RI,WAIT CLR RI MOV A,SBUF MOV R0 ,A,INC R0 DJNZ R7,RE1 RET,例:从扩展口读入5个数据,存到内部RAM以30H开始的单元中。,P3.0 RXD,P3.1 TXD,分析: 从串口送出什么样的数据才能显示 0

18、?,例:利用串并转换将数字 09输出到LED显示器上显示,输出同一个数字。,ORG 0000H AJMP MAIN ORG 0030HMAIN:MOV SP,#60H MOV SCON,#00H MOV R1,#00H L1:MOV A,R1 MOV DPTR,#TAB MOVC A,A+DPTR MOV SBUF ,A JNB TI,$ CLR TI,MOV SBUF ,A JNB TI,$ CLR TI CALL DELAY CJNE R1,#9,L2 MOV R1,#00H AJMP MAIN L2:INC R1 AJMP L1TAB:DB 03H,9FH,25H,0DH,99H,49H

19、 DB 41H,1FH,01H,09HDELAY: END,思考:不用串行口发送数据,采用某一个输出口是否也可以 完成串并转换?,例:扩展8片2764,0000H1FFFH2000H3FFFH4000H5FFFH6000H7FFFH,8000H9FFFHA000HBFFFHC000HDFFFHE000HFFFFH,P,1.7,P,1.6,P,1.5,P,1.4,P,1.3,P,1.2,P,1.1,P,1.0,P,3.7,P,3.6,P,3.5,P,3.4,P,3.3,P,3.2,P,3.1,P,3.0,RD,EA,RESET,8031,8051,8751,P,2.7,P,2.6,P,2.5,P

20、,2.4,P,2.3,P,2.2,P,2.1,P,2.0,P,0.7,P,0.6,P,0.5,P,0.4,P,0.3,P,0.2,P,0.1,P,0.0,ALE,A,15,A,14,A,13,A,12,A,11,A,10,A,9,A,8,A,7,A,6,A,5,A,4,A,3,A,2,A,1,A,0,D,7,D,6,D,5,D,4,D,3,D,2,D,1,D,0,G,锁,存,器,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,D0,D1,D2,D3,D4,D5,D6,D7,OE,Vcc,GND,CE1,6264,+5V,WE,PSEN,WR,CE2,6264

21、的8 KB地址范围不唯一(因为P2.7P2.6可为任意值)可以为0000H-1FFFH 4000H-5FFFH 8000H-9FFFH A000H-DFFFH四种中的一种地址范围。,例:分析外部数据存储器地址范围,0000H1FFFH/2000H3FFFH/4000H5FFFH/6000H7FFFH,写数据:MOV A, DATA MOV DPTA, 6000HMOVX DPTR, A读数据:MOV DPTR, 7FFFHMOVX , DPTR,例:在数据存储器扩展电路中,将片内RAM 以50H单元开始的16个数据,传送片外数据存储器0000H开始的单元中。程序如下: ORG 1000H MO

22、V R0, #50H MOV R7, #16 MOV DPTR, #0000H AGAIN: MOV A, R0 MOVX DPTR, A INC R0 INC DPTR DJNZ R7, AGAIN RET END,二、I/O数据传送方式,1、无条件传送方式 在进行I/O操作时,不需要测试外部设备的状态,可以根据需要随时进行数据传送操作。一般用于具有常驻的或变化缓慢的数据信号的外部设备如机械开关、指示灯、发光二极管、数码管等,以及工作速度非常快,足以和CPU同步工作 的外部设备如外部数据存储器,数/模转换器。2、程序查询方式 为了实现查询方式的数据输入输出传送,需要由接口电路提供外设状态,并

23、以软件方法进行状态测试。3 、程序中断方式 采用中断方式进行数据传送时,当外设为数据传送作好准备之后,就向CPU发出中断请求。CPU响应中断后,再继续执行被中断的原程序。,方式选择控制字,二、8255A的控制字(2个),C口置位/复位控制字,思考:如何把这两个控制字写入8255A? 8255A如何区分这两个控制字?,MOV DPTR,#7F03H MOV A,#83H MOVX DPTR, A,例: 设8255控制字寄存器的地址为7F03H,试编程使A口为方式0输出,B口为方式0输入,PC4PC7为输出,PC0PC3为输入。,例:设8255控制字寄存器地址为7F03H,将PC1置1,PC3清0

24、。,MOV DPTR,#7F03HMOV A,#03HMOVX DPTR, AMOV A,#06HMOVX DPTR, A,例:如果在8255的B口接有8个按键,A口接有8个发光二极管,完成按下某一按键,相应的发光二极管发光的功能。 MOV DPTR,#0003H ;指向8255的控制口 MOV A,#83H MOVX DPTR, A ;向控制口写控制字,A口输出,B口输入LOOP: MOV DPTR,#0001H ;指向8255的B口 MOVX A, DPTR ;检测按键,将按键状态读入A MOV DPTR,#0000H ;指向8255的A口 MOVX DPTR, A ;驱动LED发光 SJ

25、MP LOOP,一、8155的内部结构和引脚,TM2 TM1 IEB IEA PC2 PC1 PB PA,0:A口为输入方式;1:A口为输出方式,0 方式1:A、B口为基本输入输出,C口为输入方式11方式2:A、B口为基本输入输出,C口为输出方式1 方式3:A口选通输入输出,B口为基本输入输出 PC0:AINTR,PC1:ABF,PC2:ASTB PC35:输出0 方式4:A口、B口选通输入输出 PC0:AINTR,PC1:ABF,PC2:ASTB PC2:BINTR,PC4:BBF,PC5:BSTB,0:禁止A口中断1:允许A口中断,0:B口为输入方式;1:B口为输出方式,0:禁止B口中断1

26、:允许B口中断,二、8155的命令字/状态字寄存器,8155芯片的命令/状态寄存器物理上只有一个端口地址,对该端口写操作,命令字被写入命令寄存器;对该端口读操作,则从状态寄存器读出状态字。,8155的命令字格式:,状态寄存器格式,例:若A口定义为基本输入方式,B口定义为基本输出方式,对输入脉冲进行24分频,写出初始化程序。,START:MOV DPTR, 7F04H ;指针指向定时器低8位 MOV A,18H ;计数初值24送A, MOVX DPTR,A ;计数初值低8位装入定时器,INC DPTR ;指针指向定时器高8位 MOV A,40H ;设定时器连续方波输出 MOVX DPTR,A ;

27、计数初值高6位装入定时器,MOV DPTR,7F00H ;指向命令/状态口 MOV A,#0C2H ;设定命令控制字 MOVX DPTR,A ;A口输入,B口输出,开定时器,例:扩展5个LED(共阳)数码管。编写显示子程序,实现将30H34H5个单元的数值分别显示在5位LED4LED0上。,DIS: MOV R0,#30H MOV R3,#01H MOV A,R3 DLP:MOV P1,A MOV DPTR,#TAB MOV A,R0 MOVC A,A+DPTR MOV P2,A ACALL DLY1MS INC R0 MOV A,R3 RL A MOV R3,A JNB ACC.5,DLP

28、SJMP DIS TAB:DB 0C0,0F9H,0A4H, 0B0H, H0F8H,82H,92H,99H,DLY1MS:,例4:用串行口实现静态显示电路的接口,例:编写显示更新子程序,实现将70H77H共8个单元的数值分别显示在8位LED7LED0上。,ORG 1000HDISPSER:MOV R5, #08H ; 显示8个字符 MOV R1, #70H ; 70H77H存放要显示的数据 DL0: MOV A, R1 ; 取出要显示的数据 MOV DPTR, #STAB ; 指向段数据表 MOVC A, A+DPTR ; 查表取字形数据 MOV SBUF, A ; 送出数据,进行显示 JN

29、B T1, $ ; 输出完否? CLR T1 ; 输出完,清中断标志 INC R1 ; 再取下一个数据 DJNZ R5, DL0 ; 循环8次 RET; 返回 STAB:DB 0C0H, 0F9H, 0A4H, 0B0H; 段数据表(共阳极) DB END,对ADC0809主要信号引脚的功能说明如下: (1) IN7IN0:模拟量输入通道。ADC0809对输入模拟量的要求主要有:信号单极性,电压范围05 V,若信号过小还需进行放大。另外,在A/D转换过程中,模拟量输入的值不应变化太快,因此,对变化速度快的模拟量,在输入前应增加采样保持电路。 (2) A、B、C:地址线。A为低位地址,C为高位地

30、址,用于对模拟通道进行选择。 (3) ALE:地址锁存允许信号。在对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。,(4)START:转换启动信号。START上跳沿时,所有内部寄存器清0;START下跳沿时,开始进行A/D转换;在A/D转换期间,START应保持低电平。 (5)D7D0:数据输出线。其为三态缓冲输出形式,可以和单片机的数据线直接相连。 (6)OE:输出允许信号。其用于控制三态输出锁存器向单片机输出转换得到的数据。OE=0,输出数据线呈高电阻;OE=1,输出转换得到的数据。 (7)CLK:时钟信号。一般要求640KHZ。ADC0809的内部没有时钟电路,所需时钟信号由外界提

31、供,因此有时钟信号引脚。通常使用频率为500kHz的时钟信号。,(8)EOC:转换结束状态信号。EOC=0,正在进行转换;EOC=1,转换结束。该状态信号既可作为查询的状态标志,又可以作为中断请求信号使用。 (9)VCC:+5 V电源。 (10)Vref:参考电源。参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。其典型值为+5 V(Vref (+) =+5 V,Vref(-) =0 V),五、 MCS-51单片机与ADC0809接口,1) 查询方式,通道地址:7F00H-7F07H,P1.0,EOC,ORG 0000H AJMP MAIN ORG 0100HMAIN: MOV R0,

32、 #78H MOV R2, #08H MOV DPTR, #7F00H MOV A, #00H L0: MOVX DPTR, A L1: JNB P1.0 , L1 ;查询是否为1 MOVX A, DPTR ;为1则转换结束,读出数据 MOV R0, A INC R0 INC DPTR DJNZ R2, L0 SJMP MAIN,例:设计一个8路模拟量输入的巡回检测系统,采样数据依次存放在片内RAM 78H7FH单元中(用查询的方式实现),2) 中断方式,通道地址:0FE00H0FE07H,例:设计一个8路模拟量输入的巡回检测系统,采样数据依次存放在片内RAM 78H7FH单元中(用中断方式实

33、现),ORG 0000H AJMP MAIN ORG 0013H AJMP INT1 MAIN:MOV R0,#78H SETB IT1 SETB EA SETB EX1 MOV DPTR,#0FE00H MOV A,#00HLOOP:MOVX DPTR,AHERE: CJNE R0,#7FH,HERE MOV R0,#78H AJMP HERE,INT1:MOVX A,DPTR MOV R0,A INC DPTR INC R0 MOV A,#00H MOVX DPTR,A RETI,3) 等待方式,通道地址:7F00H-7F07H,ORG 0000H AJMP MAIN ORG 0100HM

34、AIN: MOV R0, #78H MOV R2, #08H MOV DPTR, #7F00H MOV A, #00H L0: MOVX DPTR, A LCALL DELAY150;等待是否转换结束 MOVX A, DPTR ;转换结束,读出数据 MOV R0, A INC R0 INC DPTR DJNZ R2, L0 SJMP MAIN,例:设计一个8路模拟量输入的巡回检测系统,采样数据依次存放在片内RAM 78H7FH单元中(用等待的方式实现),例:利用0832设计波形发生器,产生锯齿波、三角波、 矩形波,MOV A, #00H ;取下限值 MOV DPTR,#0FFFEH;指向083

35、2口地址MM:MOVX DPTR,A ;输出 INC A;延时 SJMP MM;反复,1、产生锯齿波程序,+5V,思考:实际上锯齿波的上升边是一条直线吗?,锯齿波的周期如何控制?,如要求得到非满幅锯齿波?,MOV A , #00H ;取下限值 MOVX DPTR , #0FFFEH ;指向0832口地址 SS1:MOVX DPTR , A ;输出 SS2: INC A ;转换值增量 JNZ SS1 ;未到峰值,则继续SS3: DEC A ;已到峰值,则取后沿 MOVX DPTR , A ;输出 JNZ SS3 ;未到谷值,则继续 SJMP SS1 ;已到谷值,则反复,2、三角波电压发生器,START: MOV DPTR , #0FFFEH ;送DAC0832口地址LOOP: MOV A , #dataH ;送高电平数据 MOVX DPTR , A LCALL DELAYH ;调用延时子程序 MOV A , #dataL ;送低电平数据 MOVX DPTR , A LCALL DELAYL ;调用延时子程序 SJMP LOOP,3、矩形波电压发生器,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号