找回密码
 注册
关于网站域名变更的通知
查看: 779|回复: 1
打印 上一主题 下一主题

stc单片机双串口中断收发源程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-9 13:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
stc单片机双串口中断收发源程序
0 L8 e, c) V( ^/ e7 G# {
9 K7 i! X7 X! a+ T% U; A1 m5 N
; ?& |. x) P" W
. M, R2 V2 _6 {- _( X5 H
/*---------------------------------------------------------------------*/: v3 ?7 M# z3 v5 ]4 N4 x- [5 C
/* --- STC mcu International Limited ----------------------------------*/
! u, M" z1 M7 G: \1 u" ]/* --- STC 1T Series MCU Demo Programme -------------------------------*/( L, ~3 n0 u, g9 M: O4 l7 U9 C( I
/* --- Mobile: (86)13922805190 ----------------------------------------*/: l) l9 C9 {7 y$ g8 J. X3 e
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
( L; U9 I: ~6 k1 ~8 _/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
9 T  S8 C) |; j7 i/* --- QQ:  800003751 -------------------------------------------------*/7 u' B" [7 N% c/ R8 f) C
/* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序   */
6 Y/ G+ s, u4 y- h, f/*---------------------------------------------------------------------*/
5 ?: d; V/ e6 t" O6 B* h% l% l8 G( G( r3 J( C+ l: h, Z: H! Z: l
% O7 |2 N3 S* C1 U
#define MAIN_Fosc                22118400L        //定义主时钟
9 P! W0 J2 C9 E" t- \7 V* s5 Q, h% _5 ^, F& b" \' S
#include        "STC15Fxxxx.H"
$ J; d; i3 _- F$ U+ N7 ]5 v. r
#define                Baudrate1        115200UL' g: E( p. n: ^
#define                Baudrate2        115200UL
% i3 C4 {+ U9 |
2 U+ P3 H" m, R$ r" i
0 Q0 N, ^: Y5 S+ ^! v
! [- ?, @3 H$ `) p4 D- y. d/*************        功能说明        **************& R# k9 _4 m8 i6 z
7 D1 C8 g) H5 ?& @2 }' T4 L
双串口全双工中断方式收发通讯程序。+ R" N  T3 s7 o$ K
+ z1 G+ f! r* o) N& b
通过PC向MCU发送数据, MCU收到后通过串口把收到的数据原样返回." M+ A0 @0 Y- H9 J% ^, r

/ y7 \5 H/ h7 p9 r6 G/ T! s& {******************************************/0 Z' p" h' ?: B; K4 W
) e& H) R0 E3 m( i
* |' M' t; E3 g' U
#define        UART1_BUF_LENGTH        324 H: V- o& {; U6 F
#define        UART2_BUF_LENGTH        32
0 D( A% g& S5 [2 j' A  ~1 K7 B$ a1 J/ M, U( G
6 }& z$ r% e: C, Q8 W% G9 w
% P( m/ l: f1 h
u8        TX1_Cnt;        //发送计数
1 G' i% g. o8 O7 w6 F7 Mu8        RX1_Cnt;        //接收计数2 M7 r  S/ ]% r' i
u8        TX2_Cnt;        //发送计数: l, c7 O2 _5 A; _1 }
u8        RX2_Cnt;        //接收计数, U# z: T5 W8 i) K1 V, K
bit        B_TX1_Busy;        //发送忙标志% }% C" c3 C" m( v7 A  f1 p7 P
bit        B_TX2_Busy;        //发送忙标志- n3 T0 J8 P1 O

, x( V( y7 ~  ?& X3 r7 R9 I0 Bu8         idata RX1_Buffer[UART1_BUF_LENGTH];        //接收缓冲
/ e9 h$ u% ?' b+ n/ K# S+ a1 {% }u8         idata RX2_Buffer[UART2_BUF_LENGTH];        //接收缓冲
6 B  e% R% c9 U0 E# f: E% M8 T& ?- {' y. e4 o- g
9 P/ }  r* K4 ^! D2 i
void        UART1_config(u8 brt);        // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.  c7 Q9 C! n, {* o% a' |
void        UART2_config(u8 brt);        // 选择波特率, 2: 使用Timer2做波特率, 其它值: 无效.1 }# S) I" C3 s# K! K
void         PrintString1(u8 *puts);
& T) c6 l, V& A4 k( h' L" y; svoid         PrintString2(u8 *puts);
) R, c) B7 j1 @; a  p8 r  s# E: o: O# W( _8 c& Y: R/ q; j
7 T* D4 R3 b" Q

* ~1 C" j9 k: |//========================================================================
) y  P" Q' r8 [2 g$ \: ?+ ^3 Z0 g// 函数: void main(void)2 f' N( b* Z( Q7 K
// 描述: 主函数。9 J, J; R) k4 Q/ v: F  E
// 参数: none.
5 S1 [  l, Q  g+ Q" |( s0 w// 返回: none.( G3 E+ _& n$ [; p  C4 r
// 版本: VER1.0& F& C6 K: R) s
// 日期: 2014-11-28: ^  b+ q5 h% L
// 备注:
: z) W3 U$ I! A( \; g//========================================================================
" Z" i+ Y0 }; [+ a# l* _; `void main(void)
) I' P6 }' P" F{
" N4 c* S; H, G( T. x; [; i% ^        P0M1 = 0;        P0M0 = 0;        //设置为准双向口
8 {. [9 Z  e& V0 B; D2 `7 I! V        P1M1 = 0;        P1M0 = 0;        //设置为准双向口5 t+ }0 m0 x5 x: @7 e( v
        P2M1 = 0;        P2M0 = 0;        //设置为准双向口
, I+ d0 Z3 X. k! B7 b4 o8 q        P3M1 = 0;        P3M0 = 0;        //设置为准双向口
2 A  \8 I% m5 a/ Z5 s; v+ A3 j& {        P4M1 = 0;        P4M0 = 0;        //设置为准双向口7 o! w" V  o0 z, N5 L
        P5M1 = 0;        P5M0 = 0;        //设置为准双向口
, i3 u& L% R+ a4 J" Q# m        P6M1 = 0;        P6M0 = 0;        //设置为准双向口
6 \9 ~) B8 Y6 _: l5 @6 n# Z        P7M1 = 0;        P7M0 = 0;        //设置为准双向口
& F  H+ _8 f% j+ z& ^8 S" G  X' d9 P* v4 _$ J
        UART1_config(1);        // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
4 Q3 u& q) B& d: g2 Q  M2 j        UART2_config(2);        // 选择波特率, 2: 使用Timer2做波特率, 其它值: 无效.
1 i/ _+ o7 [/ j5 A5 ^- t3 F        EA = 1;                                //允许全局中断
3 R" s3 b7 L2 U" s9 F: P# B7 E* L# L8 A- U$ W

, l  O1 d- m' A. P9 |" B* ^. O7 m        PrintString1("STC15F2K60S2 UART1 Test Prgramme!\r\n");        //SUART1发送一个字符串) N$ r6 t2 t6 w7 M& G2 z3 Z& }' P+ o
        PrintString2("STC15F2K60S2 UART2 Test Prgramme!\r\n");        //SUART2发送一个字符串
( o8 Q  \4 k+ \4 c$ C, M* a" h) t2 |) Z' e# |# z& O
        while (1)' `. Y5 Y& j5 r: g8 s
        {+ m* x6 B1 z: b1 p, n9 B0 @5 N) c
                if((TX1_Cnt != RX1_Cnt) && (!B_TX1_Busy))        //收到数据, 发送空闲, D2 w5 u7 t' i( M$ T
                {
2 t+ ^/ N! Z, X2 ?/ {5 ]0 u1 ~                        SBUF = RX1_Buffer[TX1_Cnt];
! j9 `) z5 u1 a. i& @9 J: B                        B_TX1_Busy = 1;
& R" C$ \0 g2 ]9 N, G; |+ h) h  J                        if(++TX1_Cnt >= UART1_BUF_LENGTH)        TX1_Cnt = 0;; p( E& M' f: \8 U6 B8 |! R1 j' J
                }3 q/ v! H+ U# E1 P

; w3 g* ], E, L8 o! e0 [/ r                if((TX2_Cnt != RX2_Cnt) && (!B_TX2_Busy))        //收到数据, 发送空闲
4 I# X7 {+ W( j6 e3 E- Y, D                {; A; b! W6 C) |9 x  \' @5 X. {
                        S2BUF = RX2_Buffer[TX2_Cnt];/ h% U. k- F6 Y) a
                        B_TX2_Busy = 1;4 R5 o  [1 U" J& c
                        if(++TX2_Cnt >= UART2_BUF_LENGTH)        TX2_Cnt = 0;
4 D# {2 l" N* b! Q. v6 ?                }
* _; f. ~7 N' X5 Q3 o        }- E& @  c. ?/ k7 M( I# _
}
& R0 i6 v  T/ Q
3 S6 Q% c# z# x1 }/ f# u
- l- ]+ {; e: M( x6 E//========================================================================
: P. q5 C* q0 H// 函数: void PrintString1(u8 *puts)
* D4 \* ^) {  l  K# `& m, N// 描述: 串口1发送字符串函数。9 X& N5 c- j- A8 s" S' Q
// 参数: puts:  字符串指针.: H4 t: M5 n! E, T
// 返回: none.
  g# X% P7 ~9 [// 版本: VER1.0
% s6 }# |+ k$ Q# r// 日期: 2014-11-28
( V9 d' w! u" S4 ~4 ]" S" h7 M# t// 备注: # J& w; I' {, j" e' K3 `. Z6 u2 Q  n
//========================================================================& i1 o2 ]8 ^7 U* l. n
void PrintString1(u8 *puts)( A1 d8 P) |  c" y
{
# {4 s- E( \# R    for (; *puts != 0;        puts++)           //遇到停止符0结束
6 M6 a' H5 O8 }) a" X1 m4 }' P. R5 P        {, U# \7 I& o2 u; j
                SBUF = *puts;& A8 b: m7 O9 {+ ]0 \9 |& W
                B_TX1_Busy = 1;2 V( w- h% J2 P& R2 j1 M! l5 v
                while(B_TX1_Busy);  q7 }% I& X. d* D+ W# I6 w/ Y
        }0 _6 X/ ]  z# t) C
}$ }/ X4 K' V! d% T% a4 j( k: [

* F5 A  y) X1 C) u& o' Z$ J; g//========================================================================
8 ^; P, I/ |# j% C: k2 z// 函数: void PrintString2(u8 *puts)
& z3 p( L) X! e! [/ A7 a, @3 C// 描述: 串口2发送字符串函数。; C' j# g, V! B8 G, F; r
// 参数: puts:  字符串指针.* w9 w# O2 `, v% X  y
// 返回: none.
5 I0 i- \6 p. v// 版本: VER1.0
8 V2 E7 F$ B, N0 L7 e2 M; s$ a// 日期: 2014-11-28
1 C5 b, J1 j- b$ F3 A% ^# u+ W// 备注:
& h' C+ a5 j9 B+ l/ m//========================================================================
" ^/ z3 o+ C4 w- ]( Hvoid PrintString2(u8 *puts)
% i# C# _+ Z( U' _4 s% s' ~{
/ c5 Z+ a& x  E; B    for (; *puts != 0;        puts++)           //遇到停止符0结束! p' p- X0 C' Y' F. O; Z" p  l( H
        {
7 R6 B( K" P/ ^                S2BUF = *puts;4 R' r, k0 h3 @% w$ m& J9 L: f$ }
                B_TX2_Busy = 1;, {) t, U5 H6 g$ y8 I
                while(B_TX2_Busy);
1 ]0 J% Z! _' p: ^        }- a: V) N: L$ l2 ^& B, |/ o) L8 k
}
7 A' x+ U' P0 Z+ O
+ t% C8 f( p  g0 l" l. @//========================================================================  O3 N2 C9 u& k0 C, ~
// 函数: SetTimer2Baudraye(u16 dat)
7 T  B/ ^  P; Y8 H0 T/ A, A  U& L// 描述: 设置Timer2做波特率发生器。8 K# l# O1 q0 M0 }' K& r+ }# U" t. Z
// 参数: dat: Timer2的重装值.
+ b3 O, ?' ~& X// 返回: none.
( k8 ?9 T3 |' }* k// 版本: VER1.0' Z3 m0 H$ I! j3 E; y# V
// 日期: 2014-11-286 A5 d$ q: J, U
// 备注: 6 x( J* f& V" n) h$ }
//========================================================================$ I3 f5 `$ {( F6 i- E
void        SetTimer2Baudraye(u16 dat)+ ~8 n; F6 E- j
{
( H0 e. N- |& K, p        AUXR &= ~(1<<4);        //Timer stop
1 y, O6 ?" @) u) T& Y        AUXR &= ~(1<<3);        //Timer2 set As Timer
( ~& W( K- L( o& F! z' y: t6 s        AUXR |=  (1<<2);        //Timer2 set as 1T mode
2 O5 ~+ Q* }  z0 U4 S# [        TH2 = dat / 256;
" X9 M1 M6 \6 {( ^0 E        TL2 = dat % 256;
" ]) U* o( {9 }. ]/ @        IE2  &= ~(1<<2);        //禁止中断
" H9 O0 \' G5 l4 I        AUXR |=  (1<<4);        //Timer run enable
" z8 @9 d6 X' S  ~; S}
' t- f3 d2 [: z: E: L
  h( q- S: s, W9 y) |1 U//========================================================================
  n; s/ ~+ Y! j( g// 函数: void        UART1_config(u8 brt); @1 ]5 [( j- \5 u% V' I% I. m1 K8 |
// 描述: UART1初始化函数。: i& V6 W! g  D% z
// 参数: brt: 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
# `. O" J% ^7 [, `  i// 返回: none.8 {/ W; A$ O5 N
// 版本: VER1.0' o7 \' i& S5 t# M" u! C* j( k
// 日期: 2014-11-28  f0 c( w4 C' S3 R% c# {+ D" n( r
// 备注:
& N4 h1 z5 k1 v/ H$ V5 Q; \//========================================================================
* [8 m& F2 _" ^void        UART1_config(u8 brt)
2 @* `( m" r" A{3 ~7 c; |# f0 i+ V  X
        /*********** 波特率使用定时器2 *****************/2 o! r* Q' \, k9 Q! w9 X9 u5 V7 `
        if(brt == 2)
9 v' n' o1 t5 o& J# J3 H        {
1 f# W3 T' s* S* o6 I                AUXR |= 0x01;                //S1 BRT Use Timer2;
6 ^- q/ M3 A& L( i% n, i8 n                SetTimer2Baudraye(65536UL - (MAIN_Fosc / 4) / Baudrate1);
9 s( y; p- E" V2 w) f        }
& c5 x' t* e- n. h# _6 X6 U. i' U6 r
4 M2 p! A. |3 [# [        /*********** 波特率使用定时器1 *****************/
4 g0 Q0 D: ]+ R, i        else
  r2 t) \  \& M$ z( S        {
2 R+ T* n$ g0 H/ p! g9 j9 G, Q1 |) ]4 G                TR1 = 0;3 \- h! U4 h+ ~& ]. q  E% Z( L
                AUXR &= ~0x01;                //S1 BRT Use Timer1;( w" G, U$ a" k2 S8 M) X  K; s
                AUXR |=  (1<<6);        //Timer1 set as 1T mode  O+ i( m! J$ E/ B8 p
                TMOD &= ~(1<<6);        //Timer1 set As Timer
6 h) }  n: w. W: E7 a! W  T& M                TMOD &= ~0x30;                //Timer1_16bitAutoReload;
; H: ~, g$ R% _$ I! E                TH1 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) / 256);
7 z; ~, Z+ O0 ]% ]4 k5 w8 Z8 I                TL1 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) % 256);# i0 y$ m5 }$ u- v! _9 w# W- E
                ET1 = 0;        //禁止中断' B5 p9 m; o) Z, a8 d+ w
                INT_CLKO &= ~0x02;        //不输出时钟
3 }4 K: s5 Y# X7 p3 \                TR1  = 1;9 ?  M) L% J. H$ i
        }0 l  _- Z3 \3 F8 l0 g$ x- y; i
        /*************************************************/
- A1 M5 b0 Z6 O/ y4 d4 N
3 ]: W8 S! s4 Y        SCON = (SCON & 0x3f) | 0x40;        //UART1模式, 0x00: 同步移位输出, 0x40: 8位数据,可变波特率, 0x80: 9位数据,固定波特率, 0xc0: 9位数据,可变波特率
8 ?; g% Q/ B% \- a! x//        PS  = 1;        //高优先级中断
, k, T% k! o0 d1 e  A' C6 s        ES  = 1;        //允许中断
/ q& }) p7 `$ d4 s& X6 h7 M) b        REN = 1;        //允许接收9 m2 F+ X5 A1 V* O# t9 f
        P_SW1 &= 0x3f;
8 D& w' }5 B& L& R. [* v        P_SW1 |= 0x80;                //UART1 switch to, 0x00: P3.0 P3.1, 0x40: P3.6 P3.7, 0x80: P1.6 P1.7 (必须使用内部时钟), D+ x! h  a0 W8 D- L. b" F
//        PCON2 |=  (1<<4);        //内部短路RXD与TXD, 做中继, ENABLE,DISABLE% {% T, G1 t4 n* n3 E. b* T
8 E; n, [1 `3 m8 h: A2 i
        B_TX1_Busy = 0;
