找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 1187|回复: 3
打印 上一主题 下一主题

c51单片机串口调试多字符发送接收问题

[复制链接]

108

主题

498

帖子

2289

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
2289
跳转到指定楼层
1#
发表于 2013-7-22 09:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

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

x
#include "REG51.h"   
. m0 n- a  I6 ^; b; h3 M; N9 @& G#include "intrins.h"; A6 P3 V9 F+ h7 m8 `9 H
#include <string.h>
$ [+ t# Z; q2 x( S) @#include <stdio.h>+ z$ z) d$ |1 v! |% x( D
#include "i2c.c"1 h: b) C4 C* e& F- O
#define uchar unsigned char
! I$ y2 E! b7 Guchar  port;7 E1 r* u  M& B% M5 }( P
uchar  rec_data;
9 U# H+ X! X6 l8 c# v' k) U+ vuchar  str[6];
& d% ]1 s  s2 q& `9 Luchar  point=0;
  t% y3 L# v0 c$ ?0 ~: i4 G//串口初始化
( F, {' q( `1 F/ ^5 N. B! gvoid UART_Initial()        1 X6 B9 r3 R1 w9 b. a8 s5 d( R3 ~
{ " l) ~/ q, [& D! S4 E
    SCON = 0x50; //串口方式1,允许接收
# ?! ^. [- Z. i7 u9 j" {% C& d        TMOD = 0x20; //定时计数器1方式2
* W4 `" ^3 z  O; }6 q        TH1 = 0xFD;        //9600 波特率 FD
. F9 m1 h- S9 ?: p) S# t* n! @        TL1 = 0xFD;( u, R  Z$ F( E0 g/ r
        EA=1;       * E+ \  u0 o; c2 O* R
        ES=1;      
$ o- `/ o* t1 o        TR1 = 1;    : p5 b: j; q3 i4 ?( a8 o8 ?( `
}) o& @8 X' x! _1 Z) y8 }1 B
. A6 W! y% v9 I- |
void waitsend()6 ^2 x/ n( \( x; }* c, x1 [3 w
{
4 C3 ?7 T% _; b3 p1 y% l    TI = 0;
. g. C: j, d  j        ES = 0;
) D' o6 ]  e8 P  P: z+ G3 {    while(!TI)3 X2 z9 O- o: p
    {
7 o! p9 X+ _1 V; ]: d- x    };! K( O$ s' {6 Q' b- ?5 n4 y5 f: s, t
    TI = 0;& I+ v2 N  Y  Y
        ES = 1;) [. B/ S$ _: K
}9 e2 e. _- k. {- b8 v
void delay(long i)8 B- }6 w3 S( B
{
: I% v' d. W7 B7 T& q    long  j;
+ L) }3 l" a. n4 }1 z" p! K    for(j=0;j<i;j++)
: V+ S; v6 y3 S" T# u    {+ m8 H8 z8 Y6 t; Z) p- ]; B
        SomeNOP();9 j2 C! Z8 X$ e# f
        SomeNOP();  A- J/ N% M2 Z% E
        }3 h! R: V- m8 z' t0 k' R0 R
}$ A1 j9 o) D+ ?1 w& p2 ?

1 X& v# H% V% o, |* avoid delay1ms(long  i)5 y% u' `" U7 V' D! K
{
4 O# D( p% O) Y% {3 d2 u. u    long  j;
( d+ x$ m+ M0 q- l5 b) D( n    for(j=0;j<i;j++)
4 E- m& @5 i/ w/ T$ K) y- u, \1 E    {. U/ \5 q! u0 {' W6 W% E
            delay(70);
" O# F0 o3 B( x4 o8 G% N' o        }
, {+ X' @/ a4 ^7 Y8 l}
2 R8 I7 O! b# I8 bvoid COM_REC(void) interrupt 4 . S6 x% B# g1 [! S$ e0 h
{/ i' z9 p& g- z3 }% |7 `8 S6 G
     
9 n& F6 T4 G0 a9 `, a    if(RI)
$ @, A1 y1 \7 ^  `    {    //清除串行接受标志位5 ~% M- y" T+ ^6 Z0 g6 i
        RI = 0;
- I! @% \% S/ j! f/ S        rec_data = SBUF;  //从串口缓冲区取得数据
- i8 _% F) h6 f9 Z+ B, w: I$ Q        if(point<=5)
# C0 ]8 r6 b  u- b9 ~        str[point++] = rec_data;, Q2 b! H9 t- ]: K
1 ?. g/ C! T. u/ H1 w* t
    }
8 s' e3 \, l- t( L, B+ }
: t" c9 a$ a2 k& _: A% ]( J0 s! O    if(TI)+ q& Q* t1 G) ^, I# j
    {
" p! a3 Y- f) N) v/ Y' D        TI=0;7 \3 L3 B- \5 o* S' q$ ?9 U  o2 X
    }
; _! M+ n; N5 Y- L}
6 H3 e7 W# Q; @3 R2 M5 \1 X. evoid COM_SEND(void)
- [4 }; C! E$ \3 N% i6 O- d{" Q1 b0 x  D# w& K( N9 y+ q
for(point=0;point<=5,TI=1;point++)             //连续发送数据8 n/ Q9 ]4 @7 D, v% t/ V% `
                                      
% \+ X; }# M6 B! C8 G0 q& U  p   {
2 ~! H; |8 n# Z5 R$ B0 ~  y   SBUF=str[point]; //把缓存区的数据都发送到串口; I! T+ c5 r5 T% P
   TI=0;
3 p$ ?! \4 t) p7 V. H% N   delay1ms(2);8 [' \+ C( r8 u
   }  U  O" z( V0 b0 j7 p7 Q
   SBUF=Read_OneByte(str[3],str[5],str[2]);) _8 I) }& {$ q0 K, l
   delay1ms(2);
! p2 Y8 H, _; x0 a5 [9 w. G1 }7 p8 E2 C}7 |5 t- s5 R, c8 ?; [5 R

. R4 S2 K8 [4 _! ]+ ~1 B- w3 m9 ], j" M6 a8 O* `
void main()
# y2 O# J4 P0 G9 |/ q{
4 q" D4 d+ h. `# R1 A    while(1)6 N+ a$ g! M' ?$ r6 S7 ~- v1 |
        {+ L2 m- C0 }2 X) T& k, s
        UART_Initial();
- R* }  V* s" W  V% G                delay1ms(4);
0 \5 G$ B8 R- V, Z: @                COM_SEND();1 N6 C2 \" K2 Y5 G3 ?4 ]0 n
                //point=0;4 X7 Q; u7 h8 @9 r. j& ]. U4 T
                }* m6 z' O$ A$ R8 y% h
}' B" J2 a+ s; _2 v( `! {, o$ e
  E; L1 h& y: h; T8 p+ r9 E
