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

为什么通过串口二只能接受到上面单片机发送过来的1个字节的数据,上面发送了7个字...

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include "reg51.h"# L. `) V2 O) W3 t8 s! E
#include "intrins.h": M% h5 P  P9 }
$ D* U, o" r. Y- L3 }, W
typedef unsigned char BYTE;
  S5 D; H2 w, h% v2 m9 P/ b4 a9 t typedef unsigned int WORD;7 f: G, J4 h6 I/ n9 b

! h& v* a2 A9 k0 d #define FOSC 11059200L          //系统频率
/ J+ c4 ?$ s5 @+ ?  e4 z4 p+ m' S#define BAUD 9600            //串口波特率
8 y$ F7 q/ S( S8 @  R% N/ p
/ r3 O! N6 k6 q) e# |: U# \#define NONE_PARITY     0       //无校验1 h, e) _0 p5 d
#define ODD_PARITY      1       //奇校验6 ^4 [; o2 \; J/ ]
#define EVEN_PARITY     2       //偶校验
  U6 l" b, u; U* N; E$ P#define MARK_PARITY     3       //标记校验) w! ~0 ?" F9 T( i: @$ ~# `  F
#define SPACE_PARITY    4       //空白校验
( o+ Y5 d' c' e5 c4 ^  A. A
) @) Y- r. w" t; i#define PARITYBIT EVEN_PARITY   //定义校验位
4 Q7 \0 }1 P, b/ i  r0 Q5 e# L3 ~; q  N5 N$ J* Z+ N) _
sfr AUXR  = 0x8e;               //辅助寄存器* G+ ?! `  A$ A+ `
sfr S2CON = 0x9a;               //UART2 控制寄存器8 H/ y! w* V3 ~6 N' R7 P
sfr S2BUF = 0x9b;               //UART2 数据寄存器
8 o  N8 }+ a/ v. E/ Osfr T2H   = 0xd6;               //定时器2高8位
4 m9 q. _2 E( L+ s& _sfr T2L   = 0xd7;               //定时器2低8位/ f5 t5 K2 y. O- k
sfr IE2   = 0xaf;               //中断控制寄存器2
+ d, U! E8 L7 ~9 v3 y5 ^0 |( D0 m$ T2 ~% E0 T+ I
#define S2RI  0x01              //S2CON.0  w* K6 Y, \' a( @
#define S2ti  0x02              //S2CON.1
* ^* C; S! {5 V+ a) r #define S2RB8 0x04              //S2CON.2) u, H  j3 W  q. Q4 `$ q
#define S2TB8 0x08              //S2CON.3
9 q3 k  t7 K% n5 [1 [: c5 Y. }" Y8 a3 e7 n! W; R  R
sfr P_SW2   = 0xBA;             //外设功能切换寄存器2
; ^' k! i1 @, j+ y5 z #define S2_S0 0x01              //P_SW2.0' l  P" l) L. m6 x

. J# s( p  J: q bit busy;
  O6 t# W( C# Q" c3 R! \0 o+ b& S! S BYTE  BUFFER[10];
" C. D* f2 A) p( n) A/ X0 A+ x int i;
: d: V. @* k$ t) R+ o4 e' }2 o void SendData(BYTE dat);
8 v1 p! Z( {% j( s$ c void SendString(char *s);* k$ m+ p( H0 x! t% o0 o0 q
" z/ E3 p7 D% Q3 T
void main()
# V0 _& Q# z, X2 {. r/ ^# \. i {. g; A' p- }& O* z/ k! l
     P_SW2 &= ~S2_S0;            //S2_S0=0 (P1.0/RxD2, P1.1/TxD2)2 r1 N& Y. S1 w& |
//  P_SW2 |= S2_S0;             //S2_S0=1 (P4.6/RxD2_2, P4.7/TxD2_2)
# Y* z+ q5 G- _0 A( q3 f  P7 {/ I: X( w% B* J( y
#IF (PARITYBIT == NONE_PARITY)
  z0 W7 c! D+ m( p! A     S2CON = 0x50;               //8位可变波特率
# l- w7 I. P8 L#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
' j. ~- J3 g  [  U9 H5 K3 J0 j3 {     S2CON = 0xda;               //9位可变波特率,校验位初始为1% I5 [3 h: A( F1 V$ n
#elif (PARITYBIT == SPACE_PARITY)
( [( u4 w. w+ y0 v     S2CON = 0xd2;               //9位可变波特率,校验位初始为0
3 T" s) R" X5 j8 w& o #endif
: t0 i* \% P1 c4 O
7 [/ H7 z+ `. I2 M, V     T2L = (65536 - (FOSC/4/BAUD));   //设置波特率重装值& z0 Z! |1 t5 t- v; I" y
    T2H = (65536 - (FOSC/4/BAUD))>>8;
  I* u2 `6 P' u3 ]- \3 L     AUXR = 0x14;                //T2为1T模式, 并启动定时器2: w& R7 w# W% p( N: i
     IE2 = 0x01;                 //使能串口2中断
) `0 ~* r: U3 Z7 e    EA = 1;
+ Q$ O0 v1 t' Y& Y& e
& `& ^7 L; b- k( }* E     //SendString("stc15F2K60S2\r\nUart2 Test !\r\n");, C, W2 X7 I; Y  C: M
     while(1);2 h2 O$ K2 \- w; S8 d8 I
}
# W/ U( C8 U  ?1 C5 J. p; Z# f
3 \! \' I7 z9 O) S1 L: z/ X0 y /*----------------------------. F/ M% d& {1 Y6 e
UART2 中断服务程序3 p$ y( f) k0 |0 M5 J( J. _( ~
-----------------------------*/
' E2 Q% n. b" r0 q/ Q- \void Uart2() interrupt 8 using 1& y1 }# K, |$ u: w; Z
{/ p$ W; O+ q# A$ q' S
     if (S2CON & S2RI)
+ a7 E, K0 C( q2 r5 c7 I* o     {7 B( ?! i5 G. L
         S2CON &= ~S2RI;         //清除S2RI位% I+ S' y0 h* N
        BUFFER = S2BUF;            
& r. b8 R8 n% y, O; t, ?2 g         i++;
: R: v7 G. v/ A  r# g     }2 {+ S' J- O! p  x) _+ H: C  q, g
     if (S2CON & S2TI)) z! T1 H: x* X& f0 w% P# M
     {
0 m& I( U( r) v2 \" @; [' D9 f         S2CON &= ~S2TI;         //清除S2TI位
( I1 S7 I3 ]2 ~& c% ^- P- G8 O: N& U        busy = 0;               //清忙标志/ M) F0 u) F. D+ E
    }
# ?& [' G. Q7 N" h! Z }
# n( y6 u) L+ Z" S. z9 W- l; h2 x3 g* {" b
/*----------------------------7 R! j' o2 o* B7 E/ X* U: {
发送串口数据
7 _, B# M4 k0 ^+ ^6 T0 [; g----------------------------*/
, |6 S6 M  O: t, R) Y6 _void SendData(BYTE dat)7 T1 C- }" A5 Y1 {0 n. @1 Q; U
{
6 [% g8 j/ {+ f7 ]9 k2 ^2 o     while (busy);               //等待前面的数据发送完成$ e  K; B* z4 x$ c0 u
    ACC = dat;                  //获取校验位P (PSW.0)3 I7 x$ M* w* d2 f
     if (P)                      //根据P来设置校验位4 L$ z4 J1 X) M
    {
) e& F/ o# [4 K6 j, p; G #if (PARITYBIT == ODD_PARITY)' C4 v& U. G: j
         S2CON &= ~S2TB8;        //设置校验位为0
7 p+ Y& L5 \3 u6 k #elif (PARITYBIT == EVEN_PARITY)
( h: G0 X8 ?' `6 B* w/ K3 g( b         S2CON |= S2TB8;         //设置校验位为13 B) J. m  f* D, c
#endif
- |% U( d" B3 i6 M$ T4 }     }* t( d9 U5 Q% n( N9 e" a
     else
$ Q7 p8 z! Z% m     {
+ G% T: I6 F% r* D7 p! _. C #if (PARITYBIT == ODD_PARITY)
1 O* a4 g. [3 \0 G" n$ ^4 O: |         S2CON |= S2TB8;         //设置校验位为1
$ [/ O/ F) l; Z+ b% @9 z& c+ ^ #elif (PARITYBIT == EVEN_PARITY)
- d0 m( H% q) E7 I         S2CON &= ~S2TB8;        //设置校验位为0( E" V/ ?! `) c
#endif, k$ E: ~3 T3 `( k( Z
     }
4 F5 g( r) M' q" G# T/ Z     busy = 1;3 I4 z- }: z8 w! T1 s8 z' v+ i
     S2BUF = ACC;                //写数据到UART2数据寄存器; ?+ G& b4 G3 T$ n' M3 n* `/ W
}
9 l8 v5 z8 S; ^
# H- T# X6 \/ c# G /*----------------------------8 l% T9 o/ R7 s2 W+ E
发送字符串5 f; x) M! O$ w% ^1 B
----------------------------*/0 q& s: ]8 \8 g# u
void SendString(char *s); A" T) f: E- A8 ?) [
{
4 K: d: U5 [2 w& e. @     while (*s)                  //检测字符串结束标志
, ^8 ^$ e; \: [6 ^    {5 g7 i8 R- i% d  ?; o$ b
         SendData(*s++);         //发送当前字符
+ F; N1 K( \' y( r+ D% t  ]    }' Y3 [: e4 s$ y4 K
}

" ]0 U- F  g+ P6 ], x
  • TA的每日心情

    2019-11-19 15:55
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2019-12-16 17:53 | 只看该作者
    你在哪看出来的只接收了一个数据呢,程序不完整吧
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-11 11:47 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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