" U8 N) {$ t- ?$ Y! n, e        TX1_Cnt = 0;/ R. D0 a- M5 h. R
        RX1_Cnt = 0;
7 C8 E# a7 Z& t; v  a* v1 v}
3 {4 r' `5 i! {/ H2 k7 S: @+ [; z5 C" W& C" B

2 a1 u7 V: \. D0 `' ^7 K, [6 A4 z//========================================================================: Y& X8 I  X0 e$ T2 p; L( S
// 函数: void        UART2_config(u8 brt): ~. X% Q. D0 R) d9 |. C6 @
// 描述: UART2初始化函数。% p% {8 F* {+ D* k" _* l) q5 z2 x
// 参数: brt: 选择波特率, 2: 使用Timer2做波特率, 其它值: 无效.
0 B5 c! c8 q1 W& t5 C0 U- T// 返回: none.
0 o4 F  z: G# f# h- s// 版本: VER1.0* K0 ?4 P* j) R  C- A
// 日期: 2014-11-28
; N5 d; y& M1 n: p// 备注: 1 h! }) I! g% x
//========================================================================
( B2 i: g6 B. |void        UART2_config(u8 brt)        // 选择波特率, 2: 使用Timer2做波特率, 其它值: 无效./ y: M( }, I8 Z4 @8 A
{7 T1 l1 E! o8 y8 J
        if(brt == 2)
, K* ^; B* O( B& z  f! N* W4 Q/ x        {( ?1 A7 [" ]) o' o
                SetTimer2Baudraye(65536UL - (MAIN_Fosc / 4) / Baudrate2);5 e3 P7 V; Z. l& l$ V; [
; X& K8 P" x  Q
                S2CON &= ~(1<<7);        // 8位数据, 1位起始位, 1位停止位, 无校验
7 i+ J2 w" N% J  r5 a                IE2   |= 1;                        //允许中断
$ [. Q! Y8 o8 P2 W2 Q                S2CON |= (1<<4);        //允许接收9 L2 b# v1 Z% k5 g& K
                P_SW2 &= ~0x01;          C  ?- M' I# {1 @# Q/ W5 y; ?
                P_SW2 |= 1;                        //UART2 switch to: 0: P1.0 P1.1,  1: P4.6 P4.7
1 W2 t7 V. w, V  `0 G' @) U7 m, j% j4 L& H2 d  G% N2 L3 k1 J
                B_TX2_Busy = 0;
% Z4 O0 ~6 K! V                TX2_Cnt = 0;
& X) \' b! o) C5 @% V2 o                RX2_Cnt = 0;
; l- Z: J* U. r        }9 S% Q' g9 C: I1 ^/ G' c2 P
}9 V4 }/ s$ f6 m) G* e
# I! W3 ?, B# h9 S