这是串口调试多字符发送接收程序,我想发送例如 5a 06 00 9a 00 01字符串,但在串口调试助手中接收不到啊
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

11

主题

232

帖子

-1万

积分

未知游客(0)

积分
-10841
2#
发表于 2013-7-22 15:45 | 只看该作者
你可以先试试看  那个串口板是不是好的
" D! t9 N- S7 E/ ^- E外围供电 把RXD TXD短一下

108

主题

498

帖子

2289

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
2289
3#
 楼主| 发表于 2013-7-23 08:48 | 只看该作者
幸福万岁 发表于 2013-7-22 15:45 $ I6 V4 ?5 z, ~  {( P- n
你可以先试试看  那个串口板是不是好的
8 g3 c# G  t# g& T外围供电 把RXD TXD短一下
$ O' R# }5 n5 K; u0 u
板子没问题

2

主题

97

帖子

684

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
684
4#
发表于 2013-11-15 01:46 | 只看该作者
#include "Include.h"
0 k, v9 g. F3 g# M" Q, l' p  O5 ^/ X, S+ F
unsigned char xdata uart_rx_buf[128];
9 n/ O- h. `+ J8 |, ounsigned char xdata uart_tx_buf[128];
; l4 y2 |9 d) Y) p* M! ?0 [2 Mvolatile UART_T xdata uart;  u5 v1 e. a+ h* p! n
unsigned char xdata uartGetBuf[8];
: \9 S) f7 b% O3 Kunsigned char RxCmdPt,RxCmdTimeOut;
: C  K1 R6 r9 E3 R7 ]( n) t/ p5 {- u
static void Serial0(void)interrupt 4 using 1+ E( A2 @" a, |
{: k& [3 F5 A4 K9 P/ V. R# J. e
    unsigned char temp,head;
8 @4 B# m# {: V5 d& o4 G
7 l  |4 k& k* t    if(_testbit_(RI))$ ~' }% Q3 L* j9 W  {  S
    {3 `. Q; l/ H( _7 T' O) D8 L. d
        temp = SBUF;
: G( V: j0 F9 T% B) f+ r9 R+ f        head = RBUF_NEXT_PT(uart.rx.head,sizeof(uart_rx_buf));/ z! |  }; P( y. }
        if(head != uart.rx.tail)  u' z# }1 W0 w) F8 C! T# x
        {! S# g6 Q. d! g  y& ^
            uart_rx_buf[uart.rx.head] = temp;
! Q$ R* y+ ^4 Y5 f: I# W            uart.rx.head = head;3 \: x' R' K- O6 H$ A/ O1 n6 g2 c
        }else
7 A8 `! D3 F9 E! f+ ]        {8 v/ h/ V* b7 b  U% q) t0 s; A  e
            uart.rx.error = 1;4 d8 M/ n+ y0 \7 |  z# y4 [* T
        }
" h! [7 @* W: k* {+ x* P- b+ A    }  _* X9 X; p% j% j: C
    if(_testbit_(TI))' M- D% a7 {& X" S* J) I! R. |1 \
    {
8 c4 u+ ]& I! ~6 U2 Z* u# m% h$ m        if(uart.tx.head == uart.tx.tail)
) `, O( d% f9 c# w1 ^) i5 \        {
9 c$ j* k3 Q) ~6 }            uart.tx.busy = 0;2 f2 m# a( ?! T) I
        }else
