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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include "reg51.h"
9 ?7 [& ^. q& ^/ i- s% l2 Q5 Q; ]5 N #include "intrins.h"
. k9 ~1 V# G$ n9 E5 z0 K$ A* ?  w
typedef unsigned char BYTE;
1 x7 }* k! H9 q) t4 U9 e' d typedef unsigned int WORD;& J; A  N1 M4 F2 F
" S: l: a( M5 p0 |+ x% a3 m. M
#define FOSC 11059200L          //系统频率/ J& M! D! w9 a( t; R( L2 z* e
#define BAUD 9600            //串口波特率" u) a0 B! n, _) Y

0 F9 v' q% A/ I; d* S#define NONE_PARITY     0       //无校验+ w- U; c! H! Y# N! H
#define ODD_PARITY      1       //奇校验
; E2 p1 _/ e# E# n2 r#define EVEN_PARITY     2       //偶校验
( X0 X" t+ c+ t! ?& g  Y( i# G#define MARK_PARITY     3       //标记校验$ G, E- l* Y. Q1 y. S
#define SPACE_PARITY    4       //空白校验
  L; ~1 V3 P. b: t3 H6 r. x0 |8 n: J- m  o4 n
#define PARITYBIT EVEN_PARITY   //定义校验位
1 }! |4 d( s' Y# m& [( a/ ~4 r
sfr AUXR  = 0x8e;               //辅助寄存器. Z4 F% ]. _; ~; j: \" M8 I7 g1 i; z
sfr S2CON = 0x9a;               //UART2 控制寄存器$ x# f1 G" q5 R$ ^, q
sfr S2BUF = 0x9b;               //UART2 数据寄存器
: @2 ]2 `+ u) o5 @1 Usfr T2H   = 0xd6;               //定时器2高8位! }4 U' i; C$ r
sfr T2L   = 0xd7;               //定时器2低8位& a6 {5 K8 G# r
sfr IE2   = 0xaf;               //中断控制寄存器2
: @' l3 _+ {$ `$ `4 t" F8 ~# U5 C: x9 `' T. g# x8 h5 `
#define S2RI  0x01              //S2CON.0
! C0 A! k8 l0 ]" ]( q1 @: k #define S2ti  0x02              //S2CON.1
7 G0 z$ h- Z$ T; }8 D* T! g #define S2RB8 0x04              //S2CON.2
3 V, X2 b6 g# D. c #define S2TB8 0x08              //S2CON.3
- v( s! o' h! o' p# X( T; H* g; X- V0 A( \) A' P
sfr P_SW2   = 0xBA;             //外设功能切换寄存器2; r7 I* h' m1 O5 X& A5 Y, x- p5 ~
#define S2_S0 0x01              //P_SW2.0. q% r: u! W/ Y/ F* m5 ]
  |, e+ T! }, e! |+ K
bit busy;
% `4 G1 |! ^5 ^4 Q; z, \: d6 I BYTE  BUFFER[10];
7 i' w0 a; J/ H. g* Y5 D int i;
9 S4 E! s$ y9 l4 C void SendData(BYTE dat);) l- ~. }/ Y6 z& b" l
void SendString(char *s);
: V9 }1 O, H+ H& D4 ]  ]
$ ~2 Q) q+ L, F void main()
! I2 Y4 ^9 H- c5 f( i/ ? {% p( Z$ v' Y6 l8 t  X
     P_SW2 &= ~S2_S0;            //S2_S0=0 (P1.0/RxD2, P1.1/TxD2)6 ~; E1 L* p2 d& i
//  P_SW2 |= S2_S0;             //S2_S0=1 (P4.6/RxD2_2, P4.7/TxD2_2)
) p+ a3 b5 O  M# R, u
/ r2 N! c  x# S4 e6 k8 U2 R- r4 Z #IF (PARITYBIT == NONE_PARITY)1 h- V# j3 Q, s% b1 {* `
     S2CON = 0x50;               //8位可变波特率0 s& `6 P' ^, m& e2 x9 u
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)' f: n  Y7 a. F
     S2CON = 0xda;               //9位可变波特率,校验位初始为10 X* q% Y& S3 G/ y2 V