& R. o, G( X* e+ b5 F" S8 [0 p//========================================================================* K0 r, P. Q' f* P7 L, ]
// 函数: void UART1_int (void) interrupt UART1_VECTOR
* D. n  l2 p* F// 描述: UART1中断函数。
1 D) g4 s+ W% b9 N2 `// 参数: nine.! x3 u( C2 r) L2 [
// 返回: none.
  f' Z* G; R2 Y$ z+ _// 版本: VER1.0
5 G% N1 Y& F1 Z' X* S// 日期: 2014-11-28
" X# L  L8 z) b8 X5 F6 r// 备注: % n3 t& f9 H* D; L
//========================================================================: \- D7 |. s# V7 v4 h: j
void UART1_int (void) interrupt UART1_VECTOR
  ]# q$ T# E- S4 I5 A! x6 C/ |{; R6 E- l- K# v! _2 I; E* A
        if(RI)' ?3 n  k# B0 Z$ n  v# y+ w1 q2 c
        {" F7 g% V& l5 X" D) I
                RI = 0;
- ]+ q. b# d' a9 d/ h' G                RX1_Buffer[RX1_Cnt] = SBUF;
# Y3 e  d! Y) C; z& P                if(++RX1_Cnt >= UART1_BUF_LENGTH)        RX1_Cnt = 0;
' K6 ]2 U* }& A        }3 ^$ ~8 l6 S  y, t

% L+ M* L2 B0 Q+ S  H' L        if(TI)
+ I1 r3 H0 \- [# f        {
# A( l# u/ x+ W! ~' V+ y& \                TI = 0;
5 ^$ B0 ?( s- o0 H6 B                B_TX1_Busy = 0;: N0 A- X6 T9 A# X+ d; l/ @) c
        }' J4 w% t& |3 J) p
}
# L) \) U* L3 H/ x/ D3 }* e! i& C8 T0 k# W4 D# P' D/ g
//========================================================================
5 H1 V1 _6 }9 \! X: Q4 s// 函数: void UART2_int (void) interrupt UART2_VECTOR
7 r3 s. W7 V! G3 a$ J! [// 描述: UART2中断函数。9 n- l* |) @6 O
// 参数: nine.3 i# k/ C0 k) f* L/ _
// 返回: none.! n! I2 U, @7 f% W1 m4 |, I" w
// 版本: VER1.0" J" j2 w6 [0 K: t5 ]2 c
// 日期: 2014-11-28
/ ^" G2 d3 N8 M# O3 |// 备注:
% ^7 g- u) t+ z5 k. X' P/ y//========================================================================0 o& }* Y0 w# c/ x# r
void UART2_int (void) interrupt UART2_VECTOR+ G2 G0 j9 H4 G3 B4 k
{
: L3 {$ }8 k% R3 K: j6 x+ L. j        if((S2CON & 1) != 0)& L( o0 p; q% J" v. `
        {
, m. o$ b3 X% p" L                S2CON &= ~1;        //Clear Rx flag% [$ F, W9 |$ H0 i9 x
                RX2_Buffer[RX2_Cnt] = S2BUF;4 V0 r5 b! k+ b; V7 f/ B
                if(++RX2_Cnt >= UART2_BUF_LENGTH)        RX2_Cnt = 0;
0 \3 O8 Q3 j8 O! H  J' S        }$ b& u5 w( v: B9 O- N  R( s% c6 [

, j8 t. x4 A  ^8 ?' g& t. Y# E' [: ?! O5 y8 m
…………限于本文篇幅 余下代码请下载附件…………
- V' |$ ^6 u( D4 W8 h8 O; n
" }7 _. W; j& V6 P/ F+ y* \
游客,如果您要查看本帖隐藏内容请回复

2 I; Y: v$ m) ]! v& C
+ g$ t' A+ O- J0 P, D4 y- d3 ~) J; n6 E7 m7 K$ f0 [
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-19 20:22 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表