" ^5 ]" Q5 {' R' L) c        {
) b  ^# W. B% [5 S            SBUF = uart_tx_buf[uart.tx.tail];
( a& o* D9 n# s% G  C# ]            uart.tx.tail = RBUF_NEXT_PT(uart.tx.tail,sizeof(uart_tx_buf));6 O, ?& f- @3 D- F8 y7 y
        }
/ o2 l  N, b, @- S8 h4 }# Q    }
& M5 J: H6 N, Y$ a6 ]}
# Z  p( c* ^. S" O& q//函数  串口中断初始化
  W/ \8 |, q1 E, Vextern void UartInit(void)8 Q4 c$ Z; u; F
{
# |1 v0 ^7 x- S. y4 c- D- C    RCAP2L = -(XTAL/32/BaudRate_9600);. j3 o9 A7 C. I% ~$ R
    RCAP2H = (-(XTAL/32/BaudRate_9600))>>8;
# {4 g# Q0 G! v6 v6 p+ C& R. N0 I) E0 y& x* w+ y
    T2CON = 0x34;4 L/ ?2 D4 }( W3 ~( R! H
    SCON  = 0x50;
! V6 W) a& t; a* n) p- i, G* M
/ H; s- W9 b& ?* E" ?* F2 y    IP |= 0x10;     //serial 0 high priority2 @$ }! s0 a5 Q! Y. Z* Z2 `
    IE |= 0x10;     //enable serial 0+ X& M/ ~* P7 k# ]% R1 ^- n
, C' @3 a$ Z$ B+ v
    memset(&uart,0,sizeof(uart));