#elif (PARITYBIT == SPACE_PARITY)
2 L$ h' w2 F9 t- ]# w5 z) S     S2CON = 0xd2;               //9位可变波特率,校验位初始为0
9 z( F. E; B) t; [, c) V. l+ q( j' |9 | #endif* o8 h) S3 L$ ]  S# L$ t* I8 P6 v( l

3 A5 H3 J( s- }# |0 h     T2L = (65536 - (FOSC/4/BAUD));   //设置波特率重装值: v* F. g) |4 n. i2 i3 u
    T2H = (65536 - (FOSC/4/BAUD))>>8;. ~1 u* ~- q$ B# O- Y$ z( k
     AUXR = 0x14;                //T2为1T模式, 并启动定时器21 T+ ^- ?' j4 H3 j
     IE2 = 0x01;                 //使能串口2中断9 W$ f* |. l; `: R
    EA = 1;( `& ?# o" ?' S1 S' I0 o! v

0 r/ P9 F. a3 n; r+ ?2 d8 \3 H     //SendString("stc15F2K60S2\r\nUart2 Test !\r\n");
# p9 s) Z. ~7 _+ |! r+ h) @, _     while(1);( P8 g/ @, k3 H( [1 n8 J- c
}
2 ^! {3 y) X/ }! F" M( Y8 `
" Q& r% Y# H9 T6 a# ^ /*----------------------------$ I; X- b9 h: u! s
UART2 中断服务程序1 ], ]' K# c' W, \$ t. t
-----------------------------*/
+ a$ m; P) w5 X) H, n8 kvoid Uart2() interrupt 8 using 1
, _( h8 \* U, b2 M {
7 p6 e6 v: i7 s3 n     if (S2CON & S2RI)
! _$ {8 g& B6 ]9 W1 f- R     {' X& f0 [2 U- v" X$ n$ O: ^
         S2CON &= ~S2RI;         //清除S2RI位
, |, A7 k0 j3 m6 q! d' }. c. q        BUFFER = S2BUF;            
# f% [! `0 r) c; A$ A- v         i++;7 n) D0 T* U! ^
     }  T& W4 o6 K' j% v* R( d
     if (S2CON & S2TI)
) ^  B+ @) t8 e1 B+ }     {8 V1 I) ^. s( q! o" ?
         S2CON &= ~S2TI;         //清除S2TI位
. n  u, n3 P5 M& n) g; v9 d& W        busy = 0;               //清忙标志
: Q4 `- q0 }* G; Q2 }) I    }: q5 ?$ O! Y0 x
}
* E+ D! W- `( o0 g2 c  ~7 [" S$ X! b6 E0 K/ E6 r
/*----------------------------+ @. [0 V6 {- S
发送串口数据, K* i6 G) n! I5 A( ]$ T* ?8 z
----------------------------*/5 Q8 k4 n( U0 C7 Y, O' J" @
void SendData(BYTE dat)7 ]1 R4 \0 v( o2 ]
{, d( J: {" ?9 V  B
     while (busy);               //等待前面的数据发送完成3 e' S* \& u( G  l( L! A
    ACC = dat;                  //获取校验位P (PSW.0)
( J) t: N% I* p- [     if (P)                      //根据P来设置校验位9 k. g+ x" ~1 r1 G: T$ f- e
    {
/ F- p5 G* `- a #if (PARITYBIT == ODD_PARITY)
* w& v9 |2 Y4 f, C         S2CON &= ~S2TB8;        //设置校验位为0
% a4 X' w/ E5 u' D #elif (PARITYBIT == EVEN_PARITY)
4 K% D% I+ F0 Q2 z  z# D: Z( w& j5 c6 d         S2CON |= S2TB8;         //设置校验位为1
3 j1 O1 m) {7 B/ t #endif' Z  ?/ Y2 U" P, {/ t. K" ~3 Y2 a
     }
1 r3 B$ }. b7 C     else
8 R: |* J9 @. V) h     {: q) V" f7 {/ c; X& b
#if (PARITYBIT == ODD_PARITY)6 o9 w7 @' F. s% P
         S2CON |= S2TB8;         //设置校验位为1; \% n1 p. ~" c, J0 K; m
#elif (PARITYBIT == EVEN_PARITY)1 s7 @+ o0 A/ d+ `* z% `4 f
         S2CON &= ~S2TB8;        //设置校验位为0  B- x7 c0 c2 k9 L
#endif
9 H; ~, B* j3 ?! S     }
0 O1 X" y# F% u0 ~. b4 N* M* Y& |2 y* `* y     busy = 1;
7 p( `' X. ]% J  |7 |( j     S2BUF = ACC;                //写数据到UART2数据寄存器
9 m/ f4 f$ w( c  A! K* v0 c}$ d  B' }  |" b7 ?9 n; i
2 e. o) ?8 W6 j* Q  x# [
/*----------------------------
9 N2 R) ?% P8 x发送字符串1 y; f( o& M! a; G
----------------------------*/
  w( _7 ^, @2 T1 o: u  }void SendString(char *s)2 n- V0 K2 p( @6 P4 E
{0 o: g8 N' b( W1 t' A; i9 P
     while (*s)                  //检测字符串结束标志
2 m0 W0 H) b% v6 \2 U6 D* s4 c2 {    {' f; a7 B2 P1 i* w! [! C- ?( p  ^
         SendData(*s++);         //发送当前字符
& p- {! R/ M& Z3 k4 A. Y) Y    }
% P3 i$ H2 i8 L0 Q0 O3 ? }

7 T+ f9 y% [; H
  • TA的每日心情

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

    [LV.1]初来乍到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-26 08:24 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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