% q$ u$ n; z9 s+ h8 b}
" A2 n& v; r$ y& x// put char
8 e2 B" n6 v! B( L, J5 P1 wextern char Putchar(uchar c)% O5 b( Q1 d9 D0 o: U, X/ u
{
, o$ i; s2 y# R. b    unsigned char head;
: Q: W8 x" k8 x1 k/ d& _9 P- i
& Q. @- k; }8 {$ k: _% E    head = RBUF_NEXT_PT(uart.tx.head,sizeof(uart_tx_buf));! D+ o5 Y; P6 M: |: e5 P0 ~8 L
    uart_tx_buf[uart.tx.head] = c;' v! X+ u, t/ X# ^0 J$ I, w
    uart.tx.head = head;* U1 `% W  a  @8 m4 m7 L
8 C# {7 X6 r: I+ q  v5 K) p8 D# P
    if(uart.tx.busy != 0x5a)
' F8 l1 c/ w* C- b' p    {
3 Z' ]' O, x  g7 R* e6 Z. l        uart.tx.busy = 0x5a;
. [. i/ D! q3 i: Z4 W" L        TI = 1;7 F3 P, z' j, J+ u4 |
    }
  I+ d" e9 K# u$ g/ h5 `# \  p    return c;
, {5 Q0 m( c' }; @9 n7 N}! P' ]" Q" c3 x: j0 p6 x) N) G8 z* G
//函数 判断串口是否有数据传进来
) j5 j, N  z# e- _/ ^//     如果有,进行接收数据& H1 U- i0 t  q4 N' @
extern uchar GetRxBufSize(void)
3 m& X7 D6 s/ c9 r{
1 }. x$ E, D. C3 a) u    unsigned char head;
5 l& F: d+ }* ^' Y
) E& ^7 ?8 P- y8 X    head = uart.rx.head;' t+ i) g8 M5 N
    if(head < uart.rx.tail)& B( d2 w6 i5 f& a+ e! o
    {% j. @% O% M& r& h* j( M
        return (sizeof(uart_rx_buf) - (uart.rx.tail - head));  C) X* z/ S" `& M+ g
    }else
+ b9 G- e# _7 K( R1 Y    {
: M! Y0 [. L0 Y& ]! ?' P( j5 C9 S        return (head - uart.rx.tail);
% @0 W; h& a1 t" C    }
6 S& J4 t3 f8 N3 S! s$ n/ X0 z8 x}7 ~3 I4 B) ?, v. ?$ m) y6 w, y7 e( i1 ~
//函数 从串口缓冲区取数据,只取前8个字节的数据
' S& ?- C2 e  O5 v; W7 f( {static void EnterRxCmdModeByPc(unsigned char c)
- ?( j0 Y+ b: _9 Z, U4 v6 D& b' T{
! g" l$ H* v' }" \- o/ V    if(RxCmdPt < 8)5 Z( o3 k( R1 x% G, |
    {1 M' K+ f% t2 ]; R2 v8 V
        RxCmdTimeOut = 10;% h6 V( `. r- V
        uartGetBuf[RxCmdPt] = c;
/ J- L! v8 W2 C1 e+ {, x* \        if(memcmp(uartGetBuf,Updat,3)==0)
9 s4 k$ x: P: ^; g5 F        {, P* |& h/ P, [1 g. n: h$ S
            EnterIspMode();
' G4 _# Z8 B/ C( \' t1 v        }2 }9 C0 c5 U# `: S) |
        RxCmdPt ++;7 D8 {8 K  e+ E, ^6 a: r% D
    }% `& k7 m, p1 U5 i7 N8 ^6 v
}
% J0 C, t- ~' T! {' X( |//函数 取缓冲区中的数据" H3 r( \& X8 N: S: L* S% j
//返回" L2 x+ l9 i% ^8 o1 g7 d/ l/ X% g
extern uchar Getchar(void)
. I! V* \) j6 Q) O+ E, U# G{' t" }$ r" h2 r" Q* D+ O) V
    unsigned char c;: q$ w; Z$ p* R7 z  q, s
3 c. S' a  ?  n
    c = uart_rx_buf[uart.rx.tail];
2 ^; X( I! S; u  X' j6 z    EnterRxCmdModeByPc(c);0 ]" A+ y, }4 t  z9 V! m& \8 a
    uart.rx.tail = RBUF_NEXT_PT(uart.rx.tail,sizeof(uart_rx_buf));) h/ ]/ D2 t. c, ?
    uart.rx.timeout = 100;
' O3 V6 E. m6 s    return c;
5 z# D2 P) E( j5 k2 N! ]}
: h# }6 ?7 J* y, b6 m% e//
/ [6 u+ P5 Z. q( |4 ^/ {extern void UartTimer(void)using 1* S7 I8 `) D! P6 y4 N1 b
{
- b% \1 B) p6 Z    if((uart.rx.timeout)&&(--uart.rx.timeout == 0))
+ l+ a  _- {( ]7 [, K0 r! w    {
* E( b( R/ F: x" x/ d& w( `              uart.rx.error = 1;3 _- Z) b( }' p5 m* U
    }! j# j& s9 s  O$ X# C6 |) K( i
}
& X+ p$ d$ Z0 t9 u//
' m9 v' r( a0 a6 N# c4 p2 C8 ~4 pextern void ClearRxCmdPt(void)
5 C% W5 }# B1 F  K/ p{
& z* ]% ~6 S; t  T5 C1 ]" R0 r    if((RxCmdTimeOut)&&(--RxCmdTimeOut==0))" w3 x' q# J% |0 j& V& U1 N8 m
    {4 Q0 y0 S# |+ d1 F
              RxCmdPt = 0;" }' ^8 {+ ]  R) A, g0 P) j
    }
6 E& I% Q# M# m7 v; M1 c}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-2-3 01:07 , Processed in 0.057171 second(s), 32 queries , Gzip On.

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

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

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